汇总预留法的思路
规划时就按「未来能汇总」的粒度分块:每个站点或区域拿一个 2 的幂大小的连续块,且起点按这个块大小对齐。这样对外只通告一条短前缀就能覆盖整个区域,区域内部的网段增减不会影响上游路由表,收敛速度快、变更影响面小。
为什么必须提前对齐
汇总依赖两个条件:地址连续、起点对齐。192.168.1.0/24 与 192.168.2.0/24 看着相邻,却不在同一个 /23 边界内,无法合成 /23;只有 192.168.0.0/24 与 192.168.1.0/24 才能合成 192.168.0.0/23。所以规划期若随意取段,事后想汇总只能退到更短的前缀,顺带把未使用的地址也带进来形成黑洞。
与 VLSM 的配合
VLSM 解决的是「块大小贴合需求」,汇总解决的是「块的位置便于归纳」。两者配合的常见做法是:站点拿一个整齐的块(/20 或 /16),内部用 VLSM 按实际需求细切,站点边界设备只向上通告站点汇总路由,内部明细留在区域内。这样既省地址,又控制了对外的路由条目数量。
基本信息
| 原则 | 站点块大小取 2 的幂,起点按块对齐 |
|---|---|
| 示例 | 10.1.0.0/20、10.1.16.0/20、10.1.32.0/20 … |
| 收益 | 边缘只通告一条汇总路由(如 10.1.0.0/16) |
| 代价 | 为对齐牺牲部分地址利用率 |
| 公网口径 | 多数 RIR 的多宿主最低分配为 /24 |
典型使用场景
- 多站点企业网:每个站点一个 /20 或 /16,对外只通告站点汇总
- 云上 VPC 与本地互联:两侧编码对齐,便于 BGP 汇总通告
- OSPF 或 EIGRP 区域边界:做区域汇总以隔离内部变化
- 机房分区:按楼层或机柜分配连续块,简化路由与 ACL
- 并购整合:新网络映射到预留的连续块,减少对现有路由的影响
按区域对齐示例
按区域对齐示例
10.1.0.0/20 华东区
10.1.16.0/20 华南区
10.1.32.0/20 华北区
...
汇总:10.1.0.0/16 一条路由覆盖上述全部区域
# 每个区域的起点都是 16 的倍数,块大小一致Python 检查能否汇总
Python 检查能否汇总
import ipaddress as ip
nets = [ip.ip_network('10.1.%d.0/24' % n) for n in (0, 16, 32, 48)]
print([str(x) for x in ip.collapse_addresses(nets)])
# 4 个 /24 不连续,无法合并;若换成连续 0-3,则会合并成 10.1.0.0/22
cont = [ip.ip_network('10.1.%d.0/24' % n) for n in range(4)]
print([str(x) for x in ip.collapse_addresses(cont)]) # ['10.1.0.0/22']对齐与规模对照
| 站点块 | 块大小(第 3 段步长) | 可含 /24 数 | 汇总前缀示例 |
|---|---|---|---|
| /22 | 4 | 4 | 10.1.0.0/22 |
| /21 | 8 | 8 | 10.1.0.0/21 |
| /20 | 16 | 16 | 10.1.0.0/20 |
| /19 | 32 | 32 | 10.1.0.0/19 |
| /16 | 1(第 2 段) | 256 | 10.1.0.0/16 |
公网侧同理:多数 RIR 对多宿主的最低分配是 /24,比 /24 更小的块很难被上游接受并通告。做公网地址规划时,如果要让上游能接受你的前缀,块大小与对齐要求必须提前与运营商确认。
汇总前缀覆盖面大于实际使用范围时,未规划或已挪作他用的地址会被汇总路由吸走并静默丢弃,形成黑洞。做汇总前必须确认整块地址都在自己掌控之下。