本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。
MQTT所有控制包由3部分组成:固定头部+可变头部+消息体。其中固定头部又分为 包类型、标志以及剩余长度。
CONNECT | CONNACK | PUBLISH | PUBACK | SUBSCRIBE | SUBACK | UNSUBSCRIBE | UNSUBACK | PINGREQ | PINGRESP | DISCONNECT | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
固定头部 | 包类型4bits | 0001 | 0010 | 0011 | 0100 | 0100 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 |
标志4bits | 保留0000 | 保留0000 | DUP 1bit QoS 2bits RETAIN 1bit | 保留0000 | 保留0010 | 保留0000 | 保留0010 | 保留0000 | 保留0000 | 保留0000 | 保留0000 | |
剩余长度1-4 bytes | 不定 | 0x02 | 不定 | 0x02 | 不定 | 不定 | 不定 | 0x02 | 0x00 | 0x00 | 0x00 | |
可变头部 | 协议名 6bytes 协议等级 1 byte 连接标志 1 byte 保活时间 2 bytes | 连接确认标志 1 byte 连接返回值1 byte | 主题 (长度 + 主题名) (支持1个) 包ID 2bytes (仅QoS1) | 包ID 同PUBLISH | 包ID 2bytes | 包ID 同SUBSCRIBE | 包ID 2bytes | 包ID 同UNSUBSCRIBE | 无 | 无 | 无 | |
消息体 | ClientIdusr name (可选)password (可选) | 无 | 应用消息 | 无 | 主题 (长度 + 主题名) (支持1个) 期望最大QoS 1 byte | 返回值 1 byte | 主题 (长度 + 主题名)(支持1个) | 无 | 无 | 无 | 无 | |
可以使用SDK通过TCP非TLS方式连接平台1883端口,运行示例,进行抓包分析。
简单分析下,CONNECT包的结构和上面保持一致
主要是针对CONNECT包的回复,无其他特殊的,主要是返回值Retrun Code上会有差异
SUBSCRIBE和SUBACK为对应关系,其中Message Identifier要匹配,QoS设置也要对应。
QoS0的PUBLISH包没有回复
PUBLISH和PUBACK为对应关系,其中Message Identifier要匹配,QoS设置也要对应。
断开连接时,由客户端发送,通常用不上,因为一般MQTT都是保持长连接,而连接断开往往因为网络,这个时候DISCONNECT包一般无法发送出去
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。