路由表大到装不下怎么办——把下一跳相同的连续网段合并成一条更粗的路(路由聚合):四条 /24 并成一条 /22,表更小、查得快、通告少;聚合的本质是"掩码变短、前缀变粗",靠 6.3 的最长前缀匹配保证明细永远优先于聚合行。
6.9 说了远方路的登记要"一条条写"或"协议一条条学"——网段一多,表就爆炸。本节是 6.9 的续集:登记完再瘦身。计算靠 3.11 的掩码、6.3 的最长前缀匹配,全是老朋友。
一、问题:骨干路由器的表大到装不下
互联网核心路由器的路由表有几十万条——每条都占内存、每条都要逐行比对、每条都要随路由协议通告(6.9)。不瘦身,设备扛不住、查表慢、全网通告流量也爆炸。
二、聚合:把"同一出口的一片网"并成一行(第一张配图)
观察这四条路由:目的网段不同,但下一跳全一样(都交给 R2)——既然都走同一条路,何必登记四遍?
- 聚合前:192.168.0.0/24、1.0/24、2.0/24、3.0/24 四行 → 下一跳 R2;
- 聚合后:192.168.0.0/22 一行 → 下一跳 R2(掩码 255.255.252.0,恰好覆盖 0.0 ~ 3.255 这 1024 个地址)。
一行顶四行。本质上这是把 6.3 说的"一片网"的粒度再放大一层:/24 是"一片楼",/22 就是"一片街区"。
三、怎么算:二进制对齐,取公共前缀(第二张配图)
聚合口诀只有一句:把各网段的二进制对齐,从左往右数,数到第一位不同为止,前面相同的位数就是聚合掩码。
以 192.168.0.0 ~ 192.168.3.0 为例:
- 第 1、2 字节(192.168)完全相同 → 贡献 16 位;
- 第 3 字节分别是 0、1、2、3 = 00000000 / 00000001 / 00000010 / 00000011** → 高 6 位相同,从第 7 位起不同 → 贡献 6 位;
- 公共前缀 16 + 6 = 22 位 → 聚合路由 192.168.0.0/22(掩码 255.255.252.0)。
为什么不会冲突:6.3 的最长前缀匹配保证——包的目的地址同时命中明细行(/24)和聚合行(/22)时,明细优先(前缀更长更具体)。所以聚合行只是"兜大面",明细在时它让位、明细撤了(比如某网段断了)它还能按聚合方向继续扔(黑洞风险见误区)。
四、红线:只聚合"下一跳相同"的网段
聚合省表的前提是这些网段真的都从同一个口走。把去向不同的网段硬聚进一条,包就会被扔错方向——省了表,错了路。这是聚合唯一但致命的纪律。
五、动手 Demo80:亲手算一次聚合
- 拿这四个网段练手:10.1.0.0/24、10.1.1.0/24、10.1.2.0/24、10.1.3.0/24;
- 对齐第 3 字节:0、1、2、3 的二进制前 6 位相同(同 192.168 那题)→ 聚合为 10.1.0.0/22(掩码 255.255.252.0);
- 再练一个"不能聚"的反例:10.1.0.0/24 和 10.1.128.0/24——第 3 字节 00000000 vs 10000000,第 1 位就不同,公共前缀只有 17 位,硬聚 /17 会把 10.1.0.0~10.1.127.255 一大堆没登记的地址全裹进来;
- 30 秒实验:
route print里看自己网卡那条 192.168.1.0/24(或你所在网段)——想想运营商的骨干路由器上,你所在的整个小区/城市可能就是被聚合成了一行,几万用户共享表里的一格。 - 全部完成。你现在能"会算":给几个连续网段,算出聚合掩码。
六、常见误区
- "聚合就是把网段加起来"——不是求和,是取公共前缀;掩码变短、范围变大,聚合行覆盖的地址比四条明细加起来还多(/22 覆盖 1024 个地址,四条 /24 只有 1024 个,恰好连续才严丝合缝)。
- "聚合行和明细行会打架"——6.3 最长前缀匹配兜底:明细永远优先;聚合行只在明细缺席时兜面。
- "聚合越多越好"——聚合是有损压缩:某条明细网段断了,聚合行不知道,包会朝那个方向空扔(黑洞);网络故障定位也变难。瘦身和精确是一对权衡。
- "任何网段都能聚合"——两个硬条件:地址连续(二进制上真的拼成一片)+ 下一跳相同;缺一个就是错误登记。
- "聚合掩码随便取"——掩码必须取到"公共前缀"那一位:取长了(更细)没省到,取短了(更粗)裹进不该裹的网段。
- "只有动态路由才能聚合"——静态路由同样可以只写聚合条(route add 一条 /22 顶四条 /24);OSPF 等协议还能在区域边界自动聚合。
七、动手自测
点开自测(先自己答,再展开)
1. 路由聚合解决什么问题? 2. 聚合的前提条件是什么?(两条) 3. 聚合口诀是什么?掩码位数怎么定? 4. 192.168.0.0~3.0 四个 /24 聚合后是什么?掩码呢? 5. 为什么聚合行和明细行不会冲突? 6. 明细网段断了但聚合行还在,会发生什么? 7. 聚合有什么副作用? 8. 静态路由能不能用聚合? 9. 10.1.0.0/24 和 10.1.128.0/24 为什么不能聚成 /17? 10. 聚合的本质用 6.3 的话说是什么?答案:① 骨干路由表几十万条,表太大装不下、查得慢、通告多;聚合把同出口的连续网段并成一条。② 地址连续(二进制拼成一片)+ 下一跳相同。③ 二进制对齐取公共前缀;数到第一位不同为止,相同位数=掩码长度。④ 192.168.0.0/22(255.255.252.0)。⑤ 最长前缀匹配:明细 /24 比聚合 /22 更长更具体,永远优先。⑥ 黑洞:包仍朝聚合方向空扔,直到对方丢弃。⑦ 有损压缩:故障时黑洞空扔、定位变难——精确度换表容量。⑧ 能:静态可只写聚合条;协议在区域边界也能自动聚合。⑨ 第 3 字节 00000000 vs 10000000 第 1 位就不同,公共前缀只 17 位;硬聚 /17 会裹进未登记的 10.1.0.0~10.1.127.255。⑩ "一片网"的粒度再放大一层——掩码变短、前缀变粗。
八、下一步学什么
- ☑ 6.11 高度压缩路由信息的终极方法(默认路由) ✅ —— 高度压缩路由信息的终极方法(默认路由):聚合是部分压缩,默认路由是"其余全归我"的终极兜底。
相关笔记
- 高度压缩路由信息的终极方法(默认路由) —— 部分压缩之上还有终极压缩:一条 0.0.0.0/0 管全部未知
- 登记非直接连接路由信息的方法(静态路由、路由协议) —— 登记在前、瘦身在后;聚合行的下一跳规矩同静态
- 确定传输数据的目的地(确定数据传输的目的地) —— 最长前缀匹配是聚合不打架的保险丝
- IP地址范围的分隔符(子网掩码) —— 掩码能变长变短,聚合才成为可能
- 路由器所掌握的网络信息(路由表) —— 表只记网段不记设备,粒度本就可粗可细
- 将数据传输到远程网络(路由) —— 判断题用的 AND 掩码,同一套二进制功夫