第199篇:MPLS OAM:LSP Ping 与 Traceroute
关键词:MPLS OAM、LSP Ping、LSP Traceroute、RFC 8029、RFC 4949、故障定位、MPLS路径检测、标签交换路径、运维管理
一、引言
在第198篇中,我们深入学习了 MPLS QoS 的 EXP 标记继承与队列调度机制。然而,即使 QoS 设计再完美,如果 MPLS 标签交换路径(LSP, Label Switched Path)本身出现了故障——标签丢失、LSP 不通、路由环路——所有的 QoS 保障都将失去意义。
在传统 IP 网络中,Ping 和 Traceroute 是网络运维最常用的故障排查工具。但在 MPLS 网络中,普通 IP Ping 只能检测到 IP 层的连通性,无法检测 MPLS 标签转发的正确性。MPLS OAM(Operations, Administration, and Maintenance)通过 LSP Ping 和 LSP Traceroute 填补了这一空白。
二、MPLS OAM 概述
2.1 为什么需要 MPLS OAM
MPLS 网络与纯 IP 网络的根本差异在于:数据转发依赖标签而非 IP 地址。这带来了一个运维难题:
| 检测对象 | 传统 IP 工具 | MPLS OAM 工具 |
|---|---|---|
| IP 连通性 | Ping (ICMP Echo) | NQA ICMP Ping |
| IP 路径追踪 | Traceroute (ICMP TTL) | NQA Traceroute |
| LSP 连通性 | × 无法检测 | LSP Ping |
| LSP 路径追踪 | × 无法检测 | LSP Traceroute |
| LSP 标签状态 | × 无法检测 | 内置检测 |
| PW(伪线)状态 | × 无法检测 | PW Ping/Traceroute |
2.2 MPLS OAM 标准体系
| 标准 | 标题 | 核心能力 |
|---|---|---|
| RFC 4379 | MPLS LSP Ping/Trace | 初始 LSP Ping 和 Traceroute 规范 |
| RFC 8029 | MPLS LSP Ping (更新版) | 扩展 TE LSP 和 BGP-L3VPN 的检测 |
| RFC 4949 | MPLS OAM 框架 | OAM 总体框架与术语定义 |
| RFC 4872/4379 | PW OAM | 伪线(Pseudowire)OAM 检测 |
三、LSP Ping 原理
3.1 LSP Ping 工作机制
LSP Ping 使用特殊的 MPLS 标签栈和 ICMP 报文来检测 LSP 的连通性。其核心思想是:构造一个带有"IPv4-Internet-EXP"特殊标签值的 MPLS 报文,该标签值为 IMP (Implicit-Null, 值=3) 或 EXP (Explicit-Null, 值=0),当这个特殊标签到达某段 LSP 的终点时,该路由器不会执行正常的标签交换,而是将报文解封装后作为本地 ICMP 报文处理并回复。

3.2 LSP Ping 报文结构
LSP Ping 使用 MPLS TE 扩展的 IPv4/IPv6 ICMP 报文(Type 135/136 或 Type 155,称为 MPLS Echo Request/Reply):
| 字段 | 说明 |
|---|---|
| MPLS 标签栈 | 包含待检测 LSP 的所有标签,最内层为 Implicit Null(15) 或 Explicit Null(1) |
| IPv4/IPv6 Header | 目的 IP 为 255.255.255.255(IPv4)或 FF02::2(IPv6) |
| MPLS Echo Request | Type 135(IPv4)或 155(IPv6) |
| Downstream Label Mapping | 回复中携带下游标签映射信息 |
| Return Code | 检测结果:0=Success, 2=NoLabel, 4=Unknown TLV 等 |
3.3 LSP Ping 配置(华为 VRP)
# 在 PE-A 上执行 LSP Ping 检测
<PE-A> system-view
[PE-A] sysname PE-A
# 方式一:使用 NQA(Network Quality Analysis)
[PE-A] nqa test-uri lsp-ping test1
[PE-A-nqa-lsp-ping-test1] target-address ipv6 ff02::2
[PE-A-nqa-lsp-ping-test1] vpn-instance CUSTOMER-A-HUB
[PE-A-nqa-lsp-ping-test1] label-explicit-route 16010 imp-neighbor
[PE-A-nqa-lsp-ping-test1] frequency 10
[PE-A-nqa-lsp-ping-test1] probes 3
[PE-A-nqa-lsp-ping-test1] timeout 3000
[PE-A-nqa-lsp-ping-test1] quit
# 启动 NQA 检测
[PE-A] nqa test-uri lsp-ping test1 start
# 查看检测结果
<PE-A> display nqa test-uri lsp-ping test1 statistics
3.4 常见 Return Code 解析
| Return Code | 名称 | 含义 | 故障指向 |
|---|---|---|---|
| 0 | Success | LSP 正常,标签交换路径完整 | 无故障 |
| 2 | NoLabel | 下游没有对应的标签绑定 | 标签分发失败或 LDP 会话异常 |
| 3 | NoRoute | 无到目的 IP 的路由 | 路由缺失 |
| 4 | Unknown TLV | 无法识别的 TLV 字段 | 设备版本兼容性问题 |
| 5 | Unknown Type | 无法识别的 Echo 类型 | 协议版本不匹配 |
| 6 | Bad Depth | TTL 超限 | LSP 存在环路 |
四、LSP Traceroute 原理
4.1 LSP Traceroute 工作机制
LSP Traceroute 的工作方式与 IP Traceroute 类似,但操作对象是 MPLS 标签而非 IP TTL。它通过逐跳递减 MPLS 标签栈中的 TTL 值,迫使路径上的每一跳 P 路由器或 PE 路由器生成 MPLS Echo Reply,从而还原 LSP 的完整路径。

4.2 LSP Traceroute 配置(华为 VRP)
# 使用 NQA 执行 LSP Traceroute
[PE-A] nqa test-uri lsp-trace test2
[PE-A-nqa-lsp-trace-test2] target-address ipv6 ff02::2
[PE-A-nqa-lsp-trace-test2] vpn-instance CUSTOMER-A-HUB
[PE-A-nqa-lsp-trace-test2] label-explicit-route 16010 imp-neighbor
[PE-A-nqa-lsp-trace-test2] traceroute
[PE-A-nqa-lsp-trace-test2] frequency 30
[PE-A-nqa-lsp-trace-test2] max-hops 30
[PE-A-nqa-lsp-trace-test2] probes 3
[PE-A-nqa-lsp-trace-test2] timeout 3000
[PE-A-nqa-lsp-trace-test2] quit
# 启动检测
[PE-A] nqa test-uri lsp-trace test2 start
# 查看逐跳路径
<PE-A> display nqa test-uri lsp-trace test2 results
Hop 1: 10.1.1.1 (PE-A本地)
Hop 2: 10.1.12.2 (P-Router-1)
Hop 3: 10.1.23.1 (P-Router-2)
Hop 4: 10.1.34.2 (PE-B) # LSP终点
4.3 LSP Traceroute 输出解读
<PE-A> display nqa test-uri lsp-trace test2 results
LSP Trace Results:
Hop Address Label In Label Out Return Code
1 10.1.1.1 - - - 0(Success)
2 10.1.12.2 16010 12001 - 0(Success)
3 10.1.23.1 12001 13002 - 0(Success)
4 10.1.34.2 13002 IMP - 0(Success)
解读: - Hop 2:入口标签 16010 被 P-Router-1 交换为 12001 - Hop 3:标签 12001 被 P-Router-2 交换为 13002 - Hop 4:标签 13002 到达终点 PE-B,被弹出(IMP = Implicit-Null) - 所有 Return Code 均为 0,表明 LSP 路径完整且正常
五、LSP Ping/Traceroute 故障案例
5.1 案例:LSP Ping 返回 NoLabel(Return Code 2)
故障现象: 某 L3VPN 业务中,PE-A 到 PE-B 的 LSP Ping 在第三跳(P-Router-2)返回 Return Code 2(NoLabel)。
排查过程:
# LSP Traceroute 定位故障点
<PE-A> display nqa test-uri lsp-trace test2 results
Hop 1: 10.1.1.1 Return Code: 0 (Success)
Hop 2: 10.1.12.2 Return Code: 0 (Success)
Hop 3: 10.1.23.1 Return Code: 2 (NoLabel!) # 故障点
Hop 4: 10.1.34.2 Return Code: 2 (NoLabel) # 后续跳也失败
根因分析: P-Router-2 上到下一跳(PE-B)的 LDP 会话异常,导致没有学习到对应的入标签,无法交换标签。
# 在 P-Router-2 上检查 LDP 邻居
<P-Router-2> display mpls ldp peer
Peer: 10.1.34.1 # PE-B的接口地址
State: OperDown # LDP邻居Down!
TCP Connection: Down
解决方案:
# 检查 PE-B 接口 MPLS 配置
<PE-B> display current-configuration interface 100GE1/0/2
# 发现接口上未配置 mpls ldp
[PE-B] interface 100GE1/0/2
[PE-B-100GE1/0/2] mpls
[PE-B-100GE1/0/2] mpls ldp
[PE-B-100GE1/0/2] quit
# 验证 LDP 邻居恢复
<P-Router-2> display mpls ldp peer
Peer: 10.1.34.1
State: OperUp # 恢复!
# 重新执行 LSP Ping
<PE-A> nqa test-uri lsp-ping test1 start
# LSP Ping 恢复正常
5.2 案例:TE LSP Ping 失败但 IP Ping 正常
故障现象: 运营商部署了一条 TE 隧道(Tunnel10),IP Ping 到隧道终点正常,但 LSP Ping 失败。
排查过程:
# IP Ping 正常
<PE-A> ping -a 10.1.1.1 -b Tunnel10 20.1.2.1
# Success, 0% packet loss
# LSP Ping 失败
<PE-A> display nqa test-uri lsp-ping test1 statistics
Return Code: 2 (NoLabel)
根因分析: TE 隧道虽然建立成功(通过 RSVP-TE 信令),但隧道对应的 FEC(Forwarding Equivalence Class)没有与 LDP 标签绑定。TE 隧道和 LDP 是两套独立的标签分发机制,TE 隧道本身需要独立的标签分配(通过 RSVP-TE 信令),不能复用 LDP 标签。
解决方案:
# 检查 TE 隧道状态
<PE-A> display mpls te tunnel-interface interface Tunnel10
Tunnel10 is up
Tunnel State: Up
RSVP State: Up
FEC: 20.1.2.1/32
Label: 16384 # RSVP分配的标签
# LSP Ping 需要使用 TE 隧道的标签而非 LDP 标签
[PE-A] nqa test-uri lsp-ping te-test1
[PE-A-nqa-lsp-ping-te-test1] target-address ipv6 ff02::2
[PE-A-nqa-lsp-ping-te-test1] label-explicit-route 16384 imp-neighbor
[PE-A-nqa-lsp-ping-te-test1] router-id 20.1.2.1
[PE-A-nqa-lsp-ping-te-test1] frequency 10
[PE-A-nqa-lsp-ping-te-test1] probes 3
[PE-A-nqa-lsp-ping-te-test1] quit
[PE-A] nqa test-uri lsp-ping te-test1 start
# LSP Ping 恢复正常
六、PW(伪线)OAM
6.1 PW OAM 概述
对于 L2VPN(VPWS/VPLS)中的伪线(Pseudowire),除了 LSP Ping/Traceroute 检测底层 LSP 的连通性外,还需要专门针对 PW 本身进行检测:
| OAM 类型 | 检测对象 | 工具 |
|---|---|---|
| LSP OAM | PW 承载的底层 LSP | LSP Ping/Traceroute |
| PW OAM | PW 端到端连通性 | PW Ping/PW Traceroute |
| Data Plane OAM | PW 数据转发面 | BFD for PW |
6.2 PW Ping 配置
# PE-A 执行 PW Ping
[PE-A] nqa test-uri pw-ping pw-test1
[PE-A-nqa-pw-ping-pw-test1] target-address ipv4 255.255.255.255
[PE-A-nqa-pw-ping-pw-test1] pw-pw-id 100
[PE-A-nqa-pw-ping-pw-test1] pw-control-word
[PE-A-nqa-pw-ping-pw-test1] frequency 10
[PE-A-nqa-pw-ping-pw-test1] probes 3
[PE-A-nqa-pw-ping-pw-test1] timeout 3000
[PE-A-nqa-pw-ping-pw-test1] quit
[PE-A] nqa test-uri pw-ping pw-test1 start
<PE-A> display nqa test-uri pw-ping pw-test1 statistics
七、总结
MPLS OAM 是 MPLS 网络运维的必备工具。LSP Ping 验证 LSP 的端到端连通性,LSP Traceroute 逐跳定位 LSP 路径上的故障点。与普通的 IP Ping/Traceroute 不同,MPLS OAM 检测的是标签交换路径而非 IP 路由路径。
| OAM 工具 | 检测对象 | 核心机制 | 典型 Return Code |
|---|---|---|---|
| LSP Ping | LSP 端到端连通性 | MPLS Echo Request/Reply + IMP 标签 | 0=成功, 2=NoLabel |
| LSP Traceroute | LSP 逐跳路径 | TTL 递增逐跳探测 | 每跳返回标签映射信息 |
| PW Ping | 伪线端到端连通性 | PW ID + Control Word 检测 | PW 层 Return Code |
| PW Traceroute | 伪线逐跳路径 | PW 层面的 TTL 探测 | PW 每跳状态 |
思考题:
- LSP Ping 使用 IMP(Implicit-Null, 标签值=3)作为最内层标签。如果改用普通的 LDP 标签值(如 16010),LSP Ping 还能正常工作吗?为什么?
- 当 LSP Traceroute 在某跳返回 Return Code 2(NoLabel)时,故障一定发生在这一跳路由器上吗?还可能是什么原因导致?
- 在 L3VPN 场景中,为什么需要分别对底层 LSP(Tunnel LSP)和上层 VPN LSP 执行 LSP Ping?只检测其中一个够用吗?
下篇预告:第200篇《广域网链路质量监测:NQA 与 BFD》将介绍华为 NQA(Network Quality Analysis)框架和 BFD(Bidirectional Forwarding Detection)技术,实现广域网链路的毫秒级故障检测与服务质量量化评估。