第85篇:BGP 选路原则(13 条规则)详解
关键词
BGP、选路原则、13 条规则、路由优选、路径选择
一、为什么要理解 BGP 选路规则
BGP 可能从多个对等体学到同一条路由,它需要按照固定的规则集选择最佳路由。这 13 条规则是 BGP 协议最核心、最基础的知识。
核心原则:BGP 在从多条路径中选择最佳路径时,按顺序逐条比较,一旦某条规则分出胜负,后续规则不再比较。
二、BGP 13 条选路规则(华为)
| 优先级 | 规则 | 说明 |
|---|---|---|
| 1 | 优选 Preferred-Value 最大的路由 | 华为私有属性 |
| 2 | 优选 Local_Preference 最大的路由 | AS 内策略控制 |
| 3 | 优选本设备始发的路由 | 本地生成优先 |
| 4 | 优选 AS_PATH 最短的路由 | 跳数最少 |
| 5 | 优选 ORIGIN 最优的路由 | IGP > EGP > Incomplete |
| 6 | 优选 MED 最小的路由 | 告诉对端 AS"到我这边更近" |
| 7 | 优选 eBGP 优于 iBGP | eBGP 路由优先 |
| 8 | 优选到 NEXT_HOP IGP Metric 最小的路由 | 距离下一跳最近 |
| 9 | 优选 Cluster_List 最短的路由 | RR 场景 |
| 10 | 优选 Router ID 最小的对等体 | 打破平局 |
| 11 | 优选 对等体地址最小 | 最终比较 |
三、逐条详解
规则 1:Preferred-Value(华为私有)
华为特有的属性,仅本地有效,不传递给任何对等体。
# 配置 Preferred-Value
bgp 100
peer 10.0.12.2 preferred-value 200 # 指定该邻居的路由优先
规则 2:Local_Preference(本地优先级)
最重要的 AS 内策略控制属性!
- 范围:0~4294967295
- 越大越优先
- 默认值:100
- 仅在 AS 内传递(不跨越 AS)
AS 100 AS 200 AS 300
│ │ │
│── eBGP ──────────────│── eBGP ──────────────│
│ 172.16.0.0/16 │ │
│ LP=100 │ LP=100 (默认) │
│ │ │
│── eBGP ──────────────│ │
│ 172.16.0.0/16 │ │
│ LP=200 │ │
# 在 AS 200 上配置入方向策略
route-policy SET_LP permit node 10
apply local-preference 200
bgp 200
peer 10.0.12.1 route-policy SET_LP import
规则 3:本地始发路由
- 本设备通过
network或import-route注入的路由 - 优先于从邻居学到的路由
规则 4:AS_PATH 最短
比较 AS_PATH 中的 AS 数量,越短越优先。
路由 A: AS_PATH = [100, 200] → 2 个 AS
路由 B: AS_PATH = [100, 200, 300] → 3 个 AS
→ 优选路由 A(AS_PATH 更短)
# 注意:AS_SET 中的每个 AS 算 1 个
# AS_CONFEDERATION 中的 AS 不计数
人为控制 AS_PATH 长度:
route-policy ADD_AS permit node 10
apply as-path 100 100 100 additive # 添加 3 个 AS 100
bgp 100
peer 10.0.12.2 route-policy ADD_AS export # 让路由变"远"
规则 5:ORIGIN 类型
IGP (0) > EGP (1) > Incomplete (2)
规则 6:MED(多出口区分)
- 告诉对端 AS:"到达这个网段,从我这个入口进更近"
- 越小越优先
- 默认值为 0
- 仅在相邻 AS 之间传递
AS 100 AS 200
│ │
│── eBGP ─────────────────│
│ 172.16.0.0/16 MED=50 │
│ │
│── eBGP ─────────────────│
│ 172.16.0.0/16 MED=100 │
route-policy SET_MED permit node 10
apply cost 50 # MED 设为 50
bgp 100
peer 10.0.12.2 route-policy SET_MED export
规则 7:eBGP > iBGP
从 eBGP 邻居学到的路由优先于从 iBGP 邻居学到的路由。
规则 8:到 NEXT_HOP 的 IGP Metric 最小
如果前 7 条规则都分不出胜负,比较到达下一跳的 IGP Cost。
路由 A: 下一跳 10.0.12.1,IGP Cost = 10
路由 B: 下一跳 10.0.23.1,IGP Cost = 20
→ 优选路由 A(IGP Cost 更小)
规则 9~11:打破平局
| 规则 | 比较内容 | 说明 |
|---|---|---|
| 9 | Cluster_List 长度 | 越短越优先(RR 场景) |
| 10 | Router ID | 越小越优先 |
| 11 | 对等体 IP 地址 | 越小越优先(最终决胜) |
四、选路流程示意图
多条 BGP 路由到达同一目的地
│
▼
1. Preferred-Value 最大?
├─ 不同 → 选出最优
└─ 相同 → 继续比较
│
▼
2. Local_Preference 最大?
├─ 不同 → 选出最优
└─ 相同 → 继续比较
│
▼
3. 本地始发?
...
│
▼
... 逐一比较直到分出胜负
│
▼
✅ 选出最佳路径,加入 IP 路由表
五、实际调优案例
需求:在 AS 200 中,让来自 AS 100 的 BGP 路由优先选择链路 B。
AS 100
│ 链路 A
│
AS 200 ─── IGP ─── RouterX
│ 链路 B
│
AS 100
方案选择:
| 方案 | 使用规则 | 配置位置 |
|---|---|---|
| 增大链路 A 的 MED | 规则 6 | AS 100 出方向 |
| 减小链路 B 的 Local_Preference | 规则 2 | AS 200 入方向 |
| 延长链路 A 的 AS_PATH | 规则 4 | AS 200 出方向 |
推荐方案:
# 在链路 A 的邻居上设置 Local_Preference = 150
# 在链路 B 的邻居上设置 Local_Preference = 200 → 优选链路 B
route-policy PREFER_LINK_B permit node 10
apply local-preference 200
bgp 200
peer 10.0.12.2 route-policy PREFER_LINK_B import
六、总结
| 规则编号 | 属性 | 优选条件 | 常用场景 |
|---|---|---|---|
| 1 | Preferred-Value | 越大越好 | 华为私有 |
| 2 | Local_Preference | 越大越好 | AS 内策略(最常用) |
| 3 | 本地始发 | 本地优先 | - |
| 4 | AS_PATH | 越短越好 | 跨 AS 影响选路 |
| 5 | ORIGIN | IGP>EGP>Incomplete | - |
| 6 | MED | 越小越好 | 影响对端 AS 选路 |
| 7 | 协议类型 | eBGP > iBGP | - |
| 8 | IGP Metric | 越小越好 | 最后一公里 |
| 9~11 | 打破平局 | 见上 | 极少用到 |
七、思考
- BGP 选路的 13 条规则中,最常用于 AS 内策略控制的是哪一条?如何配置?
- AS_PATH 和 MED 分别用于什么场景的选路控制?
- 如果两条 BGP 路由完全相同(所有属性都一样),BGP 如何选择?会负载分担吗?
- 为什么 BGP 要设置这么多条选路规则?直接使用 AS_PATH 最短不行吗?
- 如果想让 AS 100 进来的流量优先走出口 B,应该使用哪个属性?在什么方向配置?
下篇预告:第86篇《BGP 同步规则(历史与现状)》——理解 BGP 同步规则的起源和淘汰。