1、CONNECT控制包结构
表1 CONNECT控制包数据内容
CONNECT控制包 结构 | 固定包头 | 控制包类型 | CONNECT连接类型 | bit[7-4] 0x01<<4 |
特殊标识 | bit[3-0] 0x00 | |||
剩余长度 | 最大4个字节 | |||
可变包头 (10 byte) | 协议名称 | Length MSB(0) | byte1 | |
Length LSB(4) | byte2 | |||
Protocol Name | byte[3-4] ‘MQTT’ | |||
协议等级 | Protocol Level | byte7 0x04->3.1.1 | ||
连接标识 byte8 | User Name Flag | bit7 | ||
Password Flag | bit6 | |||
Will Retain | bit5 | |||
Will QoS | bit[4-3] | |||
Will Flag | bit2 | |||
Clean Session | bit1 | |||
Reserved | bit0 | |||
Keep Alive | Keep Alive MSB | byte9 | ||
Keep Alive LSB | byte10 | |||
载荷 | 取决于可变包头的连接标识 (lenght MSB, Lenght LSB, Data) | ClientId | ||
Will Topic | If Will Flag=1 | |||
Will Message | If Will Flag=1 | |||
User Name | If User Name Flag=1 | |||
Password | If Password Flag=1 |
2、调试数据分析
使用网络调试助手和MQTTX客户段进行调试,分析具体的CONNECT控制包数据内容。
MQTTX连接网络调试助手,收到的第一个数据包就是CONNECT控制包。
MQTTX设置内容1
MQTTX设置内容2
网络调试助手接收数据
收到数据为:10 2D 00 04 4D 51 54 54 04 C4 00 3C 00 0E 6D 71 74 74 78 5F 31 62 30 39 38 61 34 34 00 02 39 39 00 00 00 04 64 64 63 63 00 05 31 32 33 34 35
将收到的数据放入到表格中,具体看看每个数据的含义,如下表中的红色字体。
表1 CONNECT控制包调试数据解析
网络调试助手数据分析 | ||||
数据 | 说明、解析 | |||
控制包类型 | CONNECT连接类型 | bit[7-4] 0x01<<4 | 10 | 连接类数据包 |
特殊标识 | bit[3-0] 0x00 | |||
剩余长度 | 最大4个字节 | 2D | 剩余长度45byte | |
协议名称 | Length MSB(0) | byte1 | 00 | 协议名称长度4byte |
Length LSB(4) | byte2 | 04 | ||
Protocol Name | byte[3-6] ‘MQTT’ | 4D 51 54 54 | MQTT | |
协议等级 | Protocol Level | byte7 0x04->3.1.1 | 04 | 协议版本3.1.1 |
连接标识 byte8 | User Name Flag | bit7 | C4 | 1->对应可变包头有用户名 |
Password Flag | bit6 | 1->对应可变包头有密码 | ||
Will Retain | bit5 | 0 | ||
Will QoS | bit[4-3] | 00 | ||
Will Flag | bit2 | 1->对应可变包头有订阅主题 | ||
Clean Session | bit1 | 0 | ||
Reserved | bit0 | 0 | ||
Keep Alive | Keep Alive MSB | byte9 | 00 | 保活60s |
Keep Alive LSB | byte10 | 3C | ||
取决于可变包头的连接标识 (lenght MSB, Lenght LSB, Data) | ClientId | 00 0E | 客户端ID长度14byte | |
6D 71 74 74 78 5F 31 62 30 39 38 61 34 34 | mqttx_1b098a44 | |||
Will Topic | If Will Flag=1 | 00 02 | 订阅主题长度2byte | |
39 39 | 订阅主题为:99 | |||
Will Message | If Will Flag=1 | 00 00 | 无 | |
User Name | If User Name Flag=1 | 00 04 | 用户名长度4byte | |
64 64 63 63 | 用户名为:ddcc | |||
Password | If Password Flag=1 | 00 05 | 密码长度5byte | |
31 32 33 34 35 | 密码为:12345 |