把众多相邻网络前缀合并成一条汇总路由。

BGP 聚合收窄路由表

聚合用一条覆盖式通告,替掉一组彼此相邻的前缀:下游每一个对等体因此少存几十条表项,也不再逐条处理每个成员前缀的更新。表变小了,抖动也变少了,边缘网络的反复震荡不再向外传播。 代价是这条汇总本身就是一句关于可达性的承诺。一旦覆盖前缀进了表,转发引擎就会拿它去匹配那些成员路由已经消失的地址;表变小,换来的是一条更模糊的故障信号。 聚合到底买到了什么 一个对等体同时收到 10.1.4.0/24、10.1.7.0/24、10.1.9.0/24 和覆盖它们的 10.1.0.0/16,要存四条。配上 aggregate-address 10.1.0.0/16 summary-only,就只存一条。抑制发生在出方向:这些更具体前缀仍然留在聚合者自己的 BGP 表里,仍然参与它自己的转发,只是不再被通告出去。FRR 在这一点上很严格——必须先在 BGP 表里存在更具体前缀(光有 RIB 不算),聚合才会被生成。 第二个好处是抖动。成员前缀每抖一次,对等体都要解析、选路、重装一遍。躲在汇总后面,这些更新就止步于聚合者,一个每分钟抖两次的客户网对互联网其余部分的开销归零。在长期抖动的边缘,这才是真正想要的那个性质。 summary-only、suppress-map 与 as-set summary-only 对每个邻居抑制所有更长的前缀。suppress-map 只抑制被路由映射命中的那些更具体前缀,用于「这一整段都汇总,但那个例外继续单独通告」。as-set 改变的则是路径的样子:它不把成员路径塌缩成聚合者自己的 AS,而是生成一个装着真实起源 AS 的 AS_SET。 as-set 保住了环路检测,却毁掉了别的一切。AS_SET 会让路径在按 AS 路径长度比较时变长,让起源校验拿不到可用的东西,而且它正在被明确废弃——FRR 直接提供 bgp reject-as-sets,两个方向都丢弃这类路由。真正危险的配置,是跨越不同起源 AS 做聚合。把来自 AS64501 的 10.1.4.0/24 和来自 AS64502 的 10.1.7.0/24 折进由 AS64500 起源的 10.1.0.0/16,等于告诉所有对等体「这一整块都是 AS64500 起源的」。按起源过滤的邻居于是接受了一段本不该接受的前缀,按 AS 路径过滤的邻居则完全看不到那些客户。细节是被销毁,而不是被压缩。 ...

十月 8, 2027 · 1 分钟 · XB Field Notes
跨独立网络的路由器交换可达性与策略通告。

BGP 组成了互联网的路由表

BGP 是唯一把几万个各自独立运营的网络缝成一张转发表的协议。它承载可达性,但它真正承载的是策略:每个网络说明自己起源哪些前缀、从哪个邻居学到它们,以及通过过滤器说明自己愿意把哪些继续传下去。 代价是这张表建立在彼此之间没有合同的信任之上。通告在扩散之前不会被任何东西校验,所以一处笔误或一条配错的过滤器,几分钟内就是全球性的,而且要等到有人注意到才会消失。 AS 路径同时是环路检测和策略信号 在出方向,eBGP 发言者会把自己的 AS 号前插,收到更新的一方如果发现 AS_PATH 里已经有自己的 AS 就直接丢弃。这就是环路防护的全部机制,也是路由绕成一圈后无法被重新引入的原因。iBGP 不做前插,所以一条 iBGP 学到的路由带着与把它带进本 AS 的那条 eBGP 路由相同的 AS_PATH;也正因如此,一个 AS 需要 iBGP 全互联或路由反射器才能把路由分发下去。 同一个字段还兼着另外两份工作。运营商用它做过滤——拒绝任何包含某个对等体 AS 的路径,只接受路径末端是客户 AS 的路由——而路径选择则比较它的长度。一个字段,三份职责,而且互相冲突:为了让一条路径显得不吸引人而做前插,同时也会让它看起来像是过滤器本该拒绝的路由。所以前插这类手段通常只在自家门口有效,一旦越过别人的过滤器边界就会失效。 为什么这张表大约是一百万条前缀 真实数字,取自本文核验时抓取的 CIDR Report 快照:IPv4 前缀 1,080,189 条;把能聚合的都塌缩掉则是 597,258 条。仅 Amazon 一家就起源 18,025 条前缀,其中 15,759 条是更大块的更具体前缀。整张表里大约有一半,是已经被通告过的地址空间上再切出来的更具体前缀。 ...

九月 12, 2027 · 1 分钟 · XB Field Notes