第184篇:SR-MPLS 与 LDP 的区别与演进
关键词:LDP、SR-MPLS、标签分发、状态机、协议简化、LSP、演进路径
一、引言
LDP(Label Distribution Protocol,标签分发协议)是 MPLS 网络中最基础的标签分发协议,自 1999 年 RFC 3036 标准化以来,支撑了全球数百万条 LSP(Label Switched Path)的运行。然而,LDP 的逐跳标签分发模式带来了复杂的状态维护和故障恢复机制。SR-MPLS 作为新一代 MPLS 控制面,通过源路由架构消除了 LDP 的诸多局限性。理解两者的差异,是规划 MPLS 网络演进的前提。
二、核心概念
2.1 LDP 标签分发机制
LDP 的核心是"逐跳分发、逐跳组装":
| 步骤 | 说明 |
|---|---|
| 1. FEC 分配 | 每个 LSR 为本地 FEC(Forwarding Equivalence Class)分配标签 |
| 2. 标签映射 | 通过 Label Mapping 消息向邻居通告标签绑定 |
| 3. 标签组装 | 从终点到起点逐跳组装 LSP 的标签转发路径 |
| 4. 状态维护 | 每个 LSR 为每条 LSP 维护本地和转发表项 |
2.2 SR-MPLS 与 LDP 核心差异
| 维度 | LDP | SR-MPLS |
|---|---|---|
| 路径计算 | 每跳独立,依赖 IGP 最短路径 | Head-End 集中计算完整路径 |
| 标签分配 | 分布式,每 LSR 为每 FEC 分配标签 | 集中式,Node-SID 全局分配 |
| 状态复杂度 | LSP 数 × LSR 数 = O(N²) | 仅 Node-SID 数 = O(N) |
| 信令协议 | LDP 独立协议 | 复用 IGP(OSPF/IS-IS 扩展) |
| 故障恢复 | FRR(快倒)、Rerouting(慢) | Head-End 重新计算 Segment List |
| TE 支持 | 需叠加 RSVP-TE | 原生 TE(SR-TE) |
| 运维复杂度 | 高(逐设备排查、状态同步) | 低(全局 SID 表、源路由) |

2.3 LDP 状态机模型
| 状态 | 说明 | 触发事件 |
|---|---|---|
| Non-Existent | LSP 不存在 | 初始状态 |
| Label-Received | 收到下游标签映射 | 下游发来 Label Mapping |
| Label-Stored | 标签已存储,等待上游 | 本节点已分配标签 |
| Operational | LSP 完全建立 | 上下游标签均就绪 |
| Label-Withdrawing | 标签撤销中 | 收到 Label Withdraw 消息 |
2.4 LDP 与 SR-MPLS 共存模式
| 共存阶段 | LDP 状态 | SR-MPLS 状态 | 转发平面 |
|---|---|---|---|
| 阶段1:引入 | 运行中 | 部署 SID 分配 | LDP 为主 |
| 阶段2:并行 | 运行中 | 全功能运行 | LDP + SR-MPLS 双栈 |
| 阶段3:迁移 | 仅关键业务 | 主流业务 | SR-MPLS 为主 |
| 阶段4:退役 | 关闭 | 全面接管 | 纯 SR-MPLS |
三、技术细节
3.1 LSP 状态爆炸问题分析
| 网络规模 | 路由器数量 | LSP 数量(全互联) | 每 LSR 维护的状态 |
|---|---|---|---|
| 小型 | 10 | 90 | 约 9 条/LSR |
| 中型 | 50 | 2,450 | 约 49 条/LSR |
| 大型 | 200 | 39,800 | 约 199 条/LSR |
| 超大型 | 1,000 | 999,000 | 约 999 条/LSR |
SR-MPLS 的优势在于:每 LSR 仅需维护全网 Node-SID 表(O(N)),而非每条 LSP 的转发表项(O(N²))。
3.2 LDP 与 SR-MPLS 故障恢复对比

3.3 LDP FRR(Fast Reroute)与 SR-MPLS 保护
| 保护机制 | LDP FRR | SR-MPLS 保护 |
|---|---|---|
| 本地保护 | 配置绕道 LSP(bypass) | 使用 PP-Adj-SID(Pre-Planned Adj-SID) |
| 全局保护 | 无(依赖 Head-End Reroute) | Head-End 重新计算 Segment List |
| 配置复杂度 | 高(逐链路配置 bypass LSP) | 低(Head-End 策略自动生成备份路径) |
| 保护范围 | 单链路/单节点 | 任意拓扑变化的全局重计算 |
3.4 RSVP-TE 与 SR-TE 对比
| 维度 | RSVP-TE | SR-TE |
|---|---|---|
| 信令方式 | 逐跳信令(Resv/Path 消息) | Head-End 压入 TE Segment List |
| 资源预留 | 带宽预留(Bandwidth) | 约束最短路径(CSPF)计算 |
| 状态维护 | 每 LSP 每 LSR 维护 RSVP 状态 | 无中间状态 |
| 配置复杂度 | 高(显式路径 + 保护 LSP) | 低(Color + Endpoint 策略) |
| 扩展性 | 受限于信令状态数 | 仅受 Head-End 策略数限制 |
四、实战配置/案例分析
4.1 LDP 基础配置
# ========== LDP配置 ==========
< Huawei > system-view
[ Huawei ] sysname LDP-RouterA
# --- MPLS全局使能 ---
[ LDP-RouterA ] mpls
[ LDP-RouterA ] mpls lsr-id 1.1.1.1
# --- 接口MPLS ---
[ LDP-RouterA ] interface 100ge 1/0/1
[ LDP-RouterA-100GE1/0/1 ] ip address 10.0.0.1 30
[ LDP-RouterA-100GE1/0/1 ] mpls
[ LDP-RouterA-100GE1/0/1 ] mpls ldp
# --- LDP协议 ---
[ LDP-RouterA ] mpls ldp
[ LDP-RouterA-ldp ] verbose-traceback enable
[ LDP-RouterA-ldp ] interface Range 100-GigabitEthernet 1 0 0 1
# --- LDP显式路由(可选) ---
[ LDP-RouterA-ldp ] explicit-route host 10.0.0.5 host 10.0.1.1
4.2 LDP 与 SR-MPLS 双栈共存配置
# ========== LDP + SR-MPLS 双栈配置 ==========
[ Huawei ] sysname Dual-Stack-RouterA
# --- LDP配置 ---
[ Dual-Stack-RouterA ] mpls
[ Dual-Stack-RouterA ] mpls lsr-id 1.1.1.1
[ Dual-Stack-RouterA ] mpls ldp
[ Dual-Stack-RouterA-ldp ] interface Range 100-GigabitEthernet 1 0 0 1
# --- SR-MPLS配置 ---
[ Dual-Stack-RouterA ] segment-routing
[ Dual-Stack-RouterA-segment-routing ] global-block 16 240
[ Dual-Stack-RouterA-segment-routing ] local-block 16000 16999
[ Dual-Stack-RouterA ] segment-routing node-locator
[ Dual-Stack-RouterA-segment-routing-node-locator ] index 16
# --- 接口同时启用MPLS和SR ---
[ Dual-Stack-RouterA ] interface 100ge 1/0/1
[ Dual-Stack-RouterA-100GE1/0/1 ] mpls
[ Dual-Stack-RouterA-100GE1/0/1 ] mpls ldp
[ Dual-Stack-RouterA-100GE1/0/1 ] segment-routing mpls
[ Dual-Stack-RouterA-100GE1/0/1 ] segment-routing mpls adj-sid 16001
# --- IS-IS同时通告LDP和SR ---
[ Dual-Stack-RouterA ] isis 1
[ Dual-Stack-RouterA-isis1 ] cost-style wide
[ Dual-Stack-RouterA-isis1 ] mpls ldp-igp auto
# LDP-IGP自动关联
[ Dual-Stack-RouterA-isis1 ] segment-routing traffic-eng
[ Dual-Stack-RouterA-isis1 ] sr-mpls
4.3 故障排查:LDP 与 SR-MPLS 标签冲突
故障场景:LDP 与 SR-MPLS 双栈运行后,部分 L3VPN 业务异常,标签栈中出现冲突。
# Step 1: 检查LDP标签分配
< Dual-Stack-RouterA > display mpls ldp label-table
FEC: 3.3.3.3/32
Incoming Label: 17 (从RouterC learned)
Outgoing Label: 18 (到RouterB)
# Step 2: 检查SR Node-SID
< Dual-Stack-RouterA > display segment-routing node-sid
Node-SID: 17 → RouterC (3.3.3.3)
# LDP分配的标签17与SR Node-SID 17冲突!
# Step 3: 分析冲突原因
# LDP动态分配标签(自由分配模式)可能选中与SR Node-SID相同的值
# 导致SR转发和LDP转发混淆
# Step 4: 解决方案 - 调整LDP标签范围
[ Dual-Stack-RouterA ] mpls ldp
[ Dual-Stack-RouterA-ldp ] lib label-range 1000 15999
# LDP标签范围避开SR Node-SID(16-240)和Adj-SID(16000-16999)
# Step 5: 验证
< Dual-Stack-RouterA > display mpls ldp label-table
FEC: 3.3.3.3/32
Incoming Label: 1002 (新的LDP标签)
# LDP标签已调整为1000+范围,不再冲突
五、总结
| 项目 | 要点 |
|---|---|
| LDP 局限 | 逐跳状态维护导致 O(N²) 复杂度,需独立信令协议 |
| SR-MPLS 优势 | 源路由架构、无状态转发、IGP 扩展分发 SID |
| 故障恢复 | LDP 依赖 FRR 或逐跳重建,SR-MPLS 由 Head-End 全局重计算 |
| TE 能力 | LDP 需叠加 RSVP-TE,SR-MPLS 原生支持 SR-TE |
| 演进策略 | LDP + SR-MPLS 双栈共存 → 逐步迁移 → LDP 最终退役 |
| 标签冲突 | 双栈模式下需隔离 LDP 标签范围与 SR SID 空间 |
思考
- 为什么 LDP 采用逐跳标签分发而不是 Head-End 一次性计算?这种设计在当时的网络环境下有什么合理性?
- LDP 与 SR-MPLS 双栈共存时,IGP 如何同时通告 LDP-IGP 关联和 SR-TE TLV?两者是否可能产生路由环路?
- 从 LDP 迁移到 SR-MPLS 时,L3VPN 的 VRF 标签(VRF-Label)是否会受到影响?迁移过程中如何保证 VPN 业务不中断?
下篇预告:第185篇:SR-BE(Best Effort)与 SR-TE(Traffic Engineering)