首页/网络/BGP 与广域网速查/BGP 选路总览:属性优先级与决策顺序
BGP 选路与策略62 条

BGP 选路总览:属性优先级与决策顺序

同一前缀收到多条路径时,BGP 按固定顺序逐项比较属性:weight、LOCAL_PREF、本地起源、AS_PATH、ORIGIN、MED、eBGP 优先、IGP 度量、年龄、Router ID、邻居地址;任一步分出胜负即停止。

BGP 与广域网速查网络更新于 2026-10-13

选路的本质

同一前缀收到多条路径时,BGP 不做加权计算,而是按固定顺序逐项比较路径属性,任一步分出胜负即停止,后面的属性不再看。因此排障时不要笼统问哪条更优,而要问在哪一步被判定:第 1 步到第 11 步的次序本身构成了全部判定依据,属性数值只有在轮到它时才起作用。

为什么要背顺序

顺序决定了调整属性的有效性边界。想让一条路径胜出,必须让它在前面的步骤里建立优势:如果两条路径的 LOCAL_PREF 不同,那么无论怎么改 AS_PATH 长度或 MED,结果都不会变化。反过来,属性完全相同时结果会落到年龄、Router ID、邻居地址这些看似无关的细节上,这也是选路结果让人费解的常见来源。

基本信息

适用设备Cisco IOS / IOS-XE、华为 VRP、FRR 等 BGP 实现
前提条件NEXT_HOP 可达,且通过入向策略与合法性检查
比较方式逐项顺序比较,先分出胜负即停止
步骤计数资料常表述为 11~13 步,差别在是否把本地起源、多路径装载单列
厂商差异weight 属 Cisco 实现;华为等以 preference 机制对应,需要按平台换算
查看命令show ip bgp <前缀> 列出全部候选路径并标注最优

典型使用场景

  • 多出口环境确认流量实际从哪个 AS 出去,核对与出口设计是否一致
  • 双运营商线路不对称,判定哪条路径被选中、回程是否走同一运营商
  • 收到路由但业务不通,区分是选路结果问题还是策略把路由过滤掉了
  • 调整属性前预判影响落在决策顺序的哪一步,避免改了低优先级属性
  • 多厂商互联时核对两端对同一前缀是否得出相同结论,防止单侧改动

观察候选路径

观察候选路径
show ip bgp 10.1.1.0/24                       # 列出候选路径,> 为当前最优
show ip bgp 10.1.1.0/24 longer-prefixes       # 连带查看该网段的明细前缀
show ip bgp summary | include 10.0.0          # 核对相关邻居是否 Established
show ip bgp neighbors 10.0.0.2 advertised-routes  # 核对本端发出的属性
show ip route 10.1.1.0/24                     # 确认最优路径是否已进主表
show ip bgp rib-failure                       # 有 BGP 表项但未进主表时查看原因

决策顺序(IOS 语义)

步比较项胜负判定
1Weight数值大者胜(本机属性)
2LOCAL_PREF数值大者胜(AS 内传播)
3本地起源本机 network / redistribute / aggregate 生成者胜
4AS_PATH长度短者胜(联盟段默认不计入)
5ORIGINIGP 优于 EGP,EGP 优于 INCOMPLETE
6MED数值小者胜(默认仅在同邻居 AS 之间比较)
7eBGP / iBGPeBGP 路径胜
8IGP 度量到 NEXT_HOP 的 IGP 代价小者胜
9年龄两条 eBGP 路径中先收到者胜
10Router ID邻居 Router ID 小者胜;iBGP 先比 Originator ID,再比 Cluster List 长度
11邻居地址邻居 IP 地址小者胜

输出逐列读法

列含义读法要点
状态码* 有效、> 当前最优、i 经 iBGP 学到、r 已装入 RIB只有带 > 的那一行是实际生效路径
Network前缀与掩码长度确认查的是业务网段而非其明细
Next Hop该路径下一跳下一跳不可达的路径不参与比较
Metric即 MED,默认 0同邻居 AS 之间小者胜
LocPrfLOCAL_PREF默认 100,大者胜
Weight本机权重默认 0,本地起源路由为 32768
PathAS_PATH长度短者胜,末尾 i/e/? 为 ORIGIN

现象与对应步骤

现象先查哪几步常见原因
流量走了非预期出口第 1~2 步weight 或 LOCAL_PREF 在各设备不一致
主路径没被选中第 4 步对端对自己发布的 AS_PATH 做了预置
同 AS 对端两条链路选错第 6 步MED 未按设计设置或被对端忽略
iBGP 路径压不过 eBGP第 7 步本机直学的外部路径天然占优,需前序属性建立优势
重启后路径变了第 9~10 步属性全同时由年龄与 Router ID 决定,重启会打乱顺序
BGP 表有路由但业务不通不在比较范围下一跳不可达或 rib-failure 导致未进主表

逐项比对示例

逐项比对示例
# 同一前缀两条候选路径(示意)
#   A: weight 0, locPrf 150, AS_PATH 65002 65010, MED 50, 邻居 10.0.0.2
#   B: weight 0, locPrf 100, AS_PATH 65002 65020, MED 10, 邻居 10.0.0.3
# 第 1 步 weight 相同 → 继续;第 2 步 locPrf 150 大于 100 → A 胜,判定结束
# MED 更小的 B 不会胜出,因为比较到第 2 步就已分出胜负
show ip bgp 10.1.1.0/24
show ip bgp neighbors 10.0.0.2 | include Local\ Preference   # 核对入向策略结果
多路径装载(maximum-paths)是属性全部相当之后的并行转发行为,不属于单条路径的胜负判定,两者要分开理解。
选路在各路由器上独立进行:只改一台设备的属性,其他设备可能仍按旧结论转发,策略变更要覆盖全部参与选择的设备。
下一跳不可达时根本不会产生候选路径,此时属性怎么改都无效:先修 NEXT_HOP 可达性,再谈属性比较。
两种失败表现要分开:BGP 表里查不到前缀属于策略或邻居问题;表里有一条带 > 的路径但业务不通,属于下一跳、主表装载或回程问题。

易错点

  • 下一跳不可达时根本没有候选路径:先核对 NEXT_HOP 可达与策略放行,再谈属性比较
  • 策略只改一台上游设备:属性比较在各路由器独立进行,变更范围要覆盖所有参与选择的路由器
  • 改错优先级:LOCAL_PREF 改不动被 weight 或本地起源压制的路径,动手前先确认卡在第几步
  • 把多路径装载当作决策步骤:装载条件不影响哪条是 best,混用会得出错误结论
  • 只在一台设备上调整属性:选路在每台路由器独立进行,其他设备结论可能不变,故障切换时表现不一致

数据来源与参考

  • RFC 4271: BGP Decision Process
  • Cisco: BGP Best Path Selection Algorithm(厂商语义)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌