💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 2.1 MQTT控制包的结构 MQTT协议的工作方式其实就是根据预先定义的方式进行一系列的MQTT控制包交换。这一节我们主要解释这些包的格式。 一个MQTT控制包最多由3个组成部分,而且必须按照下面这样的顺序。 图2.1 MQTT控制包的结构 1. 固定头部,存在于所有MQTT控制包中 2. 可变头部,存在于一部分MQTT控制包中 3. 有效负载,存在于一部分MQTT控制包中 # 2.2 固定头部 每个MQTT控制包都包含一个固定头部。 图2.2 固定头部格式 位 7 6 5 4 3 2 1 0 第1字节 MQTT控制封包类型 每个MQTT控制包特有的标志类型 第2字节开始 保留字长 ![](https://box.kancloud.cn/2015-11-29_565a948759a03.png) ## 2.2.1 MQTT控制包类型 位置:第一字节,7-4位 表示为4位无符号值,如下表所示: ![](https://box.kancloud.cn/2015-11-29_565a948768e2b.png) ## 2.2.2 标志 固定头部第一字节剩余的4位(Bits[3-0])包含了如下表所示的每个MQTT控制包特殊的规范。当一个标志位被记录成“Reserved”时,表明这是保留给将来协议升级使用,现在必须按照下表所示设置相应的值[MQTT-2.2.2-1]。如果收到不合规的值,接收方必须关闭网络连接[MQTT-2.2.2-2]。更详细的对于错误的处理可以参考4.8节。 ![](https://box.kancloud.cn/2015-11-29_565b08602ef4c.png) DUP1 = 重复发送一个发布控制包 QoS2 = 发布的服务品质级别 RETAIN3 = 发布的保留标志 更详细的信息可以参考3.3.1章节 ## 2.2.3 剩余字长 位置:从第二字节开始 剩余字长表示当前消息的剩余字节数,包括可变头部和有效负载。剩余字长不包括用来编码剩余长度的字节。 剩余字长的编码采用的是可变长编码方案,用一个单字节可以代表最多127字节。如果更长的话,需要用如下的方式处理: 每个字节的低7位用来编码数据,而最高一位用来表示后续还有值。因此每个字节编码128个数值和一个“延续位”。剩余字长中最大的字节数是4。 * 非标准注释 比如,十进制数64被编码为一个单字节,十进制64,十六进制0x40。十进制321(也就是65+128*2)被编码为2个字节,低位在前。所以第一个字节是193(65+128)。注意最高位被设置成至少有一个后续字节。第二个字节是2。 这就允许应用发送控制包最大256M(268,435,455),代表这个数的就是0xFF,0xFF,0xFF,0x7F。 | 数字 | 从 | 到 | | 1 |0(0x00) | 127(0x7F) | | 2 |128(0x80, 0x01) | 16 383(0xFF,0x7F) | | 3 |16 384(0x80,0x80,0x01) | 2 097 151(0xFF,0xFF,0x7F) | | 4 |2 097 152(0x80,0x80,0x80,0x01) |268 435 455(0xFF,0xFF,0xFF,0x7F) | # 2.3 可变头部 ## 2.3.1 包标识符 # 2.4负载