第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:本地始发路由

  • 本设备通过 networkimport-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 打破平局 见上 极少用到

七、思考

  1. BGP 选路的 13 条规则中,最常用于 AS 内策略控制的是哪一条?如何配置?
  2. AS_PATH 和 MED 分别用于什么场景的选路控制?
  3. 如果两条 BGP 路由完全相同(所有属性都一样),BGP 如何选择?会负载分担吗?
  4. 为什么 BGP 要设置这么多条选路规则?直接使用 AS_PATH 最短不行吗?
  5. 如果想让 AS 100 进来的流量优先走出口 B,应该使用哪个属性?在什么方向配置?

下篇预告:第86篇《BGP 同步规则(历史与现状)》——理解 BGP 同步规则的起源和淘汰。