购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 MQTT协议数据包格式

不同于HTTP协议,MQTT协议使用的是二进制数据包。MQTT协议的数据包非常简单,一个MQTT协议数据包由固定头(Fix Header)、可变头(Variable Header)、消息体(Payload)这3个部分依次组成。

·固定头:存在于所有的MQTT协议数据包中,用于表示数据包类型及对应标识,表明数据包大小。

·可变头:存在于部分类型的MQTT协议数据包中,具体内容由相应类型的数据包决定。

·消息体:存在于部分MQTT协议数据包中,存储消息的具体数据。

这里我们首先看一下固定头,可变头和消息体将在讲解各种具体类型的MQTT协议数据包的时候详细讨论。

固定头格式

MQTT协议数据包的固定头的格式如图3-3所示。

图3-3 MQTT协议数据包的固定头

(1)数据包类型

MQTT协议数据包的固定头的第一个字节的高4位用于指定该数据包的类型。MQTT协议的数据包类型如表3-1所示。

表3-1 MQTT协议数据包类型

(2)数据包标识位

MQTT协议数据包的固定头的低4位用于指定数据包的标识位(Flag)。在不同类型的数据包中,标识位的定义是不一样的,每种数据包对应的标识位如表3-2所示。

表3-2 MQTT协议数据包的固定头的标识位含义

注:DUP、QoS、RETAIN标识的含义将在后文进行详细讲解。

(3)数据包剩余长度

从固定位的第二个字节开始,是用于标识当前数据包剩余长度的字段,剩余长度等于可变头长度加上消息体长度。

这个字段最少一个字节,最多4个字节。其中,每一个字节的最高位叫作延续位(Continuation Bit),用于标识在这个字节之后是否还有一个用于表示剩余长度的字节。剩下的低7位用于标识值,范围为0~127。

例如,剩余长度字段的第一个字节的最高位为1,那么意味着剩余长度至少还有1个字节,然后继续读下一个字节,下一个字节的最高位为0,那么剩余长度字段到此为止,一共2个字节。

不同长度的剩余长度字段可以标识的长度如表3-3所示。

表3-3 剩余长度字段可标识的数据包长度

所以,这4个字节最多可以标识的包长度为:(0xFF,0xFF,0xFF,0x7F)=268 435 455字节,即256MB,这是MQTT协议中数据包的最大长度。 UDU1ajIJjZXp0x7pcM9ownT8dxRioV3njlMu//Mk4OfY30sz94Mr0sHsJ8eb9DrA

点击中间区域
呼出菜单
上一章
目录
下一章
×