很多人第一次接触 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
记住这条顺序,你就能在绝大多数场景下迅速判断: 为什么路由器会选这条路,而不是那条。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.