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 有两个重要作用:
- 让路由器识别包含自己 ASN 的路径,从而避免环路;
- 作为选路和策略判断的依据之一。
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 和路径属性,再按照自己的路由政策决定接受、使用和继续发布哪些路由。
稳定性来自清楚的边界:从谁接收什么、向谁发布什么、哪些变化必须告警,而不是配置了多少属性。
参考资料
- RFC 4271:A Border Gateway Protocol 4
- RFC 8212:Default External BGP Route Propagation Behavior without Policies
- RFC 7454:BGP Operations and Security
- RFC 1997:BGP Communities Attribute
- RIPE NCC:Autonomous System Number Assignment Policies