1、MQTT协议模型
MQTT是一种基于发布/订阅
(publish/subscribe
)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
发布者与订阅者之间通过服务器进行通信,通信的关键在于主题(topic),当发布者发出一个主题时,若订阅者有订阅该主题,则自动接收该主题的内容。
2、CONNECT控制报文
(1)固定报文
固定报头由两个字节组成,第一个字节的7-4位为 协议类型,3-0位为标志位。 第二个字节表示剩余长度。剩余长度表示当前报文剩余部分的字节数,包括可变报头和负载的数据。剩余长度不包括用于编码剩余长度字段本身的字节数。
(2)可变报文
可变报文包括协议名、协议级别、连接标志、保持连接四部分。
(3)有效载荷
有效载荷包含客户端ID、用户名、密码、Qos等级、主题等。在单片机传输时都需转化为十六进制数据,发送数据时需要发送该部分数据长度,为两个字节。 密码需要哈希加密,在阿里云里需要加入密钥。
3、有效长度
剩余长度字段使用一个变长度编码方案,对小于128的值它使用单字节编码。更大的值按下面的方式处理。低7位有效位用于编码数据,最高有效位用于指示是否有更多的字节。剩余长度字段最大4个字节。
假设剩余长度为300,低位在前,高位在后。则1010 1100 0000 0010,即AC 02。
4、固定报文与可变报文
连接设备:10 ?? 00 04 4D 51 54 54 04 C2 00 64+客户端ID、用户名、密码
订阅:82 ?? 00 0A+主题
取消订阅:A2 ?? 00 0A+主题
发布:30 ?? +可变报文(主题)+内容(json格式)