BGP 不比前缀长度
一个流传很广的误解是「BGP 选路时掩码长的明细路由优先」。事实是:BGP 决策只针对同一条 NLRI,比较的是属性(权重、LOCAL_PREF、AS_PATH 长度、Origin、MED 等)与后续的度量、router-id 等步骤,从不比较掩码长度。`10.0.0.0/16` 与 `10.0.0.0/24` 是两条完全独立的路由,各自选路,只有在转发表里才按最长匹配决定用哪条。
基本信息
| 比较对象 | 同一条 NLRI 的多条路径,比较属性与选路步骤 |
|---|---|
| 不同掩码 | 不同 NLRI,各自独立选路,互不参与比较 |
| 转发阶段 | FIB 按最长前缀匹配选路,这一步与 BGP 决策无关 |
| AS_PATH 长度 | 指路径中 AS 号的个数,与掩码长度毫无关系 |
| 核对命令 | show ip bgp <前缀>、show ip route <前缀> |
典型使用场景
- 解释「为什么 /24 没被选中」:它不是候选,而是另一条路由,需单独看它的路径
- 策略设计:需要影响明细与汇总的相对关系时,靠发布策略而不是靠掩码长度
- 排查转发异常:确认 BGP 决策结果与 FIB 最长匹配是两步不同的事
- 新人培训:把这条误解提前讲清,减少后续误判
- 评审收尾:核对文档里是否存在「掩码越长越优先」这类错误表述
对照查看
对照查看
# 两条独立的路由,各自有独立的最优路径
show ip bgp 10.0.0.0/16
show ip bgp 10.0.0.0/24
# 转发用哪条由最长匹配决定
show ip route 10.0.0.0/24
show ip route 10.0.0.0/16
# 确认某前缀是否为本地始发
show ip bgp 10.0.0.0/24 | include Origin两种比较别混淆
| 比较 | 发生在哪 | 依据 |
|---|---|---|
| BGP 路径选择 | BGP 决策过程 | 属性与选路步骤,同一 NLRI 内部比较 |
| 最长前缀匹配 | 转发表查表 | 掩码长度,越具体越优先 |
| AS_PATH 长度 | BGP 选路步骤之一 | 路径中 AS 号数量,与掩码无关 |
| 路由规模 | 前缀总量 | 明细与汇总各自占用表项,聚合可减少数量 |
如果希望某段明细不被使用,正确做法是在发布与接收侧做前缀过滤或调整属性,而不是指望「汇总路由能压住明细」——两者在 BGP 里根本不在同一个比较里。