MQTT


MQTT CONNECT 数据包

MQTT CONNECT 数据包是客户端向服务器发起连接时发送的第一条消息。它包含客户端的标识信息以及认证和遗嘱配置等数据

CONNECT 数据包结构

1. 固定报头 (Fixed Header)

字段 描述
7-4 报文类型 值为 1 表示 CONNECT 数据包
3-0 保留位 设置为 0000
可变长度 剩余长度字段 数据包的总长度(不包含固定报头)

剩余长度字段:表示数据包除去固定报头第一个字节外的剩余部分的长度。它使用 可变长度编码,占 1 到 4 字节。
每个字节最高位是一个继续位:

  • 如果最高位是 1,表示下一个字节仍然是剩余长度的一部分。
  • 如果最高位是 0,表示结束。

2. 可变报头 (Variable Header)

字段内容

字段名 长度 描述
协议名称 (Protocol Name) 可变长度 MQTT 协议名称,通常是 MQTT(长度为 4 字节)
协议级别 (Protocol Level) 1 字节 MQTT 版本号,目前为 4(MQTT 3.1.1)或 5(MQTT 5.0)
连接标志 (Connect Flags) 1 字节 标志位,定义遗嘱、用户名、密码等信息的使用
保活时间 (Keep Alive) 2 字节 以秒为单位,表示客户端发送心跳的间隔时间

连接标志 (Connect Flags) 位说明

位位置 名称 描述
7 用户名标志 (User Name Flag) 若设置为 1,表示负载中包含用户名
6 密码标志 (Password Flag) 若设置为 1,表示负载中包含密码
5 遗嘱保留 (Will Retain) 若设置为 1,表示遗嘱消息会以保留消息发布
4-3 遗嘱 QoS (Will QoS) 遗嘱消息的 QoS 等级
2 遗嘱标志 (Will Flag) 若设置为 1,表示负载中包含遗嘱主题和遗嘱消息
1 清除会话 (Clean Session) 若设置为 1,表示客户端与服务器间会话状态不持久化
0 保留位 必须设置为 0

3. 有效载荷 (Payload)

根据连接标志位的设置,载荷可以包含以下字段:

字段名 描述
客户端标识符 (Client ID) 必选字段,标识客户端的唯一 ID
遗嘱主题 (Will Topic) 如果设置了遗嘱标志,则包含此字段
遗嘱消息 (Will Message) 如果设置了遗嘱标志,则包含此字段
用户名 (Username) 如果设置了用户名标志,则包含此字段
密码 (Password) 如果设置了密码标志,则包含此字段。

示例数据包解析

假设客户端发送以下 CONNECT 数据包(十六进制表示):

10 3E 00 04 4D 51 54 54 04 82 00 3C 00 03 63 6C 69 65 6E 74 01 02 77 69 6C 6C 2F 74 6F 70 69 63 08 4C 61 73 74 20 6D 73 67 04 75 73 65 72 08 70 61 73 73 77 6F 72 64

解读:
1. 固定报头:

  • 10:报文类型(CONNECT)
  • 3E:剩余长度(62 字节)

2. 可变报头:

  • 协议名称:MQTT(00 04 4D 51 54 54)
  • 协议级别:04(MQTT 3.1.1)
  • 连接标志:82(清除会话 + 遗嘱标志 + 遗嘱 QoS = 2 + 用户名标志 + 密码标志)
  • 保活时间:00 3C(60 秒)

3. 有效载荷:

  • 客户端标识符:client(00 03 63 6C 69 65 6E 74)
  • 遗嘱主题:will/topic(01 02 77 69 6C 6C 2F 74 6F 70 69 63)
  • 遗嘱消息:Last msg(08 4C 61 73 74 20 6D 73 67)
  • 用户名:user(04 75 73 65 72)
  • 密码:password(08 70 61 73 73 77 6F 72 64)

mosquitto搭建本地服务器

下载

配置

启动

mosquitto.exe -c mosquitto.conf -v

订阅主题

发布消息

mosquitto_pub -h localhost -t "topic" -i "client" -m "message"
posted @ 2024-08-20 18:39  D·Kingson.Mo  阅读(14)  评论(0编辑  收藏  举报