MQTT协议(一)

一.MQTT协议的简介

1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
2、对负载内容屏蔽的消息传输
3、使用TCP/IP提供网络连接
4、有三种消息发布服务质量:
  (1) 至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
  (2) 至少一次”,确保消息到达,但消息重复可能会发生。
  (3) 只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5、小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。

MQTT模型:

二.MQTT协议报文格式

1、控制报文的结构:

2、固定报头格式:

2.1 控制报文类型:

2.2 控制报文类型的标志位:

2.3  剩余长度:

剩余长度表示当前报文剩余部分的字节数,包括可变报头和负载的数据,剩余长度字段使用一个变长度表示方案,对小于128的值它使用单字节表示。更大的值按下面的方式处理:低7位有效位用于表示数据,最高有效位用于指示是否有更多的字节,剩余长度字段最大4个字节。例如,十进制64会被表示为一个字节,数值是64,十六进制表示为0x40,十进制321(65+2*128)被表示为两个字节,第一个字节是65+128=193。注意最高位为1表示后面至少还有一个字节,第二个字节2

3、可变报头:很多控制报文的可变报头部分包含一个或两字节的报文标识符,这些报文中SUBSCRIBE、UNSUBSCRIBE和PUBLISH(QOS>0)控制报文必须包含一个非零的16位报文标识符(Packet ldentifier)。客户端每次发送一个新的报文时都必须分配一个当前未使用的报文标识符,但如果是客户端要重发的控制报文,它必须使用相同的标识符。当客户端得到报文对应的确认后,这个报文标识符就被释放并可被重复使用,其中QoS1的PUBLISH报文的确认是PUBACK,QoS2的PUBLISH报文的确认是PUBCOMP,SUBSCRIBE或UNSUBSCRIBE报文的确认分别是SUBACK或UNSUBACK,这些规定同样也适用于服务端。QoS等于0的PUBLISH报文不能包含报文标识符。PUBACK,PUBREC,PUBREL报文必须与它发送的PUBLISH报文使用报文相同的报文标识符。类似地,SUBACK和UNSUBACK必须与它发送的SUBSCRIBE和UNSUBSCRIBE报文使用相同的报文标识符


4、有效载荷:某些MQTT控制报文在报文的包含一个有效载荷

猜你喜欢

转载自blog.csdn.net/qq_21231413/article/details/88184593