返回技术博客

SKNK 中文技术指南

BGP 是怎么工作的?Prefix、AS_PATH 和路由策略基础

用网络运营视角解释 BGP 如何交换 Prefix、Origin ASN、AS_PATH 与 Next Hop,路由器如何按策略选路,以及为什么 Session 正常不等于路由正确。

技术内容

由 Shikanoko Networks 编写与维护

BGP(Border Gateway Protocol,边界网关协议)是自治系统之间交换可达信息的协议。它不负责传送用户的数据包,而是告诉路由器:哪些 IP 前缀可以通过哪些网络到达,以及本地策略应该选择哪一条路径。

理解 BGP 的关键,不是背诵几十个属性,而是先把四件事分清:目的前缀、路径、下一跳和策略。

小鹿操作道岔,为路由选择合适的路径

BGP 收到的是多条候选路径,真正使用哪一条,由本地路由政策决定。

BGP 解决了什么问题

互联网不是由一家公司统一运营的网络。运营商、云平台、CDN、企业和内容网络分别管理自己的自治系统,再通过 BGP 交换可达信息。

假设某个网络运营 2001:db8:1200::/48,它可以向上游表达:

Prefix: 2001:db8:1200::/48
Origin: AS64496

上游接受后,可以继续把这条可达信息传给其他网络。每经过一个自治系统,路径信息都会发生变化,外部网络最终知道该前缀可以通过怎样的 AS 路径到达。

如果没有 BGP,每个网络都要手工维护通往全球所有前缀的静态路由。互联网规模和拓扑不断变化,这种方式无法长期运行。

BGP 不做什么

BGP 经常被误解成“让网络变快的协议”。更准确地说,它提供的是跨网络的可达信息和策略控制。

BGP 本身不会:

  • 自动证明一条路由经过授权;
  • 自动选择物理延迟最低的路径;
  • 自动检查应用服务是否正常;
  • 自动提供带宽;
  • 自动修复错误的防火墙或回程路由;
  • 自动保证多个上游之间负载均衡。

它能做的是根据收到的路由和本地策略,选出一个用于转发的路径。

一条 BGP 路由包含什么

实际 BGP Update 包含许多属性。初学阶段先掌握以下五项。

Prefix

Prefix 是目标网络,例如:

2001:db8:1200::/48

它回答“这条路由覆盖哪些目的地址”。

Origin ASN

Origin ASN 是 AS_PATH 最末端、最初发布该前缀的自治系统。它回答“谁在起源这条路由”。

RPKI Route Origin Validation 主要核对的,就是前缀、Origin ASN 和前缀长度之间的授权关系。

这里的 Origin ASN 不要与 BGP 的 ORIGIN 路径属性混淆。前者指起源该前缀的自治系统;后者是 RFC 4271 定义的 IGP、EGP 或 INCOMPLETE 属性,含义完全不同。

AS_PATH

AS_PATH 记录一条路由传播时经过的自治系统序列。例如,从某个观察点看到:

AS64500 AS64497 AS64496

表示该观察点通过 AS64500、AS64497,最终到达 Origin AS64496。

AS_PATH 有两个重要作用:

  1. 让路由器识别包含自己 ASN 的路径,从而避免环路;
  2. 作为选路和策略判断的依据之一。

AS_PATH 更短有时会被优先选择,但它不是唯一因素,更不等同于物理距离或最低延迟。

Next Hop

Next Hop 是路由器实际把数据包交给的下一跳地址。如果 Next Hop 在本地不可达,这条 BGP 路由即使其他属性都正常,也无法进入有效转发表。

Communities

BGP Community 是附在路由上的策略标签。不同运营商可以用它表达:

  • 不向某类邻居继续发布;
  • 调整 Local Preference;
  • 在特定地区执行 AS_PATH Prepend;
  • 触发黑洞路由;
  • 标记路由来源。

Community 的具体含义由运营商定义,必须查看对方文档,不能假设所有网络采用同一套编号。

BGP 邻居如何建立会话

两台 BGP Speaker 通常通过 TCP 179 建立连接,交换 ASN、BGP Identifier、能力和 Hold Time 等信息。

常见状态包括:

Idle
Connect
Active
OpenSent
OpenConfirm
Established

达到 Established 后,双方才能交换 BGP Update。

需要特别注意:“Active”不是正常运行完成,而是状态机仍在尝试建立连接。排障时不能看到 Active 就理解为“会话已激活”。

EBGP 和 IBGP 的区别

EBGP

EBGP 运行在不同自治系统之间,例如客户 AS 与上游 AS、两个对等网络之间。

IBGP

IBGP 运行在同一个自治系统内部,用于让多个边界路由器共享从外部学到的路由。

小型网络可能只有一台边界路由器,不需要复杂 IBGP;当网络扩展到多台边界设备、多个地点时,内部路由传播、Route Reflector 和 IGP 的设计就会变得重要。

路由器怎样选择路径

同一个 Prefix 可能从多个邻居到达。BGP 的“最佳路径”是按照设备实现和本地策略选出来的,不是全球统一测量出的最快线路。

常见考虑因素包括:

Local Preference

Local Preference 通常用于同一 AS 内决定出站优先级。数值和策略由本地运营者控制。

例如:

  • 客户路由优先于 Peer;
  • Peer 路由优先于付费 Transit;
  • 主线路优先于备用线路。

这反映的是技术和商业关系,不只是链路速度。

AS_PATH

在其他高优先级条件相同的情况下,较短的 AS_PATH 通常更有吸引力。但运营商完全可以通过 Local Preference 让较长路径胜出。

MED

MED 可以向相邻 AS 表达“如果从多个入口进入我方网络,希望优先使用哪个入口”。它通常只在特定邻接关系和双方约定下有意义,对方也不一定采用。

Next Hop 可达性

Next Hop 必须能通过本地路由解析。否则该路径无法用于转发。

设备实现中的后续比较

路由器还可能比较路由来源、IGP 到 Next Hop 的成本、Router ID 等。不同厂商的完整顺序可能不同,运维时应以实际设备文档为准。

为什么最短 AS_PATH 不一定最快

考虑两条路径:

路径 A:AS64500 → AS64496
路径 B:AS64501 → AS64502 → AS64496

路径 A 经过的 ASN 更少,但它可能绕到更远的机房,也可能拥塞。路径 B 虽然多经过一个 ASN,却可能在本地 IXP 直接交付。

AS_PATH 反映的是自治系统层面的路径,不是光纤公里数,也不是实时延迟测试。真正的性能还受物理距离、容量、拥塞、互联地点和回程路径影响。

Import Policy 和 Export Policy

BGP 的核心不是“收到什么就用什么、学到什么就发什么”,而是明确限制。

Import Policy

决定从邻居接收哪些路由,以及如何标记和调整它们。例如:

  • 从 Transit 接收默认路由或全表;
  • 从 Peer 只接收对方及其客户路由;
  • 拒绝 RPKI Invalid;
  • 限制前缀长度和数量;
  • 给不同来源设置不同 Local Preference。

Export Policy

决定向邻居发布哪些路由。例如:

  • 向上游只发布自己的前缀和客户前缀;
  • 不把从上游 A 学到的全表转发给上游 B;
  • 向 Peer 不发布其他 Peer 或 Transit 学到的路由;
  • 只允许经过授权且列入清单的前缀。

最稳妥的设计是默认拒绝,然后逐项允许。RFC 8212 也要求在没有明确 Import 和 Export Policy 时,EBGP 默认不传播路由。

三类常见关系

BGP 路由策略往往建立在商业关系上。

关系 一般接收什么 一般发布什么
客户 客户及其下游前缀 全网可达信息
Peer Peer 及其客户前缀 自己和客户前缀
Transit 上游 默认路由、部分路由或全表 自己和客户前缀

这是常见模型,不是不可修改的协议规则。双方合同和路由政策才是最终依据。

BGP 为什么会变化

以下事件都可能触发 Update 或 Withdraw:

  • 新的 Prefix 上线;
  • 链路或设备故障;
  • 邻居 Session 断开;
  • 运营商调整路由策略;
  • 前缀被撤销;
  • 上游、Peer 或客户关系变化;
  • 路由聚合方式改变。

BGP 并不是每隔固定时间重发整个路由表。会话建立时交换允许的初始路由,之后主要传递增量变化。

BGP 的安全边界

BGP 最初解决的是可达信息交换,并没有完整内建“谁有权发布前缀”的全球认证体系。

常见风险包括:

错误起源

某个 ASN 错误发布了别人的前缀,可能导致流量绕路或中断。ROA 和 Route Origin Validation 可以降低这一类风险。

Route Leak

某个网络把只应在有限关系内传播的路由发给了不该接收的邻居。例如客户错误地把从上游 A 学到的全表转给上游 B。

RPKI Origin Validation 主要验证 Origin,不会完整验证整条 AS_PATH,也不能单独阻止所有 Route Leak。

配置范围过宽

没有出口白名单、没有最大前缀限制、错误接受默认路由,都可能把局部错误放大。

因此,BGP 安全依靠多层措施共同完成:

  • 明确的 Import 和 Export Policy;
  • Prefix 与 AS_PATH 过滤;
  • 最大前缀限制;
  • RPKI Route Origin Validation;
  • IRR 数据;
  • Session 保护;
  • 外部监控和变更审核。

一个简化示例

某网络 AS64496 同时连接两个上游:

              Transit A / AS64497
                     |
2001:db8:1200::/48 — AS64496
                     |
              Transit B / AS64498

它可以:

  • 向两边发布自己的 /48
  • 从两边接收默认路由或全表;
  • 用 Local Preference 决定出站主备;
  • 用上游提供的 Community 影响对方如何传播;
  • 在一个 Session 失效时使用另一个路径。

但要真正实现冗余,还需要保证两条线路、设备、电源和机房路径没有共同故障点。

常见误区

Session 是 Established,所以网络已经正常

Established 只说明会话建立。前缀可能仍被过滤,数据面也可能因为防火墙或回程路由不可达。

AS_PATH 最短,所以延迟最低

AS_PATH 不是物理路径长度。必须结合实际测量。

配两家上游就会自动均衡流量

BGP 不会自动把流量平均分配。入站和出站策略也不是同一套控制方式。

有 RPKI 就不需要 IRR

两者用途不同。很多上游仍使用 IRR 构建前缀过滤器,而 RPKI 主要验证 Origin 授权。

有自己的 ASN 就必须接收全表

不必。小型网络可以只接收默认路由,或者默认路由加部分特定路由。选择取决于设备能力和路由控制需求。

常见问题

BGP 会直接传送用户流量吗

不会。BGP 交换的是路由信息。路由器选出路径并写入转发表后,数据平面才按结果转发数据包。

运行 EBGP 一定需要公共 ASN 吗

实验室和封闭环境可以使用私有 ASN。要在全球互联网中以独立网络身份发布路由,通常需要公共 ASN。

BGP 和 OSPF 有什么区别

BGP 主要处理自治系统之间的策略路由;OSPF、IS-IS 等 IGP 主要处理一个自治系统内部的路径计算。实际网络中两者经常配合使用。

BGP 能保证双向路径一致吗

不能。互联网路由常常是不对称的。你控制出站选择,不代表能够完全控制其他网络进入你的路径。

BGP 配置完成后还需要维护吗

需要。上游、前缀、ROA、IRR 和安全策略都会变化,Session 与公网可见性也需要持续监控。

小结

把 BGP 放回实际网络里,它做的事情是:

自治系统交换 Prefix 和路径属性,再按照自己的路由政策决定接受、使用和继续发布哪些路由。

稳定性来自清楚的边界:从谁接收什么、向谁发布什么、哪些变化必须告警,而不是配置了多少属性。

参考资料

继续阅读