最后更新:2022-04-22 12:50:30 手机定位技术交流文章
MQTT
协议既是连接,也是客体。
M2M允许对产品和服务提出若干申请的协定Broker控制信息在它们之间发送和接收。
Fixed Header) : 所有MQTT Control Packets的固定存在的报头Variable Header) : 某些MQTT Control Packets会包含的报头Payload) : 某些MQTT Control Packets会有传输Payload初始字节的前四个位数加起来等于总计。$2^4=16$一种可设想的信息控制类型,最后四个字节是标牌的组合,可视为在某种程度上对列报类型的补充。MQTT报文的基本格式为:

固定头由两部分组成:初始字节和剩余长度。如前所述,第一个字节的前四位表示不同种类的控制电文。
Ping请求、Ping相应每种类型的具体守则如下:
CONNECT:1,客户端请求连接到服务器CONNACK:2,服务器对客户连接确认PUBLISH:3, 发布消息PUBACK:4, 发布确认PUBREC:5发射的第一部分 发射的第一部分PUBREL:6,释放(第2部分)PUBCOMP:7完全释放(交付第3部分)SUBSCRIBE:8, Client subscribe request (Client to Server )SUBACK:9, Subscribe acknowledgment ( Server to Client)UNSUBSCRIBE:10, Unsubscribe request (Client to Server)UNSUBACK:11, Unsubscribe acknowledgment ( Server to Client)PINGREQ:12, PING request (Client to Server)PINGRESP:13, PING response (Server to Client )DISCONNECT:14, Client is disconnecting (Client to Server)0,15: 保留。剩余长度代表当前提交文件的字节(包括可选头和两个部分总负荷长度)。对于这一长度,使用可变长度编码,即初始字节的低长度编码。7位表示0~127,最高位如果为1表示未来字字节;完全相同,不能使用最多一个字字节4个字节。
某些文件有不同的标题,每份报告都有独特的标题;然而,并不是每份报告都包含一个变量。Payload部分:
| 连接管理类型报文 | Payload |
|---|---|
Connect |
必含 |
CONNACK |
必无 |
DISCONNECT |
必无 |
PINGREQ |
必无 |
PINGRESP |
必无 |
| 消息管理类型报文 | Payload |
|---|---|
PUBLISH |
可选 |
PUBACK |
必无 |
PUBREC |
必无 |
PUBREL |
必无 |
PUBCOMP |
必无 |
SUBSCRIBE |
必含 |
SUBACK |
必含 |
UNSUBSCRIBE |
必含 |
UNSUBACK |
必无 |
Connect纸头和负荷的改变 相当困难。
Variable header协议名称(6字节)+协议级别(1字节)+连接标记(1字节)+保持连接(2字节)Payload: Client Identifier + Will Topic + Will Message + User Name + Password其中,Variable Header分为:
4)+MQTT(4个字节)0x04代表版本号为3.1.1的协议清洁会、标志、遗嘱、遗嘱、遗嘱、标记、遗嘱、标记、遗嘱、标志、标志、用户名和密码标记的标志而Payload部分则分为:
Payload中的第一个字段Variable Header中的遗嘱标志被设置为1,那么Payload这是下一个字段。Will Topic和Will Message。Variable Header用户名已设为 1 。 用户名被输入到以下字段中 。Variable Header密码输入到以下字段。服务器收到CONNECT我们会在报告后寄来一个CONNACK进行连接确认。CONNACK信件的变量信头由两部分组成:连接确认符号(1字节)和返回代码(1字节)。
CONACK返回码 |
含义 |
|---|---|
0x00 |
连接接受 |
0x01 |
连接被拒绝( 无效协议版本) |
0x02 |
连接被拒绝( 找不到客户身份) |
0x03 |
连接被拒绝( 服务器服务无法访问) 。 |
0x04 |
连接被拒绝( 无效的用户名或密码) |
0x05 |
连接拒绝(未授权) |
0x06-0xFF |
预留 |
注意CONNACK报文无Payload部分。
信件可以从客户端传送到服务器,也可以从服务器传送到客户端。PUBLISH划界案的可变头和负载格式如下:
Variable Header:包件识别(2个字节)+主题名称Payload: 即所发布的消息而PUBLISH消息的接收者将根据QoS各级,答复如下:
| QoS Level | 期待响应 |
|---|---|
| QoS 0 | None |
| QoS 1 | PUBACK |
| QoS 2 | PUBREC |
此外,对于QoS 2我们收到信息后,将予以传播。PUBREC后,会响应以PUBREL;而发布方收到PUBREL后,会再返回以PUBCOMP,作为QoS在发布电文控制报告之前进行最后电文交换:
和消息发布不同,SUBSCRIBE由客户发送到服务处,以构建订阅信息。SUBSCRIBE文件记录了客户对一个或多个主题的兴趣。
SUSBSCRIBE信件信头的第一个字节必须是:$color{orange}1000enspace color{green}0010$加载必须至少有一个Topic Filter/Requested QoS对,其中,每个Topic Filter/Requested QoS对类似于:
同一个SUBSCRIBE报文下,各个Topic Filter/Requested QoS对连续堆叠。
而当服务端收到SUBSCRIBE当通信到达时,你必须对此作出答复。SUBACK报文。SUBACK报文的Payload将为每个用户指定一个响应代码,为每个响应代码指定一个字节:
| 响应码 | 含义 |
|---|---|
| 0x00 | Success - Maximum QoS 0 |
| 0x01 | Success - Maximum QoS 1 |
| 0x02 | Success - Maximum QoS 2 |
| 0x80 | Failure |
也即SUBACK报文的Payload是包含一系列响应数字的字节数组。
类似的,UNSUBSCRIBE是客户向服务发送的信息,以便终止订阅。UNSUSBSCRIBE信件信头的第一个字节必须是:$color{orange}1010enspace color{green}0010$。
但是和SUBSCRIBE不同的是,UNSUBSCRIBE的Payload并非由各个Topic Filter/Requested QoS这是永无止境的堆叠,是零Topic Filter所组成的列表。
此外,UNSUBACK报文并没有Payload。
本文由 在线网速测试 整理编辑,转载请注明出处。