MQTT 编解码器
MQTT 协议报文编码与解码
粘贴从 Wireshark、网络分析器或 Broker 日志中捕获的 MQTT 报文数据
示例报文
解析结果
输入报文数据并点击解析查看结果
字节查看器
编码结果
配置参数并点击生成报文
字节查看器
报文结构预览
MQTT 报文类型参考
| 代码 | 名称 | 方向 | 描述 |
|---|---|---|---|
| 0x10 | CONNECT | C→S | 客户端连接请求 |
| 0x20 | CONNACK | S→C | 连接确认 |
| 0x30 | PUBLISH | C↔S | 发布消息 |
| 0x40 | PUBACK | C↔S | 发布确认(QoS 1) |
| 0x50 | PUBREC | C↔S | 发布收到(QoS 2 第1步) |
| 0x60 | PUBREL | C↔S | 发布释放(QoS 2 第2步) |
| 0x70 | PUBCOMP | C↔S | 发布完成(QoS 2 第3步) |
| 0x80 | SUBSCRIBE | C→S | 订阅请求 |
| 0x90 | SUBACK | S→C | 订阅确认 |
| 0xA0 | UNSUBSCRIBE | C→S | 取消订阅请求 |
| 0xB0 | UNSUBACK | S→C | 取消订阅确认 |
| 0xC0 | PINGREQ | C→S | 心跳请求(保活) |
| 0xD0 | PINGRESP | S→C | 心跳响应 |
| 0xE0 | DISCONNECT | C→S | 客户端断开连接 |
MQTT 协议指南
认识 MQTT 协议
MQTT(消息队列遥测传输)是基于 TCP/IP 的轻量级消息协议,1999 年由 IBM 为卫星链路监控开发,现已成为物联网通信的事实标准。该协议采用发布-订阅模式,客户端通过中央 Broker 通信,非常适合不稳定网络和资源受限设备。
报文二进制结构
每个 MQTT 报文以固定头部(1-5字节)开始,后跟可选的可变头部和负载。第一字节的 7-4 位是报文类型,3-0 位是类型特定标志。剩余长度字段采用可变长度编码。
| 位范围 | 字段名 | 说明 |
|---|---|---|
| 7-4 | 报文类型 | 控制报文类型(1-15) |
| 3-0 | 标志位 | 类型特定标志(PUBLISH 的 DUP、QoS、RETAIN) |
可变长度编码
MQTT 对剩余长度字段采用紧凑编码,每字节使用 7 位数据和 1 位延续标志。0-127 需要 1 字节,128-16383 需要 2 字节,最多 4 字节可表示 268,435,455。
| 字节数 | 最小值 | 最大值 |
|---|---|---|
| 1 | 0 | 127 |
| 2 | 128 | 16,383 |
| 3 | 16,384 | 2,097,151 |
| 4 | 2,097,152 | 268,435,455 |
CONNECT 报文详解
CONNECT 报文在 TCP 连接建立后首先发送,包含协议版本、心跳间隔、客户端 ID 及可选凭据。连接标志控制会话行为,包括 Clean Session、遗嘱消息配置和认证信息。
PUBLISH 报文机制
PUBLISH 报文承载应用消息。固定头部标志位指示 QoS 等级、保留行为和重发状态。QoS 0 发完即忘,QoS 1 保证至少一次投递,QoS 2 通过四次握手确保精确一次投递。
QoS 服务质量保证
实际应用场景
- 分析 Wireshark 或 tcpdump 抓取的报文进行调试
- 构建测试报文验证 MQTT Broker 或客户端实现
- 通过实际报文分析学习 MQTT 协议内部原理
- 排查物联网设备连接和消息投递问题
- 为自动化测试场景生成示例报文
协议版本演进
目前有三个主要 MQTT 版本:MQTT 3.1(协议级别 3)、MQTT 3.1.1(协议级别 4,ISO/IEC 20922:2016 国际标准)和功能增强的 MQTT 5.0(协议级别 5)。本工具主要针对 MQTT 3.1.1,这仍是部署最广泛的版本。