第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 报文处理并回复。

LSP Ping 工作机制 - 图示

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 的完整路径。

LSP Traceroute 工作机制 - 图示

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 每跳状态

思考题:

  1. LSP Ping 使用 IMP(Implicit-Null, 标签值=3)作为最内层标签。如果改用普通的 LDP 标签值(如 16010),LSP Ping 还能正常工作吗?为什么?
  2. 当 LSP Traceroute 在某跳返回 Return Code 2(NoLabel)时,故障一定发生在这一跳路由器上吗?还可能是什么原因导致?
  3. 在 L3VPN 场景中,为什么需要分别对底层 LSP(Tunnel LSP)和上层 VPN LSP 执行 LSP Ping?只检测其中一个够用吗?

下篇预告:第200篇《广域网链路质量监测:NQA 与 BFD》将介绍华为 NQA(Network Quality Analysis)框架和 BFD(Bidirectional Forwarding Detection)技术,实现广域网链路的毫秒级故障检测与服务质量量化评估。