MQTT协议定义了多种消息类型,每种消息类型都有特定的用途和功能。了解这些消息的具体结构和使用场景,对于开发和调试MQTT应用至关重要。本章将详细介绍每种消息类型的结构、功能和应用场景,并探讨它们之间的相互关系。
1 CONNECT消息
1.1 消息结构
CONNECT消息用于客户端与代理建立连接的请求,消息格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 协议名称长度(2字节) |
+-------------------------------+
| 协议名称(MQTT,字符串) |
+-------------------------------+
| 协议版本(1字节) |
+-------------------------------+
| 连接标志(1字节) |
+-------------------------------+
| 保持会话时间(2字节) |
+-------------------------------+
| 用户名长度(可选,2字节) |
+-------------------------------+
| 用户名(可选,字符串) |
+-------------------------------+
| 密码长度(可选,2字节) |
+-------------------------------+
| 密码(可选,字符串) |
+-------------------------------+
1.2 使用场景
- 连接初始化:客户端发送此消息请求与代理建立连接。
- 认证和安全性:可包含用户名和密码,用于客户端认证。
- 会话保持:指定保持会话时间,控制客户端和代理之间的心跳间隔。
1.3 示例
消息类型:1
保留标志:0
QoS等级:0
消息剩余长度:12
协议名称长度:4
协议名称:MQTT
协议版本:4
连接标志:0b00000000(无用户名和密码)
保持会话时间:60秒
客户端ID长度:6
客户端ID:Client1
2 CONNACK消息
2.1 消息结构
CONNACK消息是代理对客户端CONNECT消息的响应,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 连接状态(1字节) |
+-------------------------------+
2.2 使用场景
- 连接确认:代理通过此消息确认客户端的连接请求。
- 状态码指示:连接状态字段指示连接是否成功,例如
0x00
表示成功,0x01
表示拒绝。
2.3 示例
消息类型:2
保留标志:0
QoS等级:0
消息剩余长度:2
连接状态:0x00(连接成功)
3 PUBLISH消息
3.1 消息结构
PUBLISH消息用于将消息发布到指定的主题,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 主题名称长度(2字节) |
+-------------------------------+
| 主题名称(字符串) |
+-------------------------------+
| 消息ID(2字节,QoS1和2) |
+-------------------------------+
| 消息内容(字符串或二进制) |
+-------------------------------+
3.2 使用场景
- 消息发布:客户端将消息发布到指定主题。
- 数据传输:传输传感器数据、状态信息等。
3.3 示例
消息类型:3
保留标志:0
QoS等级:1
消息剩余长度:18
主题名称长度:4
主题名称:sensor
消息ID:1
消息内容:Temperature: 25.5°C