在介绍主题之前,先给大家推荐一个视频,非常形象的介绍了什么是 Segment Routing 以及 SRv6。欢迎大家关注我们的视频号,更多优质内容不错过!
我们知道,分段路由(SR)是一种源路由技术,它允许发送端选择数据传输的路径,并将路径编码为数据包头部的有序分段列表。
目前,控制平面协议如 IGP( ISIS 或 OSPF )、BGP、PCE-P 和 BGP-LS 都在扩展以支持 SR 。在纯 SR 域中,无需 LDP 或 RSVP 即可分发标签。从数据平面的角度来看,我们可以使用MPLS标签来表示分段 ID(SID) 或带有分段路由头的 IPv6 地址。
接下来,我们将从数据平面的角度重点介绍控制平面和 MPLS 的 ISIS 。
SID 有两种主要类型:Node-SID 和 Prefix-SID 。Node-SID 表示一个节点,并具有全局意义,类似于路由器的环回地址。运营商通常会为他们的路由器分配环回地址,同样地,每个节点预计也会被分配一个唯一的 Node-SID 值。这些值可以是绝对值或索引值,但都必须是全局唯一的。
在 SR 域中,所有节点都通过最短路径将数据包转发到 Node-SID 。这意味着 SR 域中的每个节点都会在转发平面中为 Node-SID 分配一个 MPLS 标签。例如,在图 1 中,每个路由器都被分配了一个唯一的 Node-SID 值。
图1
如果 R1 想要向 R6 发送数据包,它会在数据包顶部放置 R6 的节点标签(例如16006),沿途的每个路由器都会根据标签进行交换,直到数据包到达 R6 。如果R1 希望数据包在到达目的地之前通过特定节点(例如 R4 ),它可以在标签堆栈的顶部放置 Node-SID 标签 16006 和 16004 。
在 Segment Routing Global Block(SRGB) 这个概念中,它指的是全局块,是为分段路由保留的标签范围。SRGB 是Segment 路由节点的本地属性。
在 MPLS 架构中,SRGB 是一组保留的本地标签,用于将标签分配给全局分段,如路由器发起的节点 SID 。在 IOS-XR 中,默认 SRGB 范围为 16000-23999 ,动态标签范围为 24000-1048575 。每个 SR 节点都将其 SRGB 作为标签库和标签范围公布。
因此,在 IOS-XR 的情况下,通过 IGP 它将是 Base=16000 和 range=8000。不同的节点可能具有不同的 SRGB 值,这可能是因为操作员配置的,或者是由于供应商实施的差异,因此与 IGP 前缀分段关联的绝对 Node-SID 值可能会因节点而异。
在 SR 域中,如果所有节点的 SRGB 范围相同,则所有 SR 节点将为节点或前缀安装相同的 SID 标签值。例如,在下图中,我们可以为 R4分配绝对值 104,R4 通过 IGP 通告,当 R3 收到此信息时,它会从其 SRGB 块中为 R4 保留 104。此信息通过 IGP 进一步中继到 R2 。
图2
但是,如果不同节点的 SRGB 不同怎么办。
在下图中,如果我为 R4 分配绝对值 104 作为节点 SID,并且当 R4 通过 IGP 通告此值时,R2 不能不分配 104,因为它超出了其 SRGB 范围。
图3
那么我们如何解决这种情况呢?
为了避免此类情况,我们可以选择为 Node-SID 分配 Unique Index 值而不是 Absolute 值。
在下图中,该运算符为每个 SR 节点配置了 Unique Index 值。当 R4 向 R3 公布其索引值时,R3 将 104 编程为本地标签。R3 进一步将 R4 的 Index 值公布给 R2,R2 根据以下公式分配其本地标签 504 (500 4):
本地标签(前缀 SID)= 起始标签 SID
图4
在独立标签分发模式下运行时,标签操作看起来与 LDP 非常相似,不同之处在于,用于将数据包转发到每个下游路由器的标签值由上游路由器根据公布的前缀 SID 索引使用公式 "本地标签(前缀 SID)= 起始标签 SID " 来计算。
接着我们来看看Adjacency SID(邻接SID),它是另一种重要的 SID 类型,它们通常代表一个链接,并具有本地意义。
与 Node-SID 不同,远程 SR 节点不会在转发平面中为 Adjacency SID 标注状态。只有直接连接的节点才会对 Adjacency SID 的转发平面进行编程。同时,它们是绝对值,由路由器从动态标签范围(位于SRGB块之外)动态分配。如下图所示,24001 的 Adjacency SID 存在于 R1-R4 和 R3-R5 之间。
图5
因此,在 IOS-XR 的情况下,它们将从动态标签范围(即 24000-1048575 )中分配。由于 Adjacency SID 具有本地意义,因此它们在 SR 域中不必是唯一的。
关于 SR/LDP 互通,它也是 SR 技术的一个重要特性,它允许 SR 网络与现有的 LDP 网络实现互通。
如果运营商已经在运行 LDP 网络并希望部署 SR ,但并非每个节点都支持 SR, SR/LDP 互通为此提供了一种解决方案。
例如,在下图中,R1、R2、R3 和 R10 仅运行 LDP,而 R4 到 R8 路由器支持 SR 。R4 和 R6 同时运行 SR 和 LDP ,因为它们位于 SR 和 LDP 之间的边界上。整个网络运行单一的 IGP,如 IS-IS 。
图6
如果来自仅 LDP 域的路由器想要与 SR 域通信,过程相对简单。
例如,如果 R1 想要向 R8 发送数据包,R4 和 R6(运行 LDP )将为 SR 节点(包括 R8 )分配标签,并通过 LDP 将这些标签通告给其他邻居。当 R1 发送带有 LDP 标签的数据包到 R10 时,R10 会根据最短路径将标签交换到 R4 或 R6,然后 R4 将 SR 标签交换到 R8 。
图7
在上面的图 6 中,如果 R8 是仅 SR 节点,想要向仅LDP节点发送数据包,就需要使用映射服务器功能。映射服务器定义了Node-SID及其相应的标签值映射,并通过IGP将这些映射通告给所有SR节点。
在下面的图 8 中,展示了一个单独的映射服务器节点,原因之一是只要它参与 IGP 域,它就不必排成一行,否则任何 SR 节点都可以是映射服务器,而不必有一个单独的盒子。但显然这将是一个关键的盒子,因为它的失败意味着 SR 和 LDP 域之间的通信失败。
图8
在映射服务器上,我们定义 Node-SID 及其相应的标签值映射,如下所示:
其中 1.1.1.1 /32 是环回的起始地址,2001 是起始标签索引值,范围是 3。映射服务器将通过 IGP 将此映射通告给所有 SR 节点。假设 SRGB 范围为 16000-23999,则 LDP 路由器的 SR 节点派生的节点 SID 值将为:
- 1.1.1.1 /32 节点 SID 标签值为 = 18001 (SRGB Base 16000 2001)
- 1.1.1.2 /32 节点 SID 标签值为 = 18002 (SRGB Base 16000 2002)
- 1.1.1.3 /32 节点 SID 标签值为 = 18003 (SRGB Base 16000 2003)
这样,SR节点就知道如果要访问仅 LDP 节点,应该使用哪个 Node-SID 值。
在下图中,一旦数据包到达位于 SR 和 LDP 边界的 R4 ,它将从 R10 为 R1 通告的 SR 标签交换为 LDP 标签。
通过这些技术,网络工程师可以更灵活地设计和优化网络,提高数据传输的效率和可靠性。
备注:
SR:Segment Routing (分段路由)
SID:Segment ID (段ID)
SRGB:分段路由全局块
参考文档可加入我们的星球获取:
- Segment_Routing_介绍中文版-Cisco.pdf
- 新一代 SR 流量工程体系 - SR Policy.pdf
- SR_Global_Block_中文版Cisco.pdf ......