第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 |
八、思考
- SR-MPLS 相比传统 MPLS 省去了哪些协议?
- Prefix-SID 和 Adj-SID 有什么区别?各自的标签范围是什么?
- Segment List 在 MPLS 标签栈中如何编码路径信息?
- SR-MPLS 为什么被称为"无状态"转发?
- LDP 和 SR-MPLS 在标签分发方式上的根本区别是什么?
下篇预告:第184篇《SR-MPLS 与 LDP 的区别与演进》——深入对比 SR-MPLS 和 LDP 的标签分配、转发模式和网络演进路径。