序号 | 内容 |
---|---|
1 | 《教你动手写UDP协议栈-UDP协议栈格式》 |
2 | 《教你动手写UDP协议栈-DHCP报文解析》 |
3 | 《教你动手写UDP协议栈-OTA上位机》 |
4 | 《教你动手写UDP协议栈-DNS报文解析》 |
5 | 《教你动手写UDP协议栈-CoAP报文解析 》 |
6 | 《教你动手写网络协议栈-MQTT报文解析-实践 》 |
7 | 《教你动手写网络协议栈-MQTT报文解析-解析 》 |
名称 | 说明 |
---|---|
Fixed header(固定报文头) | 所有MQTT报文都包含 |
Variable header(可变报文头) | 只有部分MQTT报文包含 |
Payload(MQTT数据段) | 只有部分MQTT报文包含 |
bit 7 6 5 4 3 2 1 0
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Byte1| MQTT控制报文类型 |指定控制报文类型的标志 |
+-----+-----------------------------------------------|
|Byte2| 剩余长度 |
+-----+-----------------------------------------------|
| ... | 剩余长度 |
+-----------------------------------------------------|
类型 | 值 | 报文方向 | 描述 |
---|---|---|---|
RESERVED | 0 | 禁止 | 保留 |
CONNECT | 1 | 客户端到服务端 | 客户端请求连接服务器 |
CONNACK | 2 | 服务端到客户端 | 连接报文确认 |
PUBLISH | 3 | 双向 | 发布消息 |
PUBACK | 4 | 双向 | QoS 1消息发布收到确认 |
PUBREC | 5 | 双向 | 发布收到(保证交付第一步) |
PUBREL | 6 | 双向 | 发布释放(保证交付第二步) |
PUBCOMP | 7 | 双向 | QoS 2消息发布完成 |
SUBSCRIBE | 8 | 客户端到服务端 | 客户端订阅请求 |
SUBACK | 9 | 服务端到客户端 | 订阅请求报文确认 |
UNSUBSCRIBE | 10 | 客户端到服务端 | 客户端取消订阅请求 |
UNSUBACK | 11 | 服务端到客户端 | 取消订阅请求报文确认 |
PINGREQ | 12 | 客户端到服务端 | 心跳请求 |
PINGRESP | 13 | 服务端到客户端 | 心跳响应 |
DISCONNECT | 14 | 客户端到服务端 | 客户端断开连接 |
RESERVED | 15 | 禁止 | 保留 |
类型 | 报文标志 | Bit3 | Bit2 | Bit1 | Bit0 |
---|---|---|---|---|---|
CONNECT | Reserved | 0 | 0 | 0 | 0 |
CONNACK | Reserved | 0 | 0 | 0 | 0 |
PUBLISH | Used in MQTT 3.1.1 | DUP | QoS | QoS | RETAIN |
PUBACK | Reserved | 0 | 0 | 0 | 0 |
PUBREC | Reserved | 0 | 0 | 0 | 0 |
PUBREL | Reserved | 0 | 0 | 1 | 0 |
PUBCOMP | Reserved | 0 | 0 | 0 | 0 |
SUBSCRIBE | Reserved | 0 | 0 | 1 | 0 |
SUBACK | Reserved | 0 | 0 | 0 | 0 |
UNSUBSCRIBE | Reserved | 0 | 0 | 1 | 0 |
UNSUBACK | Reserved | 0 | 0 | 0 | 0 |
PINGREQ | Reserved | 0 | 0 | 0 | 0 |
PINGRESP | Reserved | 0 | 0 | 0 | 0 |
DISCONNECT | Reserved | 0 | 0 | 0 | 0 |
字节 | 最小值 | 最大值 |
---|---|---|
1 | 0(0x00) | 127(0x7F) |
2 | 128(0x80, 0x01) | 16383(0xFF, 0X7F) |
3 | 16384(0x80, 0x80, 0x01) | 2097151(0xFF, 0xFF, 0x7F) |
4 | 2097152(0x80, 0x80, 0x80, 0x01) | 268435455(0xFF, 0xFF, 0xFF, 0x7F) |
类型 | 包含可变报文头 |
---|---|
PUBLISH | √(QoS > 0) |
PUBACK | √ |
PUBREC | √ |
PUBREL | √ |
PUBCOMP | √ |
SUBSCRIBE | √ |
SUBACK | √ |
UNSUBSCRIBE | √ |
UNSUBACK | √ |
类型 | 包含Payload |
---|---|
CONNECT | √ |
PUBLISH | 可选 |
SUBSCRIBE | √ |
SUBACK | √ |
UNSUBSCRIBE | √ |
内容:
10 25
00 04 4d 51 54 54
04
c2
00 3c
00 08 63 6c 69 65 6e 74 30 31
00 05 61 64 6d 69 6e
00 08 31 32 33 34 35 36 37 38
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
含义 | User Name Flag | Password Flag | Will Retain Flag | Will QoS MSB | Will QoS LSB | Will Flag | Clean session | Rreserved |
值 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
内容:
20
02
00
00
值 | 返回码响应 | 描述 |
---|---|---|
0 | 0x00连接已接受 | 连接已被服务器接受 |
1 | 0x01连接已拒绝,不支持的协议版本 | 服务器不支持客户端请求的协议版本 |
2 | 0x02连接已拒绝,不合格的客户端ID | 客户端ID是正确的UTF-8码,但服务器不允许使用 |
3 | 0x03连接已拒绝,服务端不可用 | 网络连接已建立,但MQTT服务不可用 |
4 | 0x04连接已拒绝,无效的用户名或密码 | 用户名或密码的数据格式无效 |
5 | 0x05连接已拒绝,未授权 | 客户端未被授权连接到此服务器 |
6-255 | Reserved | 保留 |
本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!