提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
MQTT协议报文解析
一、报文格式
1.固定头
固定头:MQTT包类型 + 控制标识
类型:
Name | Value | Direction of flow | Description |
---|---|---|---|
保留 | 0 | 禁止 | 保留 |
CONNECT | 1 | 客户端到服务器 | 连接请求 |
CONNACK | 2 | 服务器到客户端 | 连接回复 |
PUBLISH | 3 | 双向 | 消息发布 |
PUBACK | 4 | 双向 | 消息回复(QoS1) |
PUBREC | 5 | 双向 | 消息已接收(QoS2交付第 1 部分) |
PUBREL | 6 | 双向 | 消息释放(QoS2交付第 2 部分) |
PUBCOMP | 7 | 双向 | 消息完成(QoS2交付第 3 部分) |
SUBSCRIBE | 8 | 客户端到服务器 | 订阅请求 |
SUBACK | 9 | 服务器到客户端 | 订阅回复 |
UNSUBSCRIBE | 10 | 客户端到服务器 | 取消订阅请求 |
UNSUBACK | 11 | 服务器到客户端 | 取消订阅回复 |
PINGREQ | 12 | 客户端到服务器 | PING 请求 |
PINGRESP | 13 | 服务器到客户端 | PING 响应 |
DISCONNECT | 14 | 双向 | 断开连接通知 |
AUTH | 15 | 双向 | 认证交换 |
控制标识:
MQTT包 | 控制标志 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
PUBLISH | MQTT 5.0版本使用 | DUP | QoS | RETAIN |
2.可变头
部分MQTT包含有:包ID(QoS 0 没有),属性集(保活时间、主题信息等)
3.载荷
部分MQTT包含有:载荷包含了一个或多个 长度 + 内容 格式的字段,这些字段的存在与否由可变头中的标志位决定。
二、报文解析
1. CONNECT
![](https://img-blog.csdnimg.cn/direct/5b26a68c084d48b1a18476eb4964a640.jpeg)
固定头:0x10、msg len
可变头:协议名称、版本、连接标识、保活时间
载荷:客户端ID、可变头标识下的属性内容
2. CONNECT ACK
固定头:0x20、msg len
可变头:连接回复标识、原因码
无载荷
3. SUBSCRIBE
固定头:0x82、msg len
可变头:订阅ID
载荷:主题、订阅选项(QoS)
4. SUBACK
固定头:0x90、msg len
可变头:订阅ID
载荷:订阅选项(QoS)
5. PINGREQ
固定头:0xc0、msg len
无可变头、载荷
6. PINGRESP
固定头:0xd0、msg len
无可变头、载荷
7. PUBLISH
固定头:0x30、msg len
可变头:订阅ID
载荷:主题、发布内容
8.PUBACK
固定头:0x40、msg len
可变头:订阅ID
无载荷
9.DISCONNECT
固定头:0xe0、msg len
可变头:断开原因码(部分无)
无载荷