云霞资讯网

BGP选路规则详解:路由器到底按什么逻辑来选路?

很多人第一次接触 BGP(边界网关协议)时,都会有个疑问: “当一条前往同一个目的地的多条 BGP 路由同时存在时,路由

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

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

一、为什么需要选路规则?

和 OSPF、IS-IS 不同,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。

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

运维调优:控制出口流量走哪条线路(比如双 ISP 场景)。

排错思路:当“预期路由没被选中”时,可以按这套顺序逐条分析。

网络安全:了解选路逻辑,有助于防御 BGP 劫持攻击。

五、总结

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

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

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