PINGRESP13服务器到客户端PING应答 DISCONNECT14客户端到服务器中断连接 Reserved15不可用保留位 4.3.3标识位 位置:byte 1, bits 3-0。 在不使用标识位的消息类型中,
PINGRESP 13 服务器到客户端 PING应答
DISCONNECT 14 客户端到服务器 中断连接
Reserved 15 不可用 保留位
4.3.3 标识位
位置:byte 1, bits 3-0。
在不使用标识位的消息类型中,标识位被做为保留位。若收到无效的标志,接收端必须关闭网络连接:
DUP:发布消息的副本。用来在保证消息的可靠传输,如果设置为 1,则在下面的变长中增加MessageId,并且需要回复确认,以保证消息传输完成,但不能用于检测消息重复发送。
表4.2.4 MQT标识位
数据包 标识位 Bit 3 Bit 2 Bit 1 Bit 0
CONNECT 保留位 0 0 0 0
CONNACK 保留位 0 0 0 0
PUBLISH MQTT 3.1.1使用 DUP1 QoS2 QoS2 RETAIN3
PUBACK 保留位 0 0 0 0
PUBREC 保留位 0 0 0 0
PUBREL 保留位 0 0 0 0
PUBCOMP 保留位 0 0 0 0
SUBSCRIBE 保留位 0 0 0 0
SUBACK 保留位 0 0 0 0
UNSUBSCRIBE 保留位 0 0 0 0
UNSUBACK 保留位 0 0 0 0
PINGREQ 保留位 0 0 0 0
PINGRESP 保留位 0 0 0 0
DISCONNECT 保留位 0 0 0 0
QoS:发布消息的服务质量,即:保证消息传递的次数。
表4.2.5服务质量次数表
服务质量 次数
00 最多一次(<=1)
01 至少一次(>=1)
10 一次(=1)
RETAIN: 发布保留标识,服务器要保留这次推送的信息,如果有NEW订阅者出现,就把这消息推送于他。若没有,就推送到当前的订阅者后释放。
4.3.4 剩余长度(Remaining Length)
位置:byte 1。
MQTT固定头的第二字节作用:保存变长头部和消息体的总大小。但并非直接保存。这一字节是可以扩展,其保存机制,前七位用于保存长度,后面的一部用做于标识。当最后一位为 1时,表示说其长度不足,需要使用两个字节继续保存。
4.3.5 MQTT可变头
MQTT数据包中包含可变头,其位于固定的头和负载之间。MQTT中有1可变头。且其内容因数据包类型而不同,较常的是做为包的标识:
表4.2.6 MQTT可变头结构
Bit 7 6 5 4 3 2 1 0
byte 1 包标签符(MSB)
byte 2… 包标签符(LSB)
很多类型数据包中都包括一个两字节的数据包标识字段,这些类型的包有:PUBLISH (QoS > 0)、PUBACK、SUBACK、UNSUBSCRIBE,PUBCOMP、SUBSCRIBE、PUBREC、PUBREL、 UNSUBACK。