第154篇:MPLS 标签分配协议——LDP 工作原理
关键词
LDP、标签分发协议、LDP 邻居、UDP 发现、TCP 会话、LIB、LFIB、标签映射
一、LDP 扮演的角色
上篇我们学习了 MPLS 的核心概念:标签、FEC、LSP。但有一个关键问题没有解决——标签是如何分配到每个 LSR 上的?
答案是:通过 LDP(Label Distribution Protocol,标签分发协议)。
LDP 是 MPLS 域内最基础的标签分发协议,它负责: 1. 发现 LDP 邻居——让 LSR 知道哪些邻居也支持 MPLS 2. 建立 LDP 会话——在邻居之间建立 TCP 连接,传递标签信息 3. 分发标签绑定——告诉邻居"某个 FEC 对应某个标签" 4. 维护标签信息库——持续更新标签和 FEC 的映射关系
补充:除 LDP 外,还有 RSVP-TE(用于 MPLS TE)、MP-BGP(用于 MPLS VPN)、Segment Routing 等标签分发方式。LDP 是 MPLS 中最基本、最广泛使用的协议。
二、LDP 邻居发现
2.1 发现机制
LDP 邻居发现分为两个层次:
1. 基本发现(链路本地)
──────────────────────────────────────
每台 LSR 通过 UDP 多播(224.0.0.2:646)
周期发送 LDP Hello 报文
目的 IP:224.0.0.2(所有路由器)
目的端口:646(LDP 知名端口)
收到 Hello 后,确认邻居存在
2. 扩展发现(目标 IP)
──────────────────────────────────────
用于非直连邻居的 LDP 会话
Hello 发送到指定的 IP 地址
应用场景:MPLS TE 的 Targeted LDP 会话
2.2 Hello 报文包含的信息
LDP Hello 报文内容:
- LSR ID(标识发送方)
- Label Space ID(标签空间,通常为 0)
- Hold Time(邻居保持时间,默认 15 秒)
- 可选参数:IPv4/IPv6 地址等
保持时间:如果在 Hold Time 内没有收到邻居的 Hello 报文,则认为该邻居 Down。默认 15 秒,如果连续 3 次没有收到(3 × Hello 间隔),则超时。
三、LDP 会话建立
3.1 建立过程(6 步)
步骤 1:LDP Hello(UDP 组播)
RTA ──────────── 224.0.0.2:646 ──────────── RTB
双方周期发送 Hello,感知到对方存在
│
步骤 2:TCP 连接建立
RTA ──────────── 发起 TCP :646 ──────────── RTB
由较大 LSR ID 的一方主动发起 TCP 连接
│
步骤 3:LDP Initialization
RTA ── Initialization 报文(协商参数)──▶ RTB
RTA ◀── Initialization 报文(协商参数)── RTB
│
步骤 4:KeepAlive 确认
RTA ────────── KeepAlive ────────▶ RTB
RTA ◀───────── KeepAlive ──────── RTB
→ 至此会话建立完成
│
步骤 5:标签映射(Address + Label Mapping)
RTA ◀══ Label Mapping (FEC→Label) ══ RTB
RTA ══ Label Mapping (FEC→Label) ◀══ RTB
│
步骤 6:定期 KeepAlive 维护
RTA ◀══════ KeepAlive ══════▶ RTB (默认 60 秒)
3.2 关键参数协商
Initialization 报文中协商的参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
| KeepAlive Time | 30 秒 | 会话保持时间,双方取较小值 |
| Hello Hold Time | 15 秒 | 邻居保持时间 |
| Label Advertisement Mode | DU | 分发模式(DU / DoD) |
| Label Retention Mode | Liberal | 保留模式(Liberal / Conservative) |
四、标签分发方式
4.1 DU(Downstream Unsolicited)——下游主动分发
RTA RTB
│ │
│ FEC=10.0.0.0/24 │
│ Label=100 ◀───────────│ RTB 主动将标签分配给 RTA
│ │
│ FEC=20.0.0.0/24 │
│ Label=200 ◀───────────│ RTB 主动将标签分配给 RTA
│ │
──── RTA 收到的 LIB ────
FEC Received From Label
10.0.0.0/24 RTB 100
20.0.0.0/24 RTB 200
- DU(默认模式):下游 LSR 不需要上游请求,主动为所有已知 FEC 分配标签并通告给邻居
- 优势:LSP 建立快,所有 FEC 的标签信息提前就绪
- 劣势:产生较多标签通告报文
4.2 DoD(Downstream on Demand)——按需分发
RTA RTB
│ │
│ Label Request │
│ FEC=10.0.0.0/24 ───────▶│ RTA 请求特定 FEC 的标签
│ │
│ Label Mapping │
│ FEC=10.0.0.0/24 ◀───────│ RTB 只分配请求的标签
│ Label=100 │
- DoD:上游 LSR 需要标签时才发送请求,下游 LSR 仅在收到请求后分配标签
- 优势:节省标签资源
- 劣势:LSP 建立延迟(需要先请求再等待标签)
4.3 标签保留模式
| 模式 | 行为 | 适用场景 |
|---|---|---|
| Liberal(自由模式,默认) | 保留所有收到的标签(即使不是最优下一跳) | 快速收敛,切换下一跳时不用重建 LSP |
| Conservative(保守模式) | 只保留最优下一跳的标签 | 标签资源受限的设备 |
五、LDP 的核心数据结构
5.1 LIB(Label Information Base)
LIB 是 LDP 维护的原始标签信息,记录从所有邻居收到的标签映射。
LIB(标签信息库): | FEC Neighbor Label | | | --- | --- | | 10.0.0.0/24 RTB 100 10.0.0.0/24 RTC 150 20.0.0.0/24 RTB 200 20.0.0.0/24 RTC 250 | ← 从 RTB 收到 ← 从 RTC 收到 |
5.2 LFIB(Label Forwarding Information Base)
LFIB 是真正用于转发的标签表,从 LIB 中选出一条最优路径。
LFIB(标签转发信息表): | In-Label Out-Label Out-Intf Next-Hop | | | --- | --- | | 300 100 GE0/0/1 10.1.1.2 400 - (pop) GE0/0/2 10.1.2.2 | ← 到 10.0.0.0/24 ← PHP |
从 LIB 到 LFIB 的流程:
LIB(所有邻居的标签)
│
│ IGP 路由表中选择最优下一跳
▼
为最优下一跳分配的标签确定 Out-Label
│
│ 本地分配入标签
▼
LFIB(转发表)
六、LDP 的标签分配过程示例
网络拓扑(所有链路运行 OSPF):
R1 ─── R2 ─── R3 ─── R4
│
Loopback0: 4.4.4.4/32
步骤:
1. OSPF 使所有路由器知道 4.4.4.4/32 的路由
2. LDP 在所有接口上 Hello → 发现邻居
3. LDP 建立 TCP 会话
4. 标签映射过程(以 4.4.4.4/32 为例):
R4:为 4.4.4.4/32 分配标签(隐式空标签/implicit-null)
│
│ Label Mapping: FEC=4.4.4.4/32, Label=implicit-null
▼
R3:收到 R4 的标签
为 4.4.4.4/32 分配本地标签 200
│
│ Label Mapping: FEC=4.4.4.4/32, Label=200
▼
R2:收到 R3 的标签
为 4.4.4.4/32 分配本地标签 200 → PHP(次末跳弹出)
│
│ Label Mapping: FEC=4.4.4.4/32, Label=300
▼
R1:收到 R2 的标签
加入 LIB
最终 LFIB:
R1:4.4.4.4/32 → push 300 → R2
R2:入标签 300 → swap 200 → R3
R3:入标签 200 → pop → R4
七、LDP 的收敛
7.1 LDP 与 IGP 的联动
LDP 的收敛依赖于 IGP(OSPF/ISIS)的收敛: - IGP 路由收敛 → LDP 重新计算下一跳 → 更新 LIB/LFIB - LDP-IGP 同步:当链路恢复时,LDP 会等待标签分发完成后再通知 IGP 启动邻接,避免标签未就绪前转发黑洞
7.2 FRR(快速重路由)
MPLS 环境下的 FRR 依赖于 LDP 的 Liberal 标签保留模式: - 即使备用路径不是最优路径,LDP 也保留了备用路径的标签 - 主路径故障时,直接切换到备用路径的标签,无需重新计算
八、总结
| 知识点 | 核心要点 |
|---|---|
| LDP 作用 | 在 LSR 之间分发标签映射,自动建立 LSP |
| 邻居发现 | UDP 组播到 224.0.0.2:646 |
| 会话建立 | TCP 连接(646 端口)+ Initialization + KeepAlive |
| 标签分发模式 | DU(主动分发,默认)和 DoD(按需分发) |
| 标签保留模式 | Liberal(保留所有)和 Conservative(仅保留最优) |
| LIB vs LFIB | LIB 存所有邻居的标签;LFIB 存最优路径的标签 |
九、思考
- LDP 是如何发现邻居的?使用什么协议和端口?
- DU 和 DoD 两种标签分发模式的区别是什么?
- Liberal 标签保留模式为什么有利于快速收敛?
- LIB 和 LFIB 之间的关系是什么?
- LDP 会话建立过程中,Initialization 报文协商了哪些参数?
下篇预告:第155篇《LDP 邻居建立与标签分发方式(DU/DoD)》——深入探讨 LDP 会话的每种状态,以及 DU 和 DoD 模式下的标签分发细节。