Wireshark MPLS-TP帧格式:详细图解
MPLS-TP(Multiprotocol Label Switching - Transport Profile,多协议标签交换-传输配置文件)作为面向连接的分组传输技术,在电信网络中广泛用于提供可靠的业务承载。本文基于Wireshark源码解析MPLS-TP帧结构,帮助网络工程师快速定位协议字段与故障排查。
MPLS-TP协议概述
MPLS-TP融合了MPLS的标签交换能力与SDH/SONET的传输特性,支持端到端OAM(Operation, Administration, and Maintenance,操作、管理和维护)功能。Wireshark通过epan/模块实现协议解析,其中epan/dissectors/目录包含核心解码逻辑。
关键技术特性
- 连接导向:基于双向点对点隧道
- OAM机制:包含CV(Continuity Check,连续性检查)、FFD(Fast Failure Detection,快速故障检测)等
- 保护倒换:支持线性1+1、1:1等保护方式
- 管理平面:采用GMPLS(Generalized MPLS,通用多协议标签交换)控制平面
帧结构详解
MPLS-TP帧基于MPLS标签栈扩展,在传统MPLS头部基础上增加了传输层特定字段。以下为Wireshark解析的帧格式示意图(逻辑结构):
基础标签栈结构
每个MPLS标签字段(4字节)包含:
- Label(标签值):20位
- EXP(实验位):3位
- S(栈底指示):1位
- TTL(生存时间):8位
// MPLS标签结构示例([epan/dissectors/packet-mpls.c](https://link.gitcode.com/i/ea7ea622e2aa4755149fa148c5922310))
typedef struct {
guint32 label:20; /* Label value */
guint32 exp:3; /* Experimental bits */
guint32 s:1; /* Bottom of stack */
guint32 ttl:8; /* Time to live */
} mpls_label_t;
MPLS-TP扩展字段
在基础MPLS标签后,TP帧增加了:
- TC(Transport Container,传输容器):携带业务数据
- TTI(Trail Trace Identifier,踪迹跟踪标识):用于连接识别
- PM(Performance Monitoring,性能监控):包含丢包、时延测量字段
完整帧格式示意图
Wireshark解码实现
Wireshark通过packet-mpls.c实现MPLS-TP解析,核心函数包括:
协议注册
// 协议注册入口([epan/dissectors/packet-mpls.c](https://link.gitcode.com/i/ea7ea622e2aa4755149fa148c5922310))
void proto_register_mpls(void) {
static hf_register_info hf[] = {
{ &hf_mpls_label,
{ "Label", "mpls.label", FT_UINT32, BASE_DEC, NULL, 0xFFFFF000,
NULL, HFILL }},
{ &hf_mpls_exp,
{ "EXP", "mpls.exp", FT_UINT32, BASE_DEC, NULL, 0x00000E00,
NULL, HFILL }},
// TP特定字段注册...
};
// 协议树注册
proto_mpls = proto_register_protocol("MultiProtocol Label Switching", "MPLS", "mpls");
register_dissector("mpls", dissect_mpls, proto_mpls);
}
帧解析流程
- 提取标签栈:
dissect_mpls()函数解析标签字段 - 判断TP类型:通过标签值范围(如16000-16031为保留TP标签)识别
- 解码OAM帧:调用
dissect_mpls_oam()处理OAM特定字段 - 传递负载:根据Next Header字段调用对应上层协议解析器
实际抓包示例
以下为MPLS-TP CW(Connectivity Verification,连接验证)帧的Wireshark解析截图(示意):
字段解析说明
| 偏移量 | 字段 | 长度 | 说明 |
|---|---|---|---|
| 0-3 | MPLS Label | 4字节 | 标签值=16001(TP隧道标签) |
| 4-7 | MPLS OAM Label | 4字节 | 标签值=13(OAM标签) |
| 8-11 | TTL | 1字节 | 生存时间=255 |
| 12-15 | TTI | 4字节 | 踪迹标识=0x00010203 |
相关工具与资源
- 官方文档:doc/wsug_src/(Wireshark用户指南)
- 协议测试:test/suite_dissectors/(包含MPLS解码测试用例)
- 抓包示例:test/captures/(可用于实验的PCAP文件)
总结
MPLS-TP作为电信级分组传输技术,其帧结构通过扩展MPLS标签栈实现传输层功能。Wireshark通过epan/dissectors/packet-mpls.c提供完整解析能力,支持从标签栈解析到OAM字段解码的全流程分析。结合抓包示例与源码阅读,可深入理解协议实现细节。
下一步学习建议
- 分析test/suite_dissectors/mpls_tests.lua中的测试用例
- 研究epan/dissectors/packet-mpls-tp.c(如有)的TP特定解码逻辑
- 使用editcap工具手动构造MPLS-TP测试帧
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



