第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 表、源路由)

SR-MPLS 与 LDP 核心差异 - 图示

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 故障恢复对比

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 空间

思考

  1. 为什么 LDP 采用逐跳标签分发而不是 Head-End 一次性计算?这种设计在当时的网络环境下有什么合理性?
  2. LDP 与 SR-MPLS 双栈共存时,IGP 如何同时通告 LDP-IGP 关联和 SR-TE TLV?两者是否可能产生路由环路?
  3. 从 LDP 迁移到 SR-MPLS 时,L3VPN 的 VRF 标签(VRF-Label)是否会受到影响?迁移过程中如何保证 VPN 业务不中断?

下篇预告:第185篇:SR-BE(Best Effort)与 SR-TE(Traffic Engineering)