第183篇:SR-MPLS 基本概念与 Segment List

关键词

SR-MPLS、Segment Routing、Segment List、SID、IGP Segment、Prefix-SID、Adj-SID


一、从 MPLS 到 Segment Routing

1.1 MPLS 的复杂之处

传统的 MPLS 依赖 LDP/RSVP-TE 来分配标签和建立 LSP:

每个 LSR 需要:
  ├─ 运行 IGP(OSPF/ISIS)
  ├─ 运行 LDP → 分发标签
  ├─ 运行 RSVP-TE(如果需要 TE)
  └─ 维护 LFIB、LIB

协议多、状态多、配置复杂。

1.2 Segment Routing 的简化

SR-MPLS(Segment Routing MPLS) 的理念是:

  • 不需要 LDP——标签由 IGP(OSPF/ISIS)直接分发
  • 不需要 RSVP-TE——路径通过 Segment List 编码在包头
  • 无状态——核心 LSR 不需要维护 LSP 状态
传统 MPLS:
  控制面:IGP + LDP + RSVP-TE + MP-BGP
  数据面:MPLS 标签

SR-MPLS:
  控制面:IGP(扩展分发 SID)+ MP-BGP
  数据面:MPLS 标签(基于 SID)

  更少的协议,更少的复杂度

二、Segment 与 SID

2.1 什么是 Segment

Segment 是 SR-MPLS 的基本组成单元,代表一个指令:

一个 Segment 告诉网络设备:
  "把这个包送到节点 Z" 或
  "把这个包从接口 Y 发出去"

多个 Segment 组成 Segment List,定义一条完整的路径。

2.2 SID(Segment Identifier)

SID 是 Segment 的标识符,对应 MPLS 的标签:

SID = MPLS 标签

在 SR-MPLS 中,标签不再由 LDP 分配
而是由 IGP 直接分发

2.3 SID 类型

SID 类型 名称 标签行为 含义
Prefix-SID 前缀 SID 全局标签(20 位) 到某个 IP 前缀的最短路径
Adj-SID 邻接 SID 本地标签(20 位) 从特定接口转发到邻居
Node-SID 节点 SID 全局标签 节点 Loopback 的 Prefix-SID
Anycast-SID 任播 SID 全局标签 到任播组的最近节点
Prefix-SID(全局):
  LSR 为它的 Loopback 分配一个 SID
  所有其他 LSR 都知道这个 SID 代表这个 LSR
  转发时,所有 LSR 按照 IGP 最短路径转发

Adj-SID(本地):
  LSR 为每个邻接分配一个 SID
  告诉上游:"包给我后,从指定接口转发"
  用于精确指定下一跳

2.4 SID 的分配

ISIS 配置示例(华为):
#
isis 1
 is-level level-2
 network-entity 49.0001.0010.0100.1001.00
 #
 cost-style wide                              # 需要 wide metric
 segment-routing mpls                          # 使能 SR-MPLS
  prefix-sid index 100                         # Node-SID = 100 (全局)
  !
 interface GigabitEthernet0/0/0
  isis adj-sid 500                             # Adj-SID = 500 (本地)

SID 与 MPLS 标签的关系

OSPF/ISIS 通告 Prefix-SID = 100
  → 所有 LSR 自动给 FEC "Loopback of R1" 分配标签 100
  → 与 LDP 不同,不需要额外的标签分发协议!

三、Segment List(段列表)

3.1 什么是 Segment List

Segment List 是一个有序的 SID 序列,编码在 MPLS 标签栈中,定义了一条端到端路径:

Segment List = [SID1, SID2, SID3, ...]

在 MPLS 数据面上:
  标签栈 = {Label1, Label2, Label3, ...}
  栈顶 Label1 对应第一个 Segment

3.2 简单路径示例

拓扑:R1 ─ R2 ─ R3 ─ R4

从 R1 到 R4 的最短路径(都走 IGP 最短):
  Segment List = [Node-SID of R4]
  标签栈 = {104}       ← 每个 LSR 都知道 104 = R4

  R1:Push 104 → 转发
  R2:Swap 104 → 转发(或继续标签不变,取决于支持)
  R3:Swap 104 → 转发
  R4:Pop → IP 转发

3.3 指定路径示例

拓扑:R1 ─ R2 ─ R3 ─ R4
        \       /
         └─ R5 ─┘

如果需要指定 R1 → R2 → R5 → R3 → R4(避开 R2-R3 链路):

  Segment List = [Adj-SID(R2→R5), Node-SID(R4)]

  标签栈 = {502, 104}         ← Adj-SID 502 + Prefix-SID 104

  转发过程:
    R1:Push {502, 104} → 发送到 R2
    R2:栈顶=502 → 从指定接口发到 R5(Pop Adj-SID)→ 剩下 {104}
    R5:栈顶=104 → IGP 最短路径到 R4
    R3:继续转发 104
    R4:Pop

核心思想:路径信息编码在标签栈中,中间节点不需要维护 LSP 状态。


四、SR-MPLS 的转发行为

SR-MPLS 定义了对 MPLS 标签栈的操作:

操作 说明 对应 SID
Next 根据标签(Prefix-SID)沿 IGP 最短路径转发 Prefix-SID
Continue 继续匹配下一个标签 标签栈深度 > 1
Push 压入额外的标签 Ingress
Pop 弹出栈顶标签 PHP / 最后一跳

SR-MPLS 的标签操作比 MPLS 更灵活:

R1 的 Segment List = [Adj-SID R1→R2(501), Adj-SID R2→R3(502), Node-SID R4(104)]

  R1:Push {501, 502, 104} → 处理 501 → Pop → 发送到 R2(指定接口)
  R2:栈顶=502 → Pop → 发送到 R3(指定接口)
  R3:栈顶=104 → IGP 最短路径到 R4
  R4:Pop → IP

五、SR-MPLS vs LDP

对比维度 LDP SR-MPLS
标签分发 LDP 协议独立分发 IGP(OSPF/ISIS)扩展分发
控制面协议 IGP + LDP 仅 IGP
标签范围 本地分配(16-1M) 全局 Prefix-SID(需规划)
状态维护 LIB/LFIB 动态维护 无 LSP 状态
TE 能力 需 RSVP-TE Segment List
FRR 保护 LDP FRR TI-LFA(天然支持)
标签数量 动态增加 静态规划(支持动态)

六、SR-MPLS 的优势

优势 说明
简化协议栈 只需要 IGP,不需要 LDP 和 RSVP-TE
状态无关 Transit LSR 不维护 LSP 状态
弹性路径 Segment List 可以灵活编排路径
天然 TE 无需 RSVP-TE,Segment List 即可实现
TI-LFA 内置快速重路由(Topology Independent LFA)
平滑演进 兼容现有 MPLS 硬件

七、总结

知识点 核心要点
SR-MPLS 用 IGP 扩展替代 LDP,简化 MPLS 控制面
SID Segment 标识符(= MPLS 标签)
Prefix-SID 全局标签,到 IP 前缀的最短路径
Adj-SID 本地标签,指定从特定接口转发
Segment List 有序 SID 序列编码完整路径
转发行为 Next/Continue/Push/Pop

八、思考

  1. SR-MPLS 相比传统 MPLS 省去了哪些协议?
  2. Prefix-SID 和 Adj-SID 有什么区别?各自的标签范围是什么?
  3. Segment List 在 MPLS 标签栈中如何编码路径信息?
  4. SR-MPLS 为什么被称为"无状态"转发?
  5. LDP 和 SR-MPLS 在标签分发方式上的根本区别是什么?

下篇预告:第184篇《SR-MPLS 与 LDP 的区别与演进》——深入对比 SR-MPLS 和 LDP 的标签分配、转发模式和网络演进路径。