【计算机网络 | 网络层10:OSPF 与 BGP:自治系统内部和互联网之间如何路由?】 上一篇从算法层面对比了链路状态与距离向量前者让路由器获得全网拓扑后独立计算后者只与邻居交换距离估计。但互联网不是一张由同一个管理员统一维护的网络。运营商、云服务商、大学和企业各自管理自己的路由器、链路和策略有的区域追求快速收敛有的区域更关心商业关系与安全边界。因此网络层把路由选择分成两个层次自治系统内部使用内部网关协议自治系统之间使用外部网关协议。OSPF 是典型的内部网关协议BGP 则是连接全球互联网自治系统的事实标准。本篇重点理解它们各自解决什么问题以及为什么不能简单拿同一个“最短路”规则处理所有网络。一、什么是自治系统自治系统Autonomous SystemAS是处于单一技术管理之下的一组网络和路由器。它们通常由同一运营商、企业、校园网或云服务提供者管理在内部可以使用共同的路由策略和度量。把互联网划分为许多 AS有两个直接好处每个 AS 不必向全世界公开内部的每一台路由器和每条链路AS 内部可以自主选择合适的协议与开销例如 RIP、OSPF 或其他 IGP。相应地路由选择分为两类范围使用的协议类别主要目标一个 AS 内部内部网关协议IGP在统一管理范围内高效、稳定地到达内部网络多个 AS 之间外部网关协议EGP在不同管理者和策略约束下宣布可达性、选择可接受的外部路径RIP 和 OSPF 是 IGPBGP 是最广泛使用的 EGP。跨 AS 的路由也常称为域间路由AS 内部的路由称为域内路由。二、OSPF在自治系统内部建立“共同地图”OSPF 是 Open Shortest Path First 的缩写中文常译为开放最短路径优先。它是基于链路状态的 IGP每台路由器通过交换链路状态信息建立一致的链路状态数据库再以自己为源点运行 Dijkstra 算法计算到各目的网络的最短路径和下一跳。“开放”强调它是公开标准不属于某一家厂商“最短路径优先”强调它利用链路开销计算路径而不是像 RIP 那样只按跳数衡量。1. 从邻居关系到链路状态数据库OSPF 路由器首先通过Hello 分组发现并维护邻居关系。邻居建立后每台路由器产生链路状态通告LSA描述自己直接相连的邻居和相应链路开销。新的或变化的 LSA 会在规定范围内洪泛。收到通告的路由器保存它、继续转发给其他相关邻居直到同一区域的路由器都获得一致的状态信息。保存这些 LSA 的集合就是链路状态数据库LSDB。发现邻居 - 产生 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 因此不承诺寻找全互联网中唯一的最低费用路径而是根据可达性和策略选择一条可接受、较好的路径。BGP 是应用层协议它是基于TCP的端口号179。1. BGP 通告什么在BGP中目的地不是主机而是 CDIR 化的前缀prefix每个前缀表示一个子网或一个子网的集合。BGP 路由的一般格式如下BGP 路由 (目的地)CIDR 前缀BGP 属性当一个路由器通过 BGP 会话向对等方通告一条 BGP 路由时最重要的两个 BGP 属性是AS-PATH自治系统路径和 NEXT-HOP下一跳AS-PATH是通告的BGP 路由所经过的自治系统。在 BGP 中通常用一个全局唯一的自治系统号ASN来标识自治系统。BGP 路由每经过一个 AS就将其 ASN 加入 AS-PATH。可见BGP路由必须指出通过哪些 AS但不指出路由要通过哪些路由器。NEXT-HOP到达该外部路径时应先前往的下一跳地址本地偏好等策略属性由 AS 管理者设置用于表达“更愿意走哪条外部路由”。AS-PATH 既提供路径信息也帮助避免环路若一个 AS 收到的通告中已经包含自己的 AS 编号就知道该路由绕回来了通常会拒绝它。例子AS4新增了一个X那么此时R1给R2发送的是x的CIDR 前缀AS4AS-PATHR1NEXT-HOPR2把收到的信息给AS内部的路由器以及R3R3发之前进行修改x的CIDR 前缀AS1 AS4R3发给R4R5然后R4给R6R6发之前进行修改x的CIDR 前缀AS3 AS1 AS4R6R5给R7R7发之前进行修改x的CIDR 前缀AS2 AS1 AS4R3…以此类推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。这说明两者不是竞争关系BGP决定到外部前缀走哪个 AS、从哪个出口离开 OSPF决定在本 AS 内怎样到达这个出口这也是 BGP 路由中 NEXT-HOP 很重要的原因。一个路由器接收外部通告后必须先确认 NEXT-HOP 在本 AS 内如何可达才能把抽象的 AS 路径转换为可用于转发的实际下一跳和出接口。五、OSPF 与 BGP 的核心区别对比维度OSPFBGP使用范围一个 AS 内部不同 AS 之间及 AS 内传播外部路由协议类别IGPEGP基本思想链路状态 Dijkstra路径向量 策略选择主要交换的信息链路状态通告与拓扑信息前缀可达性和路径属性例如 AS-PATH、NEXT-HOP优先目标域内高效、快速收敛策略合规、可达性与域间稳定性承载方式直接封装在 IP 中协议号 89TCP 端口 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 如何借助控制报文反馈信息。如果这篇文章对你有帮助欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力