MQTT-控制报文
简介
报文是网络中交换与传输数据的最小数据单元,即一次性需要发送的数据块。它包含发送的完整数据信息,长度不限且可变。MQTT客户端和服务端就是通过交换控制报文完成工作(如订阅主题、发布信息)的
以MQTT发送的信息为例,在客户端发送的数据中,不仅包含花括号里面的内容(也就是我们发送的信息),也包括一些其他内容,这两部分是一个整体(数据块),作为控制报文进行发送
常见的控制报文类型
MQTT定义了15种报文类型,可按功能分为三类:
- 连接类:
| 值 | 报文名称 | 报文说明 |
|---|---|---|
| 1 | CONNECT | 用于客户端向服务器发起连接 |
| 2 | CONNACK | 作为响应返回连接的结果 |
| 12 | PINGREQ | 用于连接保持和探测,客户端定期发出 PINGREQ 报文向服务器表示自己仍然活跃 |
| 13 | PINGRESP | 用于连接保持和探测,客户端在发出 PINGREQ 报文后,根据 PINGRESP 报文是否及时返回判断服务器是否活跃。 |
| 14 | DISCONNECT | 想要结束通信,或者遇到了一个必须终止连接的错误,发送该报文关闭网络连接 |
| 15 | AUTH | 是 MQTT 5.0 引入的全新的报文类型,它仅用于增强认证,为客户端和服务端提供更安全的身份验证。 |
- 发布类:
| 值 | 报文名称 | 报文说明 |
|---|---|---|
| 3 | PUBLISH | 用于发布消息 |
| 4 | PUBACK | 分别用于 QoS 1 和 QoS 2 消息的确认流程 |
| 5 | PUBREC | 分别用于 QoS 1 和 QoS 2 消息的确认流程 |
| 6 | PUBREL | 分别用于 QoS 1 和 QoS 2 消息的确认流程 |
| 7 | PUBCOMP | 分别用于 QoS 1 和 QoS 2 消息的确认流程 |
- 订阅类:
| 值 | 报文名称 | 报文说明 |
|---|---|---|
| 8 | SUBSCRIBE | 用于客户端向服务器发送订阅 |
| 9 | SUBACK | 返回订阅结果 |
| 10 | UNSUBSCRIBE | 用于客户端向服务器发送取消订阅 |
| 11 | UNSUBACK | 返回取消订阅结果 |
控制报文的格式
报文主要由三部分组成:
- 固定报头
- 可变报头
- 有效载荷
其中固定报头一定存在于所有的报文中,而后两个部分的存在情况取决于控制报文的类型
以 PINGREQ 类型报文为例,客户端会定期发出 PINGREQ 报文向服务器表示自己仍然活跃,它只包含固定报头,而不包含可变报头和有效载荷
又以 PUBLISH 类型报文为例,客户端使用 PUBLIC 报文发送消息,它包含以上的所有部分(固定报头、可变报头、有效载荷)
固定报头
固定报头由三个字段组成(表格视为整个固定报头):
| 报文类型 Packet Type(4bit) | 标志位 Flag(4bit) | 剩余长度 Remain Length(1~4bit) |
|---|
- 报文类型:无符号整数,转换为十进制后,得到的值就对应控制报文的类型(值与报文类型的对应关系见上文表格)
- 标识位:仅在
PUBLISH报文中有明确定义,在其他类型的报文中作为保留位:- bit 3(DUP)表示当前报文是否为重传报文
- bit 2、1(QoS)表示当前报文的质量等级
- bit 0(Retain)表示当前报文是否为保留信息
- 剩余长度:表示报文剩余部分的字节数,即可变报头+有效载荷的总字节数
可变报头
对于不同报文类型,可变报头的内容也不同
以 CONNECT 报文为例,它的可变报头包括五个字段:协议名称、协议级别、连接标识、保持活跃和属性
又以 PUBLISH 报文为例,它的可变报头包括三个字段:主题名称、报文标识和属性
其中属性字段基本上都是可变报头的最后一部分,在 MQTT 5.0 之后引入,包括如下组成部分:
| - | 属性长度 Length | 属性内容(Property 1 ~ n) |
|---|
属性通常是为了某个专门的用途而设计的,不同的报文,其支持的属性也不同
属性长度指所有属性的总长度,如果报文没有任何属性,那么属性长度就是0
有效载荷
用于实现报文的核心功能
以 PUBLISH 报文为例,载荷用于承载具体的消息内容
又以 SUBSCRIBE 报文为例,载荷包含了订阅主题和订阅选项
通过 Wireshark 获取报文
安装并进入 Wireshark 程序,选择需要监听的网卡,然后在搜索框内输入 MQTT 筛选出通过 MQTT 协议发送的消息
以下为不同情况下获取到的报文:
连接服务端

发送保活信息

发送普通信息(从上到下分别为 QoS 0~2)



订阅主题

取消订阅主题

断开连接

- 标题: MQTT-控制报文
- 作者: kk3TWT
- 创建于 : 2026-05-02 16:43:15
- 更新于 : 2026-05-02 16:53:47
- 链接: https://kk-is-very-happy.online/posts/ec01270c/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。







