SKNK 中文技术指南
BGP 是怎么工作的?Prefix、AS_PATH 和路由策略基础
用网络运营视角解释 BGP 如何交换 Prefix、Origin ASN、AS_PATH 与 Next Hop,路由器如何按策略选路,以及为什么 Session 正常不等于路由正确。
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 就必须接收全表
不必。小型网络可以只接收默认路由,或者默认路由加部分特定路由。选择取决于设备能力和路由控制需求。
如果准备在 VPS 上跑 BGP,可以先用 Cloud 网络基础 分清一个地址、一段路由前缀和一个会话分别交付什么。需要确认公网 ASN、路由表或会话数量时,再按 Cloud 网络常见问题 逐项核对。
常见问题
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