二进制数(Binary Data)
Binary Data: 2字节整数,后接实际字节数, 0-65535.
1.5.7 UTF-8 String pair
UTF-8 String pair 包括两个UTF-8编码字符串,用于保存name-value对。
2 MQTT Control Packet format
2.1 Structure of an MQTT Control Packet
2.1.2 MQTT Control Packet type
2.1.4 Remaining Length
位置: 其实 2.
剩余长度为:可变字节长度,代表当前控制包中可变头和负荷数据的长度,其不包括自身的编码长度。
包总长度等于固定头长度加剩余长度
2.2 Variable Header
可变头存在于部分mqtt控制包中,可变头总通常 包含包标识。
2.2.1 Packet Identifier
需要包标识的控制包如下:
- QoS等级0的PUBLISH包不可包含包标识。
- 每次客户发送一个新的QoS等级大于0的,SUBSCRIBE,UNSUBSCRIBE,PUBLISH控制包,其必须包含一个当前为使用的非0包标识。
- 每次服务端发送一个新PUBLISH(QoS >0)控制包,它必须分配一个未使用的非0控包标识。
- PUBACK, PUBREC, PUBCOMP包标识,必须与PUBLISH发送的包标识一致。
- 客服端和服务端包标识互相独立,因此客户端—服务端对在共存消息交换中可使用相同的包标识。
- 当客户端发送标识0x1234, 在其接受到服务端的PUACK前,然可能接收到一个从服务端发出的标识为0x1234的PUBLISH控制包。
2.2.2 Properties
最后可变头域是一组属性,包含在CONNECT , CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, AUTH包中。
2.2.2.1 Property Length
属性长度为可变长度整数,属性长度不包括其本身,如果无属性,必须置0。
尽管属性标识定义为可变长度字节,本版本规范所有属性仍然为0字节长。
2.2.2.2 Property
属性包括一个定义用途和数据类型的标识,然后是值。标识为可变字节整数。
- 标识控制包类型不一致的,或包括非法数据类型的控制包为非法包,如果接收,使用包含消息码(0x81)CONNACK或DISCONNECT包进行错误处理。
2.3 Payload
一些控制包包括负荷数据作为包的最后一部分,在PUBLISH包中,即为应用消息。
2.4 Reason Code
消息码,1字节无符号数,标识所有操作的结果。小于0x80的消息码表示操作成功,标识成功常用消息码值为0,大于等于0x80标识失败。
CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, DISCONNECT and AUTH Control包中在可变头中包括1字节的消息码。 SUBACK和UNSUBACK在负荷中包括一个或多个消息码。