很多人第一次接触 BGP(边界网关协议)时,都会有个疑问: “当一条前往同一个目的地的多条 BGP 路由同时存在时,路由器到底怎么决定走哪一条?”

答案就是:BGP 有一套明确的选路规则,按顺序逐条比较,直到选出“最优路由”。 理解这套规则,不仅是学习 BGP 的必修课,也是排查复杂网络问题时的关键思路。

打开网易新闻 查看精彩图片

一、为什么需要选路规则

和 OSPF、IS-IS 不同,BGP 的目标是互联网级别的路由控制。 一个前缀可能从多个邻居传来不同的路由信息,但BGP 必须有一套逻辑去比较,避免混乱。

二、BGP 选路的核心流程

二、BGP 选路的核心流程

在大多数厂商实现里(Cisco/华为/Juniper),BGP 选路大致遵循以下顺序:

1.优先比较 Weight(厂商私有属性)

  • Cisco 特有,越大越优先。
  • 用于在本地路由器上强制控制选路。

2.本地优先级 Local Preference

  • 所有厂商支持。
  • 数值越大越优先。
  • 常用于控制出站流量,比如让出口流量走某个 ISP。

3.是否来自本地路由(Locally originated)

  • 自己通过network或aggregate发布的路由,优先级高于从邻居学来的。

4.AS-Path 长度

  • 越短越优先。
  • 反映路径经过的自治系统数量。

5.Origin 类型

  • IGP > EGP > Incomplete
  • 即:路由来自 IGP 最优,未知来源最差。

6.MED(多出口鉴别符)

  • 数值越小越优先。
  • 用于控制进入流量(通常 ISP 间协商)。

7.eBGP 路由 vs iBGP 路由

  • eBGP 学到的路由优先于 iBGP。
  • 逻辑是:离目标更近,可信度更高。

8.IGP 度量值(到下一跳的开销)

  • 谁的下一跳更近,就选谁。

9.Router ID

  • 最后兜底规则:比较通告路由的 Router-ID,数值小的优先。

三、举个例子就清楚了

三、举个例子就清楚了

假设你有两条去往10.1.1.0/24的路由:

  • 从 ISP A 学到的 AS Path:65001 65002
  • 从 ISP B 学到的 AS Path:65003

如果本地没设置 Weight、Local Preference,BGP 就会比AS Path 长度

  • A 的路径长 = 2
  • B 的路径长 = 1 ,所以,最终选 ISP B 的路由。

如果你手动给 ISP A 设置了更高的 Local Preference,那无论 Path 长短,都会优先走 A。

四、为什么这套规则很重要?

四、为什么这套规则很重要?

  1. 运维调优:控制出口流量走哪条线路(比如双 ISP 场景)。
  2. 排错思路:当“预期路由没被选中”时,可以按这套顺序逐条分析。
  3. 网络安全:了解选路逻辑,有助于防御 BGP 劫持攻击。

五、总结

五、总结

BGP 的选路逻辑看似复杂,其实就是一套优先级链条

Weight → Local Preference → 本地路由 → AS Path → Origin → MED → eBGP 优先 → IGP 度量 → Router-ID

记住这条顺序,你就能在绝大多数场景下迅速判断: 为什么路由器会选这条路,而不是那条。