告别抓瞎!用Wireshark实战解析1905协议数据帧(从以太帧到CMDU)

张开发
2026/4/16 14:34:24 15 分钟阅读

分享文章

告别抓瞎!用Wireshark实战解析1905协议数据帧(从以太帧到CMDU)
从零破解1905协议Wireshark抓包与CMDU深度解析实战指南当你第一次在Wireshark中看到那些以01-80-C2开头的神秘MAC地址和0x893A类型字段时是否感到既兴奋又困惑作为智能家居和多媒体网络的核心协议1905协议的数据帧里藏着整个家庭网络的拓扑秘密。本文将带你像侦探破案一样逐层拆解这些数据包的真实含义。1. 以太帧1905协议的数据信封任何协议分析都要从最基础的数据载体开始。1905协议运行在以太网之上理解以太帧结构就像学会拆信封一样重要。现代网络设备每秒处理成千上万个以太帧但只有特定格式的才会被1905协议处理。典型的以太帧头部包含三个关键部分6字节目的MAC地址决定数据包去向的收件人地址6字节源MAC地址标记发送设备的寄件人地址2字节类型字段相当于信封上的信件类型标签1905协议主要使用两种特殊组播地址01-80-C2-00-00-0E // IEEE 802.1桥接发现消息 01-80-C2-00-00-13 // 1905拓扑发现与通知消息在Wireshark过滤器中输入eth.dst 01:80:c2:00:00:13可以立即锁定所有1905协议通信。这个技巧能帮你在海量数据包中快速找到目标。2. 协议指纹识别1905流量的关键特征不是所有发往01-80-C2-00-00-13的数据包都属于1905协议。就像快递员会检查包裹标签一样我们需要确认类型字段这个协议身份证。关键识别特征对照表字段类型普通以太网帧1905协议帧LLDP帧目的MAC单播/广播地址01-80-C2-00-00-1301-80-C2-00-00-0E类型字段0x0800(IPv4)0x893A0x88CC载荷结构随机CMDU格式TLV格式在Wireshark中你可以通过以下步骤快速验证右键点击目标数据包选择Follow Ethernet Stream查看十六进制视图中的第13-14字节确认是否为0x893A小端存储显示为3A 89注意某些网络设备可能修改默认的组播地址但类型字段0x893A是1905协议的铁证。3. 消息解剖CMDU与LLDP-TLV结构解析1905协议的消息体主要有两种形态就像信件有不同的正文格式。理解它们的结构差异是解读内容的关键。3.1 LLDP-TLV邻居发现的乐高积木桥接发现消息采用LLDP的TLV类型-长度-值结构这种模块化设计让扩展变得简单。在Wireshark中展开Link Layer Discovery Protocol部分你会看到类似这样的结构Chassis ID TLV: Type: 1 Length: 7 Subtype: 4 (MAC地址) Value: 00:11:22:33:44:55 Port ID TLV: Type: 2 Length: 3 Subtype: 3 (端口号) Value: 1 Time to Live TLV: Type: 3 Length: 2 Value: 180 (秒)每个TLV都像一块乐高积木设备通过组合不同的积木来宣告自己的存在。特别要注意Subtype字段1905协议规定必须使用特定值。3.2 CMDU1905的专属报文格式其他1905消息大多采用CMDU控制消息数据单元格式这种结构更像传统的协议报文。在Wireshark中解析时重点关注这几个部分消息类型字段决定后续TLV的解读方式0x0001拓扑发现0x0002拓扑通知0x0003链路度量查询消息编号匹配请求与响应的唯一IDTLV列表实际承载信息的可变长字段一个典型的拓扑发现CMDU在Wireshark中的显示层级1905.1 CMDU ├─ Message Type: Topology Discovery (0x0001) ├─ Message ID: 0x1234 └─ 1905.1 TLV ├─ TLV Type: AL MAC Address (0x0000) ├─ TLV Length: 6 └─ MAC Address: 00:11:22:33:44:554. 实战演练从抓包到拓扑图的重构现在让我们把理论付诸实践。假设你抓取到了以下数据包序列源MAC 00:11:22:33:44:55 → 01:80:C2:00:00:13类型0x893A源MAC 00:11:22:33:44:56 → 01:80:C2:00:00:13类型0x893A源MAC 00:11:22:33:44:55 → 00:11:22:33:44:56类型0x893A分析步骤首先确认所有数据包的类型字段都是0x893A确认为1905协议通信检查第一个数据包的CMDU消息类型发现是拓扑发现(0x0001)提取TLV中的MAC地址确认这是设备00:11:22:33:44:55在宣告存在第二个数据包显示另一个设备的宣告第三个数据包是单播通信消息类型为链路度量查询(0x0003)通过这些信息你已经可以绘制出基本的网络拓扑[00:11:22:33:44:55] ←---→ [00:11:22:33:44:56]提示在复杂网络中建议使用Wireshark的Conversations功能统计设备间的通信频率这能帮助识别主从关系。5. 高级技巧解码器开发与故障排查当你需要深度分析协议或开发自己的解码器时这些技巧会非常有用自定义Wireshark解析器-- 示例注册1905协议解析器 local p_1905 Proto(1905, 1905 Protocol) local f_type ProtoField.uint16(1905.type, Message Type, base.HEX) p_1905.fields {f_type} function p_1905.dissector(buffer, pinfo, tree) local subtree tree:add(p_1905, buffer()) subtree:add(f_type, buffer(0,2)) pinfo.cols.protocol 1905 end -- 注册到以太网类型0x893A DissectorTable.get(ethertype):add(0x893A, p_1905)常见故障模式分析组播地址冲突检查是否有其他协议误用了01-80-C2-00-00-13TLV格式错误验证Subtype是否符合1905规范消息响应超时确认Time to Live值是否合理通常应为180秒在最近一次家庭网络调试中我发现某个设备始终不出现在拓扑中。通过抓包分析发现其LLDP消息中的Time to Live被错误设置为0导致邻居设备立即丢弃该宣告。修改固件配置后问题解决。6. 协议扩展1905与相邻协议的交互1905协议不是孤立工作的它需要与多种协议协同与LLDP的配合共享相同的组播地址01-80-C2-00-00-0E1905设备必须同时支持标准LLDP和1905扩展TLV与HTTP的交互某些实现使用HTTP API提供高级功能典型端口49152WFA测试规范推荐协议栈层次关系应用层 ├─ 1905 CMDU └─ HTTP API 传输层 ├─ UDP (组播通信) └─ TCP (单播通信) 网络层 └─ 以太网 (01-80-C2-00-00-13)理解这些交互关系能帮助你在复杂网络环境中准确定位问题边界。比如当拓扑发现失败时可以先检查LLDP基础功能是否正常再排查1905特有扩展。

更多文章