到达顺序为什么会改变选路结果
MED 是可选非传递属性,只在同源 AS 之间比较。默认实现里,参与比较的路径集合取决于报文到达顺序:后来的路径可能与当前最优路径比较,而不是与同源 AS 的另一条路径比较,于是重启设备或重建会话后可能得到不同的出口。bgp deterministic-med 把路径按邻居 AS 分组,先在组内选出优胜者,再做组间比较,使结果不再依赖到达顺序。
基本信息
| 作用 | 消除「谁先到谁先进比较」的顺序依赖 |
|---|---|
| 行为变化 | 先按邻居 AS 分组,组内分别比较 MED,再跨组比较 |
| 默认状态 | 多数平台默认关闭,需显式开启 |
| 配套建议 | 全网设备统一开启并保持长期一致 |
| 生效要求 | 开启后需软刷新或重建会话,已选结果才会按新规则重算 |
典型使用场景
- 多厂商混合组网:不同实现默认行为不同,统一开启可避免结果分歧
- 多出口从同一上游学习:MED 用于表达入口偏好,需要稳定可复现的比较逻辑
- 设备重启后出现出口变化:用确定性 MED 消除重启顺序带来的差异
- 排障对比:开启后同一前缀在不同设备上更容易得到一致结论
- 变更验收:把重启与重建会话后的选路结果一致性作为验收项
配置与刷新
配置与刷新
router bgp 65001
bgp deterministic-med
!
# 让已收路由按新规则重新比较
clear ip bgp * soft in
!
# 验证同一前缀的路径集合与最优结果
show ip bgp 10.100.0.0/16
show ip bgp 10.100.0.0/16 | include Metric|LocPrf与相关开关的配合
| 开关 | 作用 | 配合建议 |
|---|---|---|
| deterministic-med | 按邻居 AS 分组比较 MED | 全网统一开启 |
| always-compare-med | 比较来自不同 AS 的 MED 值 | 慎重启用,会改变既有选路结果 |
| missing-as-worst | 缺失 MED 视作最差 | 与 deterministic-med 配合时需统一认知 |
| 确定性与否 | 影响结果可复现性 | 变更前后都要做结果对照 |
验证结果是否稳定
验证结果是否稳定
# 记录当前最优路径
show ip bgp 10.100.0.0/16
#
# 重建会话后再次查看,比较是否仍选中同一路径
clear ip bgp 10.0.0.2
show ip bgp 10.100.0.0/16
#
# 多台设备使用相同命令比对结论是否一致
show ip bgp 10.100.0.0/16 | include from确定性 MED 改变的是比较过程而不是属性值:开启后不会让某条路径「变得更好」,只会让同一输入始终得到同一输出。它最大的价值是让偶发的不一致变得可复现、可解释。