Wireshark MPLS-TP帧格式:详细图解

Wireshark MPLS-TP帧格式:详细图解

【免费下载链接】wireshark Read-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. ⚠️ GitHub won't let us disable pull requests. ⚠️ THEY WILL BE IGNORED HERE ⚠️ Upload them at GitLab instead. 【免费下载链接】wireshark 项目地址: https://gitcode.com/gh_mirrors/wi/wireshark

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,性能监控):包含丢包、时延测量字段

完整帧格式示意图

mermaid

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);
}

帧解析流程

  1. 提取标签栈:dissect_mpls()函数解析标签字段
  2. 判断TP类型:通过标签值范围(如16000-16031为保留TP标签)识别
  3. 解码OAM帧:调用dissect_mpls_oam()处理OAM特定字段
  4. 传递负载:根据Next Header字段调用对应上层协议解析器

实际抓包示例

以下为MPLS-TP CW(Connectivity Verification,连接验证)帧的Wireshark解析截图(示意):

字段解析说明

偏移量字段长度说明
0-3MPLS Label4字节标签值=16001(TP隧道标签)
4-7MPLS OAM Label4字节标签值=13(OAM标签)
8-11TTL1字节生存时间=255
12-15TTI4字节踪迹标识=0x00010203

相关工具与资源

总结

MPLS-TP作为电信级分组传输技术,其帧结构通过扩展MPLS标签栈实现传输层功能。Wireshark通过epan/dissectors/packet-mpls.c提供完整解析能力,支持从标签栈解析到OAM字段解码的全流程分析。结合抓包示例与源码阅读,可深入理解协议实现细节。

下一步学习建议

  1. 分析test/suite_dissectors/mpls_tests.lua中的测试用例
  2. 研究epan/dissectors/packet-mpls-tp.c(如有)的TP特定解码逻辑
  3. 使用editcap工具手动构造MPLS-TP测试帧

【免费下载链接】wireshark Read-only mirror of Wireshark's Git repository at https://gitlab.com/wireshark/wireshark. ⚠️ GitHub won't let us disable pull requests. ⚠️ THEY WILL BE IGNORED HERE ⚠️ Upload them at GitLab instead. 【免费下载链接】wireshark 项目地址: https://gitcode.com/gh_mirrors/wi/wireshark

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值