
上一篇从算法层面对比了链路状态与距离向量:前者让路由器获得全网拓扑后独立计算,后者只与邻居交换距离估计。但互联网不是一张由同一个管理员统一维护的网络。运营商、云服务商、大学和企业各自管理自己的路由器、链路和策略;有的区域追求快速收敛,有的区域更关心商业关系与安全边界。
因此,网络层把路由选择分成两个层次:自治系统内部使用内部网关协议,自治系统之间使用外部网关协议。OSPF 是典型的内部网关协议,BGP 则是连接全球互联网自治系统的事实标准。本篇重点理解它们各自解决什么问题,以及为什么不能简单拿同一个"最短路"规则处理所有网络。
一、什么是自治系统?
自治系统(Autonomous System,AS)是处于单一技术管理之下的一组网络和路由器。它们通常由同一运营商、企业、校园网或云服务提供者管理,在内部可以使用共同的路由策略和度量。
把互联网划分为许多 AS,有两个直接好处:
- 每个 AS 不必向全世界公开内部的每一台路由器和每条链路;
- AS 内部可以自主选择合适的协议与开销,例如 RIP、OSPF 或其他 IGP。
相应地,路由选择分为两类:
| 范围 | 使用的协议类别 | 主要目标 |
|---|---|---|
| 一个 AS 内部 | 内部网关协议(IGP) | 在统一管理范围内高效、稳定地到达内部网络 |
| 多个 AS 之间 | 外部网关协议(EGP) | 在不同管理者和策略约束下宣布可达性、选择可接受的外部路径 |
RIP 和 OSPF 是 IGP;BGP 是最广泛使用的 EGP。跨 AS 的路由也常称为域间路由,AS 内部的路由称为域内路由。
二、OSPF:在自治系统内部建立"共同地图"
OSPF 是 Open Shortest Path First 的缩写,中文常译为开放最短路径优先。它是基于链路状态的 IGP:每台路由器通过交换链路状态信息建立一致的链路状态数据库,再以自己为源点运行 Dijkstra 算法,计算到各目的网络的最短路径和下一跳。
"开放"强调它是公开标准,不属于某一家厂商;"最短路径优先"强调它利用链路开销计算路径,而不是像 RIP 那样只按跳数衡量。
1. 从邻居关系到链路状态数据库
OSPF 路由器首先通过 Hello 分组发现并维护邻居关系。邻居建立后,每台路由器产生链路状态通告(LSA),描述自己直接相连的邻居和相应链路开销。
新的或变化的 LSA 会在规定范围内洪泛。收到通告的路由器保存它、继续转发给其他相关邻居,直到同一区域的路由器都获得一致的状态信息。保存这些 LSA 的集合就是链路状态数据库(LSDB)。
text
发现邻居 -> 产生 LSA -> 洪泛 LSA -> 建立一致 LSDB -> 运行 Dijkstra -> 更新路由表
OSPF 在 IP 之上直接传送分组,使用 IP 协议号 89,而不是借助 TCP 或 UDP。其工作重点不是搬运用户数据,而是让路由器维护统一的拓扑视图。
2. 变化发生时为什么收敛快?
链路状态发生变化时,OSPF 可以触发通告相应变化,再由各路由器基于更新后的 LSDB 重新计算。相比周期性向邻居发送整张路由表的 RIP,这种"描述具体链路变化并洪泛"的方式更适合较大网络,也通常能更快完成收敛。
不过"快"不代表不需要控制开销。OSPF 仍需要维护邻居、数据库同步、LSA 的可靠传播和定期刷新;网络频繁变化时也会引起多次重算。因此拓扑稳定性和合理的区域设计仍很重要。
3. 为什么 OSPF 还要划分区域?
若一个 AS 很大,把所有 LSA 洪泛到所有路由器会带来明显开销。OSPF 可以把一个 AS 划分为多个区域:
- 区域内路由器:接口都在同一区域内;
- 区域边界路由器:连接一个普通区域与主干区域,负责在区域间传递和汇总路由信息;
- 主干路由器:参与主干区域,承载区域之间的连通;
- 自治系统边界路由器:连接外部 AS,可把外部路由引入 OSPF 域。
区域划分的核心不是把一个 AS 变成多个 AS,而是把链路状态信息的洪泛范围限制在区域内,从而提高可扩展性。代价是路由器角色、区域设计和运维配置会更复杂。
三、BGP:在自治系统之间传播"可达性与策略"
BGP 是 Border Gateway Protocol 的缩写,中文为边界网关协议。它运行在不同 AS 的边界路由器之间,交换的是"哪些网络前缀可以通过我到达,以及到达它们会经过哪些 AS"的信息。
这里的目标与 OSPF 很不一样。不同 AS 的链路开销没有统一含义:一个 AS 的"低费用"可能是带宽,另一个可能是商业成本或安全等级。运营商之间还涉及客户、对等互联、上游转接等策略。BGP 因此不承诺寻找全互联网中唯一的最低费用路径,而是根据可达性和策略选择一条可接受、较好的路径。
1. BGP 通告什么?
BGP 的目的地通常是 CIDR 网络前缀,而不是单台主机。一条 BGP 路由可以概括为:
text
目的前缀 + 一组 BGP 属性
最关键的属性包括:
- AS-PATH:该路由通告经过的 AS 序列;每经过一个 AS,就加入该 AS 的编号;
- NEXT-HOP:到达该外部路径时应先前往的下一跳地址;
- 本地偏好等策略属性:由 AS 管理者设置,用于表达"更愿意走哪条外部路由"。
AS-PATH 既提供路径信息,也帮助避免环路:若一个 AS 收到的通告中已经包含自己的 AS 编号,就知道该路由绕回来了,通常会拒绝它。
2. BGP 对等方与会话
运行 BGP 的路由器称为 BGP 对等方。两个对等方通过长期保持的 TCP 连接交换 BGP 报文,端口为 179:
- 跨越两个 AS 的会话是 eBGP(外部 BGP);
- 同一 AS 内部、用于传播外部路由信息的会话是 iBGP(内部 BGP)。
BGP 使用 TCP 并不表示它是普通应用业务。它借助可靠传输承载路由控制信息;从协议分层实现上通常被归为应用层协议,但它服务的是网络层的域间路由选择。
BGP 建立会话时会交换完整路由信息,之后主要通告新增、撤销或变化的路由,而不是持续重复发送完整表。常见报文包括用于建立会话的 Open、维持会话的 Keepalive、发布或撤销路由的 Update,以及报告异常的 Notification。
3. BGP 怎么选择路由?
当到同一前缀有多条可达路径时,BGP 会按管理员配置和一组属性规则比较。简化理解时,可把常见优先顺序概括为:
- 优先满足本地策略,例如较高的本地偏好;
- 在策略允许的候选中,通常偏好 AS-PATH 较短的路径;
- 若仍难区分,可比较到 NEXT-HOP 的 AS 内部开销,尽快从本 AS 的合适出口离开;
- 再使用其他属性和规则打破平局。
第 3 步常被形象地称为"热土豆路由":分组像烫手土豆一样,选择本 AS 内距离外部出口较近的路径,尽快交给下一个 AS。它并不保证到最终目的地的端到端时延最低,只表示当前 AS 希望以较小内部成本把流量送出。
四、OSPF 与 BGP 如何协作?
以一个运营商 AS 为例:其内部大量路由器使用 OSPF 维护内部链路和出口路由器之间的可达性;位于边界的 BGP 路由器与相邻运营商建立 eBGP 会话,学习外部前缀和策略;这些边界路由器也通过 iBGP 或其他内部机制把外部路由信息传给本 AS 内需要作出出口选择的设备。
当内部某台路由器需要访问外部前缀时,BGP 先决定"应选择哪个外部出口和外部 AS 路径";随后 OSPF 再负责在本 AS 内把流量送到该出口或 NEXT-HOP。这说明两者不是竞争关系:
text
BGP:决定到外部前缀走哪个 AS、从哪个出口离开
OSPF:决定在本 AS 内怎样到达这个出口
这也是 BGP 路由中 NEXT-HOP 很重要的原因。一个路由器接收外部通告后,必须先确认 NEXT-HOP 在本 AS 内如何可达,才能把抽象的 AS 路径转换为可用于转发的实际下一跳和出接口。
五、OSPF 与 BGP 的核心区别
| 对比维度 | OSPF | BGP |
|---|---|---|
| 使用范围 | 一个 AS 内部 | 不同 AS 之间,及 AS 内传播外部路由 |
| 协议类别 | IGP | EGP |
| 基本思想 | 链路状态 + Dijkstra | 路径向量 + 策略选择 |
| 主要交换的信息 | 链路状态通告与拓扑信息 | 前缀可达性和路径属性,例如 AS-PATH、NEXT-HOP |
| 优先目标 | 域内高效、快速收敛 | 策略合规、可达性与域间稳定性 |
| 承载方式 | 直接封装在 IP 中,协议号 89 | TCP 端口 179 |
| 规模控制 | 用区域限制 LSDB 和洪泛范围 | 用 AS 边界、策略与前缀聚合管理全局路由 |
不要把"OSPF 比 BGP 快"理解成两者在同一问题上竞争。它们所在的管理范围和设计目标不同:OSPF 追求统一管理域内的拓扑计算,BGP 面对的是彼此独立、存在策略关系的自治系统。
六、容易混淆的点
| 常见说法 | 更准确的理解 |
|---|---|
| OSPF 和 BGP 都是找最短路径 | OSPF 在 AS 内按开销计算最短路径;BGP 在 AS 间优先满足策略和可达性 |
| BGP 只运行在 AS 边界 | eBGP 跨 AS 建会话,iBGP 也可在同一 AS 内传播外部路由信息 |
| BGP 的 AS-PATH 越短,一定越好 | 它通常是重要因素,但本地偏好等策略可能优先于 AS-PATH 长度 |
| OSPF 发送的是整张路由表 | OSPF 交换的是链路状态信息,并维护 LSDB;它不是 RIP 式的整表邻居通告 |
| OSPF 区域就是独立 AS | 区域仍属于同一个 AS,只是限制洪泛和管理规模 |
| BGP 可以完全取代内部路由协议 | BGP 学到外部路径后,仍常依赖 IGP 计算本 AS 内到 NEXT-HOP 或出口的路径 |
七、总结
互联网通过自治系统把路由选择分层。OSPF 在一个 AS 内通过 Hello 建立邻居、用 LSA 洪泛链路状态、维护 LSDB,并运行 Dijkstra 计算最短路径;区域划分让它能在较大自治系统内控制洪泛范围。BGP 则在 AS 之间通告网络前缀及 AS-PATH、NEXT-HOP 等属性,用路径向量和策略选择一条可接受的外部路径。
理解 OSPF 与 BGP 的分工后,路由器"知道下一跳"的来源就完整得多了。下一篇将转向 ICMP,看看当数据报无法到达、TTL 耗尽或需要网络诊断时,Ping 和 Traceroute 如何借助控制报文反馈信息。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!