技术博客
, Juniper Distinguished Eng
技术博客
支持多协议标签交换 (MPLS) 的分段路由 (SR)
Aug 5, 2019

上一周的博客中,我们介绍了分段路由 (SR) 路径,知道了它是一个有序分段列表。 
 此外,我们还阐述了分段作为一种指令,可以使数据包遍历一个或多个链路。

 

本周,我们将讨论一种利用 MPLS 实施 SR 的方式。我们将这种实施方式称为 SR-MPLS。全面掌握 SR-MPLS 有助于您理解下一周博客的内容,其中我们将介绍如何使用 SR 来支持流量工程应用。

 

概述

在 SR-MPLS 中,SR 路径将编码为 MPLS 标签堆栈。每个标签堆栈条目表示 SR 路径中的一个分段。在本周的博客中,我们将介绍如何使用 MPLS 标签来对邻接分段和前缀分段进行编码。

 

邻接分段 1:邻接分段

 

3Capture1.PNG

在图 1 中,SR 路径将 R1 连接到 R4。该 SR 路径包含三个邻接分段。分段 1 使数据包遍历链路 R1->R2,而分段 2 则使数据包遍历链路 R2->R3。分段 3 会使数据包遍历链路 R3->R4。

 

当 R1 从 SR 域外接收数据包时,会指示该数据包受策略约束。相关策略可能会使 R1 沿着图中所示的 SR 路径转发数据包。发生这种情况时,R1 便会施加包含两个条目的 MPLS 标签堆栈。堆栈上部的条目表示分段 2,并带有 MPLS 标签 1002。堆栈下部的条目表示分段 3,并带有 MPLS 标签 1003。

 

在应用 MPLS 标签堆栈后,R1 通过分段 1(即链路 R1->R2)转发数据包。当数据包到达 R2 后,R2 将从最上部的标签堆栈条目提取标签(即 1002)并在其转发信息库 (FIB) 中搜索相应条目。相应的 FIB 条目包括一个指令(即 POP)和下一跳(即 R3)。因此,R2 将从标签堆栈中弹出最上部的条目,并通过分段 2(即链路 R2->R3)转发数据包。

 

当数据包到达 R3 后,R3 将从剩余的标签堆栈条目提取标签(即 1003)并在其 FIB 中搜索相应条目。相应的 FIB 条目包括一个指令(即 POP)和下一跃点(即 R4)。因此,R3 将从标签堆栈中弹出剩余的条目,并通过分段 3(即链路 R3->R4)转发数据包。数据包将在未封装 MPLS 的情况下到达 R4。

 

前缀分段

 


3Capture2.PNG

2:前缀分段

 

在图 2 中,SR 路径通过 R4 将 R1 连接到 R7。SR 路径包含两个前缀分段。分段 1 是一个前缀分段,它会使数据包沿着最低成本路径从 R1 遍历到 R4。分段 2 也是一个前缀分段,它会使数据包沿着最低成本路径从 R4 遍历到 R7。在该网络中,所有链路均配置有相同的 IGP 指标(即 10)。因此,从 R1 到 R4 的最低成本路径将遍历链路 R1->R2、R2->R3 和 R3->R4,而从 R4 到 R7 的最低成本路径则遍历链路 R4->R8 和 R8->R7。

 

当 R1 从 SR 域外部收到数据包后,它会使该数据包受其策略的约束。相关策略可能会使 R1 通过图中所示的 SR 路径转发数据包。如果发生这种情况,R1 将应用一个包含两个条目的 MPLS 标签堆栈。该标签堆栈上部的条目表示分段 1,并带有标签 2001。该标签堆栈下部的条目表示分段 2,并带有标签 2002。

 

在应用 MPLS 标签堆栈后,R1 会通过链路 R1->R2 将数据包转发到分段 1。当数据包到达 R2 后,R2 将从最上部的标签堆栈条目提取标签(即 2001)并在其 FIB 中搜索相应条目。相应的 FIB 条目包括一个指令(即 SWAP - 3001)和下一跃点(即 R3)。因此,R2 会使用新值(即 3001)覆盖最上部的标签并将数据包转发到 R3。

 

当数据包到达 R3 后,R3 将从最上部的标签堆栈条目提取标签(即 3001)并在其 FIB 中搜索相应条目。相应的 FIB 条目包括一个指令(即 POP)和下一跃点(即 R4)。因此,R4 将从标签堆栈中弹出最上部的条目,并通过链路 R3->R4 将数据包转发到分段 2。

 

当数据包到达 R4 后,R4 将从剩余的标签堆栈条目提取标签(即 2002)并在其 FIB 中搜索相应条目。相应的 FIB 条目包括一个指令(即 SWAP - 3002)和下一跃点(即 R8)。
因此,R4 会使用新值(即 3002)覆盖剩余的标签并将数据包转发到 R8。

 

当数据包到达 R8 后,R8 将从剩余的标签堆栈条目提取标签(即 3002)并在其 FIB 中搜索相应条目。相应的 FIB 条目包括一个指令(即 POP)和下一跃点(即 R7)。因此,
R8 会从标签堆栈中弹出剩余的条目并在未封装 MPLS 的情况下将数据包转发到 R7。

 

倒数第二跃点弹出 (PHP) 和显式空标签

在上述示例中,每个分段都会执行 PHP 程序。当数据包遍历某一分段时,该分段的倒数第二个节点会弹出与该分段关联的标签。

 

如果 SR 路径还包含一个分段,而该分段尚未遍历,则当前分段的出口节点也将是下一分段的入口节点。在这种情况下,当数据包到达该节点时,下一分段的标签便会显示在堆栈上部。如果 SR 路径不再包含其他尚未遍历的分段,则该分段的出口节点也将是该路径的出口节点。此时,数据包便会在未封装 MPLS 的情况下到达该路径的出口节点。

 

在某些情况下,SR 路径中最后一个链路可能无法在未封装 MPLS 的情况下传输数据包。例如,该数据包可能是 IPv6,而该链路仅支持 IPv4。为了防止这种问题发生,SR 入口节点可以将一个 MPLS 显式空标签添加到 MPLS 标签堆栈上部。

 

当最后一个分段中倒数第二个节点弹出与该最终分段关联的标签时,它便会显示此显式空标签。之后,它就会将该数据包转发到该路径的出口节点。该路径的出口节点会弹出该显式空标签,并继续处理该数据包。

 

总结

本周,我们了解了 SR-MPLS 如何将 SR 路径编码为 MPLS 标签堆栈。同时,还了解了 SR-MPLS 如何使用其 FIB 来处理数据包。

 

下周,我们将探讨如何将 SR 应用于流量工程应用。

0 Kudos