第155篇:LDP 邻居建立与标签分发方式(DU/DoD)
关键词
LDP 会话、LDP 状态机、DU 模式、DoD 模式、标签通告、平台标签空间、接口标签空间
一、LDP 邻居建立详解
1.1 LDP 的两种发现机制
| 发现类型 | 通信方式 | 作用范围 | 典型场景 |
|---|---|---|---|
| 基本发现 | UDP 组播 224.0.0.2:646 | 直接相连的链路 | 直连邻居的 LDP 会话 |
| 扩展发现 | UDP 单播到特定 IP | 非直连邻居 | MPLS TE 的 Targeted LDP 会话 |
1.2 基本发现的工作原理
RTA 的接口 GE0/0/0 (10.1.1.1/24) ─── RTB 的接口 GE0/0/0 (10.1.1.2/24)
RTA 周期发送 LDP Hello(每 5 秒):
源 IP = 10.1.1.1
目的 IP = 224.0.0.2
源端口 = 646(UDP)或随机端口
目的端口 = 646
LDP Hello 内容:
- LSR ID: 1.1.1.1
- Label Space ID: 0
- Hold Time: 15 秒
- 传输地址: 1.1.1.1(用于 TCP 连接的目标 IP)
RTB 同时也在发送 Hello 报文:
源 IP = 10.1.1.2
LSR ID: 2.2.2.2
Transport Address: 2.2.2.2
传输地址(Transport Address) 是关键 TLV。TCP 连接的目标 IP 通常是 Loopback 地址,而非直连接口的 IP。
二、LDP 会话状态机
2.1 状态转换
┌──────────────┐
│ Non Existent │ ← 初始状态
└──────┬───────┘
│ 收到 Hello(发现邻居)
┌──────▼───────┐
│ Initialized │ ← 准备建立 TCP 连接
└──────┬───────┘
│ TCP 连接建立 + 发 Initialization 报文
┌──────▼───────┐
│ OpenRecv │ ← 收到对端的 Initialization
└──────┬───────┘
│ 参数协商通过
┌──────▼───────┐
│ OpenSent │ ← 等待对端确认
└──────┬───────┘
│ 互发 KeepAlive 确认
┌──────▼───────┐
│ Operational │ ← 会话建立成功,可以分发标签
└──────────────┘
2.2 各状态的触发条件
| 当前状态 | 事件 | 下一个状态 |
|---|---|---|
| Non Existent | 收到 LDP Hello | Initialized |
| Non Existent | 收到 TCP 连接请求 | Initialized(发起方) |
| Initialized | TCP 连接建立后发送 Initialization 报文 | OpenSent |
| Initialized | 收到对端发送的 Initialization 报文 | OpenRecv |
| OpenSent | 收到对端发送的 Initialization 报文 | OpenRecv |
| OpenRecv | 参数协商成功,发送 KeepAlive | Operational |
| OpenRecv | 参数协商失败,发送 Notification 并断开 | Non Existent |
| Operational | 收到 KeepAlive 超时或 Notification | Non Existent |
三、DU 模式(下游主动分发)
3.1 工作流程
DU(Downstream Unsolicited)模式下,下游 LSR 不需要上游请求,主动为所有已知 FEC 分发标签。
RTA(上游) RTB(下游)
│ │
│ IGP 收敛后,RTB 知道 │
│ 10.0.0.0/24 可通过自己到达 │
│ │
│ Label Mapping │
│ FEC: 10.0.0.0/24 ◀────│ RTB 主动推送
│ Label: 100 │
│ │
│ Label Mapping │
│ FEC: 20.0.0.0/24 ◀────│ RTB 主动推送
│ Label: 200 │
│ │
│ Label Mapping │
│ FEC: 30.0.0.0/24 ◀────│ RTB 主动推送
│ Label: 300 │
│ │
3.2 DU 的特点
优点: - LSP 建立快——IGP 收敛后,LDP 即刻分发标签,无需等待请求 - 所有 FEC 的标签提前就绪——转发时不需要同步等待 - 切换延迟低——Liberal 保留模式下,备用路径的标签也早已就绪
缺点: - 标签费——即使某些 FEC 从未被转发,也会分配标签 - 控制面负载高——每增加一个 FEC,每个邻居就会收到一个标签映射 - 网络规模敏感——在大规模网络中,FEC 数量多,标签通告量大
3.3 适用场景
- 大多数 MPLS 骨干网络
- 需要快速收敛的场景
- 标签资源充足的设备
四、DoD 模式(下游按需分发)
4.1 工作流程
DoD(Downstream on Demand)模式下,上游 LSR 需要标签时才发送请求,下游只在请求到达后才分配。
RTA(上游) RTB(下游)
│ │
│ Label Request │
│ FEC: 10.0.0.0/24 ─────▶│ RTA 发出请求
│ │
│ Label Mapping │
│ FEC: 10.0.0.0/24 ◀────│ RTB 响应
│ Label: 100 │
│ │
│ Label Request │
│ FEC: 20.0.0.0/24 ─────▶│ RTA 针对另一个 FEC 请求
│ │
│ Label Mapping │
│ FEC: 20.0.0.0/24 ◀────│
│ Label: 200 │
│ │
4.2 DoD 的特点
优点: - 节省标签资源——只分配实际需要的 FEC - 控制面负载低——减少不必要的标签通告
缺点: - LSP 建立延迟——转发数据前需要先请求并等待标签 - 切换时增加延迟——切换到备用路径时,如果备用路径标签未就绪,需先请求
4.3 适用场景
- 路由器标签资源有限
- FEC 数量远大于实际转发需求
- 特殊的 TE 实现场景
五、DU 和 DoD 的对比
| 对比维度 | DU | DoD |
|---|---|---|
| 标签分发时机 | 只要 LSR 知道了 FEC 就分发 | 收到请求后才分发 |
| 控制面负载 | 较高 | 较低 |
| 标签资源消耗 | 较高 | 较低 |
| LSP 建立速度 | 快 | 有延迟 |
| 故障切换速度 | 快(标签已就绪) | 慢(需要请求新标签) |
| 默认配置 | 华为/Cisco/Juniper 默认 DU | 极少使用 |
六、标签空间(Label Space)
6.1 平台标签空间(Per-Platform Label Space)
- 整台路由器使用一个统一的标签池
- 不同接口上为同一 FEC 分配的标签相同
- 默认模式,配置简单
- LDP 默认使用平台标签空间
6.2 接口标签空间(Per-Interface Label Space)
- 每个接口独立分配标签
- 不同接口为同一 FEC 可以分配不同标签
- 用于 Frame Relay 等特殊场景
- 目前在主流网络中几乎不再使用
平台标签空间(默认):
全局标签池 10.0.0.0/24 → Label 100
接口标签空间:
GE0/0/0 标签池 10.0.0.0/24 → Label 100 GE0/0/1 标签池 10.0.0.0/24 → Label 200
6.3 标签空间的选择
| 标签空间 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 平台标签空间 | 配置简单,标签一致 | 大型网络可能需要做 PHP | 大多数网络 |
| 接口标签空间 | 标签粒度更低 | 维护复杂 | Frame Relay 等特殊链路 |
七、配置示例(华为设备)
7.1 基本 LDP 配置
# 全局使能 MPLS 和 LDP
mpls lsr-id 1.1.1.1 # LSR ID,通常是 Loopback 地址
mpls # 全局使能 MPLS
mpls ldp # 全局使能 LDP
!
# 接口使能 MPLS 和 LDP
interface GigabitEthernet0/0/0
mpls # 接口使能 MPLS
mpls ldp # 接口使能 LDP
!
interface GigabitEthernet0/0/1
mpls
mpls ldp
7.2 验证命令
# 查看 LDP 邻居
display mpls ldp session # 会话状态
display mpls ldp peer # 邻居信息
# 查看 LDP 标签信息
display mpls ldp label # LDP 标签绑定
display mpls lsp # MPLS LSP(包含 LDP 建立的)
# 查看 LDP 运行状态
display mpls ldp parameter # LDP 参数
display mpls ldp statistics # LDP 统计信息
7.3 输出解读示例
<HUAWEI> display mpls ldp session
LDP Session(s) in Public Network
Codes: LAM(Label Advertisement Mode), SsnAge Unit(DD:HH:MM)
----------------------------------------------------------------------
Peer-ID Status LAM SsnRole SsnAge KASent/Rcv
----------------------------------------------------------------------
2.2.2.2:0 Operational DU Passive 000:00:12 34/35
3.3.3.3:0 Operational DU Active 000:00:10 28/29
----------------------------------------------------------------------
解读: - Peer-ID:邻居 LSR ID(2.2.2.2:0 = LSR ID + 标签空间 0) - Status:Operational 表示会话正常 - LAM:标签通告模式(DU) - SsnRole:Active 表示主动发起 TCP 连接;Passive 表示被动接受 - KASent/Rcv:KeepAlive 发送/接收计数
八、常见排错场景
8.1 LDP 会话无法建立
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 未收到 Hello | MPLS/LDP 接口未使能 | display mpls ldp interface |
| 无法建立 TCP | 传输地址不可达 | ping 对端 LSR ID |
| Initialization 失败 | 参数协商不匹配 | display mpls ldp session 查看状态 |
| 频繁 Down | KeepAlive 超时 | 检查链路抖动或带宽过高 |
8.2 传输地址不可达
最常见的问题:LDP 使用 LSR ID(通常是 Loopback 地址) 建立 TCP 连接。如果 Loopback 地址之间的路由不通,LDP 会话就无法建立。
# 确认 LSR ID 与传输地址
display mpls ldp parameter | include Transport
# 确认 Loopback 地址路由可达
ping -a 1.1.1.1 2.2.2.2
九、总结
| 知识点 | 核心要点 |
|---|---|
| 基本发现 | UDP 组播 224.0.0.2:646,直连链路发现邻居 |
| 扩展发现 | UDP 单播,用于非直连 Targeted LDP |
| 状态机 | Non Existent → Initialized → OpenRecv → OpenSent → Operational |
| DU | 下游主动分发标签,快速但资源消耗高 |
| DoD | 按需请求标签,节省资源但建路慢 |
| 标签空间 | 平台(Per-platform)或接口(Per-interface) |
| 传输地址 | LDP TCP 连接的目标地址,通常是 LSR ID |
十、思考
- LDP 的基本发现和扩展发现分别用于什么场景?
- LDP 会话建立过程中,Initialization 报文协商了哪些参数?
- DU 和 DoD 模式的根本区别是什么?各有什么优缺点?
- 平台标签空间和接口标签空间的区别是什么?
- 如果 LDP 会话一直处于 Initialized 状态无法进入 Operational,可能是什么原因?
下篇预告:第156篇《MPLS 转发过程——标签压入、交换、弹出》——结合数据面,详细拆解一个 IP 包在 MPLS 域内如何被逐跳标签转发的完整过程。