MQTT学习笔记(4)报文分析之PUBLISH


PUBLISH(发布消息)


含义:客户端到服务端或者服务端到客户端发布消息控制报文,是双向的。

一.固定报头
MQTT学习笔记(4)报文分析之PUBLISH_第1张图片

DUP 重发标志
当DUP被设置为0,表示客户端或者服务器是第一次发送这个PUBLISH报文
当DUP被设置为1,表示这可能是一个早期报文的重发
当Qos=0时,DUP 必须为0

Qos服务质量等级
MQTT学习笔记(4)报文分析之PUBLISH_第2张图片

  • QoS 0(At most once)“至多一次”
    消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
    MQTT学习笔记(4)报文分析之PUBLISH_第3张图片

  • QoS 1(At least once)“至少一次”
    确保消息到达,但消息重复可能会发生。
    MQTT学习笔记(4)报文分析之PUBLISH_第4张图片

  • QoS 2(Exactly once)“只有一次”
    MQTT学习笔记(4)报文分析之PUBLISH_第5张图片

**注:**发布者或者订阅者设置的QoS分别是和服务器端异步执行的,即使发布者设置发布消息为QoS2,订阅者也可以通过QoS0或QoS1来订阅该消息(这样就是QoS的降级downgrade)。

RETAIN保留标志
如果被置为1,服务端必须存储这个topic和它的QoS ,以便它可以被Broker分发给未来的和主题名匹配的订阅者,但是RETAIN=1的Qos=0的PUBLISH的报文发送服务器后,保留消息可能会被服务器选择丢弃保留消息。
保留消息能使新订阅的客户端立即收到最新的状态消息,而不用等待发布者发送下一个更新,也就是topic的保留标志是最后已知的良好值

如果要删除保留消息,只需向该topic重新publish数据,RETAIN=TRUE,Payload为空,新订阅者就不会收到保留消息。

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

二.可变报头

  • 主题名(Topic name)
  • 报文标识符(Package Identify)- -只有当Qos=1,2时才有

三.payload
根据用户自定义


PUBLISH 报文的预期响应


MQTT学习笔记(4)报文分析之PUBLISH_第6张图片


PUBACK(发布确认Qos1)


含义:发布确认,对 QoS 1 等级的 PUBLISH 报文的响应
一.固定报头

  • 0x40
  • 0x02

二.可变报头

  • 等待确认的 PUBLISH 报文的报文标识符

二.payload


PUBREC(发布收到,step1)


含义:发布收到,对 QoS 等级 2 的 PUBLISH 报文的响应。它是 QoS 2 等级协议交换的第二个报文。
一.固定报头

  • 0x50
  • 0x02

二.可变报头

  • 等待确认的 PUBLISH 报文的报文标识符

二.payload


PUBREL(发布释放,Qos2,Step2)


含义:发布释放,报文是对 PUBREC 报文的响应。 它是 QoS 2 等级协议交换的第三个报文。
一.固定报头

  • 0x62
  • 0x02

二.可变报头

  • 等待确认的 PUBREC 报文的报文标识符

二.payload


PUBCOMP(发布完成,Qos2,step3)


含义:发布完成,是对 PUBREL 报文的响应。 它是 QoS 2 等级协议交换的第四个也是最后一个报文。
一.固定报头

  • 0x70
  • 0x02

二.可变报头

  • 等待确认的 PUBREL 报文的报文标识符

二.payload

下面用wireshark抓下包
Publisher(Qos=0)Subscriber(Qos=0)
MQTT学习笔记(4)报文分析之PUBLISH_第7张图片

30 1f 
00 0f 74 65 73 74 2f 73 61 6d 70 6c 65 2f 70 75 62 
74 68 69 73 20 69 73 20 61 20 74 65 73 74

Publisher(Qos=1)Subscriber(Qos=1)
MQTT学习笔记(4)报文分析之PUBLISH_第8张图片

32 21 
00 0f 74 65 73 74 2f 73 61 6d 70 6c 65 2f 70 75 62 00 04 
74 68 69 73 20 69 73 20 61 20 74 65 73 74

MQTT学习笔记(4)报文分析之PUBLISH_第9张图片

Publisher(Qos=2)Subscriber(Qos=2)
MQTT学习笔记(4)报文分析之PUBLISH_第10张图片

34 21 
00 0f 74 65 73 74 2f 73 61 6d 70 6c 65 2f 70 75 62 00 0d 
74 68 69 73 20 69 73 20 61 20 74 65 73 74   

MQTT学习笔记(4)报文分析之PUBLISH_第11张图片

MQTT学习笔记(4)报文分析之PUBLISH_第12张图片

MQTT学习笔记(4)报文分析之PUBLISH_第13张图片

你可能感兴趣的:(mqtt)