当前位置:首页>排行榜>全球互联网如何选择路线?一文看懂 BGP

全球互联网如何选择路线?一文看懂 BGP

  • 更新时间 2026-11-13 07:59:24
全球互联网如何选择路线?一文看懂 BGP

全球互联网如何选择路线?一文看懂 BGP

你在浏览器里输入一个网址,数据包可能经过本地运营商、骨干网络、跨境线路和云服务商,最终到达目标服务器。

问题是:全球没有一台保存完整互联网地图的“总路由器”,这些彼此独立的网络,怎么知道目标 IP 应该往哪里送?

答案就是 BGP,Border Gateway Protocol,边界网关协议。

BGP 不负责为全球计算一条统一的最短路线。它做的事情更像一场持续进行的邻里信息交换:每个网络告诉邻居“哪些 IP 前缀可以通过我到达”,再根据自己的商业关系、网络策略和路由属性,决定接受哪条路线、使用哪个出口,以及还要把哪些路线告诉下一位邻居。

01 BGP 为什么存在?先认识 AS 与 ASN

互联网并不是一张由同一个组织管理的大网,而是大量独立网络互相连接形成的“网络之网”。

运营商、云平台、大型内容网络、大学或企业,都可以管理自己的路由策略。为了把这些管理边界表达出来,互联网引入了自治系统,也就是 AS,Autonomous System。

一个 AS 不是一台路由器,而是一组由同一组织管理、执行相对一致路由策略的网络和设备。每个 AS 使用一个 ASN,也就是自治系统编号来标识自己。

在一个 AS 内部,通常由 OSPF、IS-IS 等 IGP 协议维护内部可达性;不同 AS 之间,则使用 BGP 交换路由。

可以把两者的分工理解为:

  • IGP 解决“在自己的网络内部,怎样到达某台路由器或某个出口”。
  • BGP 解决“目标前缀应该选择哪个外部出口,经过哪些自治系统”。

BGP 属于路径向量协议。它不要求每台路由器掌握全球完整拓扑,而是传播 IP 前缀、AS_PATH 和其他属性,让每个网络独立做出本地决策。

❝

欢迎大家支持我的付费文章:

❞

02 一条路由是怎样传遍互联网的?

假设 AS64496 拥有前缀203.0.113.0/24。它会向 BGP 邻居发送 UPDATE,表达这样的信息:这个前缀可以通过我到达。

当 AS64497 把这条路由继续通告给 AS64498 时,会在AS_PATH左侧加上自己的 ASN:

64497 64496

AS64498 再向外通告时,又会把自己放在最前面:

64498 64497 64496

AS_PATH有两个重要作用。

第一,它记录这条通告经过了哪些自治系统。这里记录的是控制面的传播路径,不保证和每个数据包实际经过的设备序列完全一致。

第二,它帮助阻止路由环路。如果 AS64497 收到一条路由,发现AS_PATH中已经包含 64497,就知道这条路线曾经经过自己,应当拒绝它。

但AS_PATH不是安全证明。BGP 邻居可以错误配置甚至伪造路径属性,单凭它无法证明整条路线真实可信。

如果 AS64496 不再能够提供这个前缀,它会发送 Withdraw 撤销通告。邻居删除失效路线,重新检查是否还有其他候选路径,再把变化继续传播出去。

03 eBGP 学到路线后,AS 内部怎么知道?

BGP 会话运行在 TCP 之上,通常使用 TCP 179 端口。

按照邻居所在位置,可以分成两类:

  • eBGP:运行在不同 AS 的路由器之间,负责交换外部路由。
  • iBGP:运行在同一个 AS 的 BGP 路由器之间,负责传播已经学到的 BGP 路由。

边界路由器通过 eBGP 学到外部前缀后,不能只把信息留在自己身上。AS 内其他可能承载流量的路由器,也需要知道应该选择哪个出口。

小规模网络可以让 iBGP 路由器建立全互联会话。规模扩大以后,会话数量快速增长,运营商通常会使用 Route Reflector,也就是路由反射器,减少全互联带来的连接和配置压力。

路由反射器解决的是控制面传播规模问题,它不是全网中央控制器,也不负责替数据包完成转发。

iBGP 也不能取代 IGP。BGP 告诉路由器“最佳出口的 NEXT_HOP 是谁”,IGP 则负责让内部路由器真正能够到达这个 NEXT_HOP。两者配合后,选中的 BGP 路线才会被写入转发表,供数据包使用。

04 BGP 怎样选出最佳路径?

同一个前缀可能从多个邻居到达。

例如,某路由器同时收到两条去往203.0.113.0/24的路线:一条 AS_PATH 较短,另一条来自更重要的客户链路。BGP 不会简单地把“跳数少”当成唯一答案,而是按本地策略和属性逐层比较。

常见实现的判断逻辑大致包括:

  • 先排除不可用或被导入策略拒绝的路线。
  • 优先选择更高的LOCAL_PREF。
  • 在后续比较中考虑本地产生的路线、AS_PATH长度、ORIGIN、MED、eBGP 或 iBGP 来源、到 NEXT_HOP 的 IGP 代价等。
  • 如果仍然相同,再使用 Router ID、邻居地址等规则得到稳定结果。

这里必须注意几个边界。

LOCAL_PREF是 AS 内部使用的偏好值,数值越高通常越优先。它不会作为普通 eBGP 路由属性传给外部 AS,通常由导入策略设置,再通过 iBGP 在本 AS 内传播。

MED用于表达“如果要进入我的 AS,希望你从哪个入口进来”,常见实现通常只在来自同一相邻 AS 的可比路径间比较,具体行为还会受配置影响。

不同厂商、软件版本和策略配置,可能改变详细顺序,因此不存在一份适用于所有网络的绝对统一清单。

还有一个经常混淆的地方:路由器转发数据包时,会先做最长前缀匹配。例如/25比/24更具体,会优先匹配/25。BGP 最佳路径比较,则是在同一个前缀的多条候选路线之间选出一条或多条可安装路径。这是两个不同层次的判断。

05 商业关系如何改变路线?

为什么一条 AS_PATH 较长的路线,反而可能被选中?

因为互联网互联不是单纯的技术连接,还带有商业关系。常见关系包括:

  • Customer:客户向上游购买互联网可达性。
  • Provider:上游为客户提供转接能力。
  • Peer:双方互相交换自己及客户的流量,通常不替对方免费连接第三方上游。

运营商常通过LOCAL_PREF把客户路线设置为更高优先级,其次是 Peer,最后才是需要付费的 Provider。这样既能控制成本,也能兑现双方的互联协议。

路由的导出范围也受到关系约束。典型的商业互联网中:

  • 从客户学到的路线,通常可以通告给其他客户、Peer 和 Provider。
  • 从 Peer 或 Provider 学到的路线,通常只通告给自己的客户。

如果把从一家 Provider 学到的全网路由再免费转给另一家 Provider,本 AS 就可能意外变成两家网络之间的免费中转通道。

这种“网络山谷”策略是常见运营模型,不是 BGP 协议强制写死的规则。私有互联、内容分发、流量工程和合同约定,都可能形成不同策略。

这也解释了为什么去程和回程经常不对称:通信两端所在的 AS 分别做本地决策,它们看到的候选路线、成本和政策并不相同。

06 链路断开后,BGP 如何重新收敛?

当链路故障、邻居会话断开或前缀被撤销时,相关路线会失效。

路由器需要删除失效候选,重新比较剩余路线,更新 Loc-RIB 和 FIB,再把新的可达性结果告诉邻居。邻居收到变化后,又会执行自己的策略和选路。

这是一个分布式传播过程,不会让全球路由器在同一时刻完成切换。

在收敛期间,不同 AS 可能暂时看到不同结果。有些路由器会先尝试一条替代路径,随后又收到新的撤销或更优通告,这种现象叫路径探索。对应的数据包可能暂时丢失、绕行,甚至经历短时环路或黑洞。

因此,BGP 收敛没有一个适用于所有故障的固定时长。拓扑规模、路由策略、会话检测、定时器、候选路径数量和设备实现都会影响结果。

运营商通常会通过冗余链路、合理的故障检测、聚合路由、策略约束和稳定的变更流程,缩小故障影响,而不是期待所有变化瞬间同步。

07 路由劫持与路由泄漏,有什么不同?

BGP 最初建立在网络之间相互信任的环境里,协议本身不会自动证明每条通告都经过授权。配置错误或恶意通告,可能把流量带到错误网络。

路由劫持通常指未获授权的 AS 起源了别人的前缀。攻击者还可能通告一个更具体的前缀,利用最长前缀匹配,让更多流量优先进入错误路径。

路由泄漏则不同:前缀的起源 AS 可能完全合法,但中间网络把本来只该通告给客户的路线,错误地发给 Peer 或 Provider,破坏了预期的导出范围。

RPKI 为起源验证提供了一道重要防线。前缀持有者可以创建 ROA,声明哪些 ASN 有权起源该前缀,以及允许通告到多具体的前缀长度。启用 ROV 的网络会把收到的路由判断为 Valid、Invalid 或 NotFound,并可拒绝 Invalid 路由。

但 RPKI 起源验证只回答一个问题:前缀与起源 AS 的组合是否被授权。

它不验证完整AS_PATH,也不能发现所有路由泄漏。一次泄漏可能保留合法起源,因此仍然是 RPKI Valid。

实际防护还需要组合使用前缀过滤、客户路由清单、IRR 数据、max-prefix 限制、严格的导入与导出策略,以及持续监控异常通告。

08 一张图总结

BGP 的工作过程可以归纳成一条控制链:

  • 从邻居接收某个前缀的多条候选路线和属性。
  • 通过导入策略过滤路线,并设置LOCAL_PREF等本地属性。
  • 针对同一前缀执行最佳路径选择,把结果写入 Loc-RIB。
  • 将可用于转发的下一跳下发到 FIB。
  • 用户数据包按照 FIB 转发,而不是每来一个包就重新运行 BGP 选路。
  • 通过导出策略决定哪些路线可以继续通告给哪些邻居。
  • 收到 Withdraw 或检测到邻居失效后,删除不可用路线并重新选择。

BGP 交换的是前缀可达性和策略信号。它没有全球统一总地图,也不保证选出地理距离最短的路线。每个 AS 在自己的管理边界内独立决策,商业关系、流量工程、安全策略和路由属性共同塑造了今天的互联网路径。

❝

觉得这篇文章对你有帮助吗?

点个 「在看」,「关注」 我们,加个 「星标」,我们一起用最有趣的方式,读懂最硬核的技术!

你的 「支持」 对我非常重要,是我坚持更新的 「唯一动力」。

关注我们,回复 C++ 免费获取 243 节高质量C++课程。‍‍‍‍‍‍‍‍‍‍‍‍‍

❞
❞

随机文章