MQTT 控制报文

您所在的位置:网站首页 报文响应超时是什么意思 MQTT 控制报文

MQTT 控制报文

2024-07-11 12:43| 来源: 网络整理| 查看: 265

目录

6.1 PUBLISH - 发布消息

6.1.1 固定报头

6.1.1.1 DUP重发标志

6.1.1.2 Qos服务质量等级

6.1.1.3 RETAIN保留标志

6.1.2 可变报头

6.1.3 有效载荷

6.2 PUBACK - 发布确认

6.2.1 固定报头

6.2.2 可变报头

6.3 PUBREC - 发布收到(Qos 2,第一步)

6.3 PUBREL - 发布释放(Qos 2,第二步)

6.3 PUBCOMP - 发布收到(Qos 2,第三步)

6.1 PUBLISH - 发布消息

PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。

 

6.1.1 固定报头

 

PUBLISH 固定报头 的数据格式  Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0byte 1MQTT 报文的类型(3 - PUBLISH)DUP重发标志Qos服务质量等级RETAIN保留标志3,0x3 - PUBLISHXXXXbyte 2剩余长度        

 

6.1.1.1 DUP重发标志

位置:第1个字节,第3位。

如果DUP标志被设置为0,表示这是客户端或服务端第一次请求发送这个PUBLISH报文。如果DUP标志被设置为1,表示这可能是一个早前报文请求的重发。

客户端或服务端请求重发一个PUBLISH报文时,必须将DUP标志设置为1。对于QoS 0的消息,DUP标志必须设置为0。

 

 

6.1.1.2 Qos服务质量等级

位置:第1个字节,第2-1位。这个字段表示应用消息分发的服务质量等级保证。

 

Qos服务质量定义 Qos 值Bit 2Bit 1描述000最多分发一次101至少分发一次210只分发一次-11 

 

PUBLISH报文不能将QoS所有的位设置为1。如果服务端或客户端收到QoS所有位都为1的PUBLISH报文,它必须关闭网络连接。

 

 

6.1.1.3 RETAIN保留标志

位置:第1个字节,第0位。

如果客户端发给服务端的PUBLISH报文的保留(RETAIN)标志被设置为1,服务端必须存储这个应用消息和它的服务质量等级(QoS),以便它可以被分发给未来的主题名匹配的订阅者。一个新的订阅建立时,对每个匹配的主题名,如果存在最近保留的消息,它必须被发送给这个订阅者。如果服务端收到一条保留(RETAIN)标志为1的QoS 0消息,它必须丢弃之前为那个主题保留的任何消息。它应该将这个新的QoS 0消息当作那个主题的新保留消息,但是任何时候都可以选择丢弃它。如果这种情况发生了,那个主题将没有保留消息。

服务端发送PUBLISH报文给客户端时,如果消息是作为客户端一个新订阅的结果发送,它必须将报文的保留标志设为1。当一个PUBLISH报文发送给客户端是因为匹配一个已建立的订阅时,服务端必须将保留标志设为0,不管它收到的这个消息中保留标志的值是多少。

保留标志为1且有效载荷为零字节的PUBLISH报文会被服务端当作正常消息处理,它会被发送给订阅主题匹配的客户端。此外,同一个主题下任何现存的保留消息必须被移除,因此这个主题之后的任何订阅者都不会收到一个保留消息。当作正常 意思是现存的客户端收到的消息中保留标志未被设置。服务端不能存储零字节的保留消息。

如果客户端发给服务端的PUBLISH报文的保留标志位0,服务端不能存储这个消息也不能移除或替换任何现存的保留消息。

 

6.1.2 可变报头

可变报头按顺序包含主题名和报文标识符。

 

PUBLISH 可变报头 的数据格式 byte 1Length MSBbyte 2Length LSBbyte 3...N主题名byte N+1报文标识符 MSB(Qos = 1/2时)byte N+2报文标识符 LSB(Qos = 1/2时)

 

主题名(Topic Name)用于识别有效载荷数据应该被发布到哪一个信息通道。

主题名必须是PUBLISH报文可变报头的第一个字段。它必须是 1.5.3节定义的UTF-8编码的字符串。

PUBLISH报文中的主题名不能包含通配符。

服务端发送给订阅客户端的PUBLISH报文的主题名必须匹配该订阅的主题过滤器

 

只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。、

 

6.1.3 有效载荷

有效载荷包含将被发布的应用消息。数据的内容和格式是应用特定的。有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度。包含零长度有效载荷的PUBLISH报文是合法的。

响应:PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应。

 

PUBLISH报文的预期响应 服务质量等级预期响应Qos 0无响应Qos 1PUBACK 报文Qos 2PUBREC 报文

 

动作:

客户端使用PUBLISH报文发送应用消息给服务端,目的是分发到其它订阅匹配的客户端。服务端使用PUBLISH报文发送应用消息给每一个订阅匹配的客户端。

 

 

6.2 PUBACK - 发布确认

 

PUBACK报文是对QoS 1等级的PUBLISH报文的响应。

 

6.2.1 固定报头

 

PUBACK 固定报头 的数据格式  Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0byte 1MQTT 报文的类型(4 - PUBACK)Reserved 保留位4,0x4 - PUBACK0000byte 2剩余长度0x02

 

剩余长度字段:表示可变报头的长度。对PUBACK报文这个值等于2。

 

 

6.2.2 可变报头

包含等待确认的PUBLISH报文的报文标识符。

 

PUBACK 可变报头 的数据格式 byte 1报文标识符 MSBbyte 2报文标识符 LSB

 

PUBACK 报文没有有效载荷。

PUBACK 报文只有 固定报头 和 可变报头,共4个字节。

 

6.3 PUBREC - 发布收到(Qos 2,第一步)

实际应用中几乎用不到,百度、阿里、腾讯的物联网MQTT协议,最高只支持 Qos 1。在此不做介绍。

 

6.3 PUBREL - 发布释放(Qos 2,第二步)

实际应用中几乎用不到,百度、阿里、腾讯的物联网MQTT协议,最高只支持 Qos 1。在此不做介绍。

 

6.3 PUBCOMP - 发布收到(Qos 2,第三步)

实际应用中几乎用不到,百度、阿里、腾讯的物联网MQTT协议,最高只支持 Qos 1。在此不做介绍。

 

 

✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿✿

完结撒花,MQTT协议帧详解完毕,学习的目的主要还是为了实际应用:

阿里云物联网,创建产品、设备:阿里云创建产品、设备,获取证书三元组

阿里云物联网通信 的 MQTT 报文格式,结合阿里云物联网,实现IOT设备的数据解析与上报:阿里云 MQTT

❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3