什么是网络中的分段路由和源数据包路由?
在分段路由网络中,设备会生成一系列指令,这些指令表示转发或处理数据包的方式。这些指令称为段。通过将网段堆叠在一起,运维人员可以在任意两个设备之间创建精确的路径。这支持无 BGP 核心、流量工程 (流量工程)、备用路径、多域路径和多拓扑网络等功能。在数据平面中,可以使用 MPLS 标签或 IPv6 地址来表示分段。
必备知识
我们假设读者了解常规 IP 路由和 MPLS 标签交换原理,并对 IS-IS 或 OSPF 有深入的工作知识。我们在 技术文档中的其他资源中也介绍过这些概念。
分段路由 (SR) 是一种生成一系列指令的方法,这些指令指示如何在拓扑中转发或处理数据包。这些指令称为段。然后可以将这些指令写入数据包中,以便传输设备按预期转发和处理数据包。可以将多个分段堆叠在一起,以在任意两台设备之间定义端到端路径。
分段直接在路由协议(如 IS-IS、OSPF 和 BGP)中播发。这意味着无需运行额外的协议即可在整个网络中通告这些网段。本节定义了分段的概念。本节还介绍如何播发分段,以及如何使用分段在网络中创建精确路径。我们将进一步探索如何使用 MPLS 标签或称为 SRv6 地址的特殊 IPv6 地址在数据平面中表示这些分段。这些选项分别称为 SR-MPLS 和 SRv6。
段表示的指令示例
段是代表一条指令的构造的名称。这可能是与转发相关的指令,也可能是与如何在接收路由器本地处理数据包相关的指令。在分段路由中,这些指令在整个网络中播发,例如,在整个 IS-IS 级别或 OSPF 区域中。这样一来,任何支持 SR 的设备都可以将这些指令堆叠在一起,通过网络创建精确路径,到达任意远程设备。
以下是段可以表示的指令的几个示例:
-
将数据包沿内部网关协议 (IGP) 的最短路径转发到特定远程路由器。
-
指示过渡路由器将数据包直接发送到下一跳邻接方,从而从特定的本地接口发送。
-
指示自治系统 (AS) 边界路由器将数据包发送到特定的外部 BGP (EBGP) 对等方,从而覆盖 BGP 最佳路径决策。
-
在两个或多个中转路由器或端点路由器之间均衡数据包负载。
-
从多个潜在出口点向最近的边界路由器发送数据包。
-
指示过渡路由器将数据包重定向到特定的流量工程 (流量工程) 隧道。
-
在主拓扑中定义一个较小的受限拓扑,然后沿着该受限拓扑的最短路径转发数据包。
-
移除已推送到数据包上的所有分段指令,然后在特定的第 2 层或第 3 层转发表中处理数据包本身。
分段会在您的现有路由协议中进行通告
在 SR 网络中,每个设备都会生成各种分段,这些分段代表其转发或处理数据包的方式。然后,这些分段中的大多数会播发至同一路由域内的所有其他路由器,例如同一 OSPF 区域或 IS-IS 级别,或 BGP 对等方之间。
分段路由不使用专用协议,而是通过协议扩展直接在 IS-IS、OSPF 和 BGP 中通告分段。无需为分段路由启用新的协议。您可以简单地依靠已经使用的协议。
因此,路由域中每台启用 SR 的设备都可以完全查看网络中其他每个启用 SR 的节点播发的每条分段指令。换句话说,每台设备都会了解其他每台设备可以接收的每个播发区段。
图 1 展示了这一思路,并简要展示了 SR-MPLS 网络中分段的外观。SRv6 中的概念与此类似。
图 1 显示了 10 台路由器的拓扑,编号为 R1 到 R10。在链路状态网络中,每个路由器都会生成一个对象来描述其在网络中的位置。OSPF 将此对象称为链路状态通告 (LSA),而 IS-IS 将其称为链路状态协议数据单元 (LSP)。在这两种情况下,SR 都可以将附加信息附加到此 LSA 或 LSP。
例如,在 图 1 中,R5 已声明它与 R4 和 R10 具有邻接关系。分段路由可以在 LSA 或 LSP 中使用分段指令标记此信息,该指令指出 R5 可以使用分段路由将流量直接发送到这些邻接方,以及一个称为分段标识符 (SID) 的数字。在 SR-MPLS 中,这些称为邻接分段。SRv6 中的等效构造称为 End.X SID。
R5 还使用指示 R5 愿意接受通过 IGP 最短路径发送的流量的指令标记自己的环路 IPv4 地址前缀。这在 SR-MPLS 中称为节点分段。
LSA 或 LSP 在整个路由域中泛洪,这意味着 OSPF 区域或 IS-IS 级别中的每台路由器都会了解使用这些协议播发的每个分段。使用此分段信息,支持 SR 的路由器可以将一个或多个分段指令直接堆叠到数据包上,以指示数据包到特定远程路由器的路径,以及有关数据包的处理方式的信息。
将各个分段组合在一起,在网络中创建精确的路径
在每个路由器通告代表其生成的指令的各个分段后,网络中的任何路由器都可以将这些分段组合在一起以创建您选择的任何任意路径。这可能涉及创建一个分段堆栈,也可以像使用一个到目标路由器的最短路径分段一样简单。
分段路由无需主动发出信号或请求路径即可实现这一点,因为现有路由协议已播发和学习所有分段指令。任何路由器都可以简单地计算出所需的路径,提取与该路径关联的所需分段,然后将这些指令附加到数据平面的数据包中。
图 2 显示了如何将这些片段组合在一起的人类可读示例。
从 R1 开始,图显示了向 R7 发送数据包的一系列三条指令。第一段遵循到 R4 的最短路径。第二段直接从 R4 到 R9。最终指令采用到 R7 的最短路径。
R4 生成并通告了前两个区段。R7 生成了第三个部分。然后,网络中的任何路由器都可以利用这些分段在拓扑中创建精确路径。
你不需要使用一堆分段。例如,如果您的唯一要求是流量遵循到达远程设备的最短路径,则数据包将只需要一个分段。这如 图3所示,其中只需要一个线段来描述R1和R5之间的最短路径。
这足以实现经典的无 BGP 核心设计,无需流量工程,其中数据包只需沿着 IGP 最短路径到达目标边界路由器。
使用 MPLS 或 IPv6 表示数据平面中的分段
在数据平面中,可以使用 MPLS 标签或 IPv6 地址来表示分段。这些方法分别称为 SR-MPLS 和 SRv6。
图 4 简要概述了每种协议在数据平面中的外观。SR-MPLS 使用一个 MPLS 标签表示单个分段,而 SRv6 可以在单个 IPv6 地址内对一个或多个分段进行编码。当需要多个 IPv6 地址来描述完整路径时,这些地址存储在称为分段路由标头 (SRH) 的 IPv6 扩展报头中。
图 4 显示了每个数据平面协议中的分段堆栈。但是,如果数据包只需要沿着最短路径到达远程设备,则没有必要使用分段堆栈。相反,此指令可以在单个 MPLS 标签或 IPv6 地址中进行编码。
SR-MPLS 和 SRv6 都使用称为分段标识符 (SID) 的数字结构。SID 用于传送应在数据平面中使用的 MPLS 标签或 IPv6 地址。SID 值的使用方式不同,具体取决于所播发的区段类型。
例如,在 SR-MPLS 中,SID 值有时是路由器期望从该网段接收的确切 MPLS 标签。但是,其他分段类型使用 SID 值作为索引,该索引可与一组预分配的 MPLS 标签组合使用,以计算路由器期望为某个分段接收的正确 MPLS 标签。
相比之下,SRv6 部署倾向于为网络中的每个单独路由器分配整个唯一的 IPv6 地址子网。然后,路由器会从这个较大的前缀分配各个分段。分段和前缀都在网络上播发,这样任何路由器至少都可以按照公制最短路径到达该分段。
IS-IS 和 OSPF 创建和播发相同类型的分段,并且它们都以相同的方式使用分段 ID 值。然而,每个协议都有自己独特的方式来宣传这些信息。
请参阅我们的文档,其中单独详细介绍了 SR-MPLS 和 SRv6,以及支持这些数据平面协议的 IS-IS 和 OSPF 配置以及 SR-MPLS 和 SRv6 提供的唯一分段类型。在阅读此详细文档之前,强烈建议读者先阅读以下部分中提到的文档,以广泛了解分段路由的一般知识。