总结:协议概述,消息队列遥测发送是一种轻量级的发布/订阅模式消息发送协议,专为低带宽、不稳定网络环境中的物联网应用而设计。 这是级别协议交换的第二条消息。
1.MQTT协议概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一个轻量级的发布/订阅-mode消息协议专为低带宽和不稳定网络环境中的物联网应用而设计。
特点:
1.开放消息协议,易于实现
2.发布订阅模式,一对多消息发布
3. 基于 TCP/IP 网络连接
4. 紧凑的消息结构
5.消息QoS支持,保证可靠传输
MQTT 协议原理
实现 MQTT 协议:需要客户端和服务器端在通信过程中建立TCP连接,MQTT协议中有三种身份:发布者(Publish)、代理者(broker)、订阅者(subscribe)在客户端,消息。既是客户端,又是消息发布者,可以同时是订阅者 MQTT 发送的消息分为主题和负载类型。 -align:left;"> (2) 负载理解为消息的内容和消息内容。订阅者接收到的主题的消息内容(有效负载)指的是您要使用的具体内容。
MQTT 协议服务器:
MQTT 服务器称为“消息代理”。)位于消息发布者和订阅者,服务器可以:
(1) 接受来自客户端的网络连接;
(2)接受客户端发布的信息;
(3) 处理来自客户端的订阅和取消订阅请求。
(4) 订阅 p>
MQTT 协议客户端:
使用 MQTT 协议的设备始终与服务器建立网络连接。
(1)发布其他客户端可以订阅的信息 ="margin-left:0in;text-align:left ;" > (2) 订阅其他客户端发布的消息
(3) 退订或删除消息。
>
(4) 断开与服务器的连接
MQTT 协议栈
p> 2.MQTT通信报文
MQTT协议数据包结构:
在MQTT协议中,一个MQTT数据包由三部分组成:固定头、可变头、消息体(payload)。 MQTT数据包的结构如下:
Fixed header(固定消息头)
Variable header &Payload
2.1 解释 CONNECT 消息
清洁会话:清洁会话。 用于控制会话状态生存期。 该标志设置为 1。 客户端和服务器必须销毁任何先前的会话并启动新的会话。 该标志设置为 0,服务器应根据当前会话状态(使用客户端标识符进行标识)恢复与客户端的通信。
遗嘱标志:遗嘱该标志设置为 1,表示如果连接请求被接受,则遗嘱消息应存储在服务器上。
QoS:消息服务的质量级别。 Will 标志设置为 0,Will QoS 也设置为 0。 Will标志设置为1,Will QoS值等于0,1,2。
用户名标志:用户名标志。 该标志设置为 0。 用户名字段不能包含在有效负载中。 该标志设置为 1。 用户名字段必须包含在有效负载中。
密码标志:密码标志,标志设置为0,不能包含payload密码字段,标志设置为1 并且密码字段必须包含在有效负载中。
2.2 解释 CONNACK 消息
返回码说明:
从服务器发送到客户端的第一条消息是科纳克。 服务器发送 CONNACK 消息以响应从客户端接收到的 CONNECT 消息。
Sp:会话存在标志
当前会话标志
会话信息在服务器上维护并设置为 1。
未保存。 它被设置为 0。
2.3 PUBLISH(CS)发布消息的消息解读
DUP:重新发送标志
QoS2、Qos1:如果为0,则表示数据包是第一次发送。 1表示数据包被重复发送。
Qos0:DUP 必须为 0
QOS:Publish 包的 QOS 级别是指定的如下。
p>
<p style="margin-left:0in;text-对齐:左对齐;ETAIN:保留标志。 如果为 1,服务器保存最新的 RETAIN 消息以分发给新订阅者。
2.4.解释收到的PUBACK消息确认消息
PUBACK 消息用于对 1 级 PUBLISH 消息的 QoS 响应。
收到 2.5 PUBREC 发布消息
PUBREC 消息是对 QoS 级别 2 PUBLISH 消息的响应。 这是 QoS 2 级协议交换的第二条消息。
2.6 解读 PUBRECL 发布消息
PUBREL消息是对PUBREC消息的响应。它是QoS 2级别协议.第三次消息交换
2.7 解释 PUBCOMP 发布完成消息
PUBCOMP 消息是对 PUBREL 消息的响应,它是 QoS 2 级协议交换的第四条也是最后一条消息。 p>
2.8 SUBSCRIBE 订阅主题消息解读
SUBSCRIBE 消息负载包含代表的主题客户端所需的主题,后跟一个名为“请求的 QoS”的字节,该字节授予服务器向客户端发送应用程序消息的权限。
2.9 SUBACK订阅确认消息解读
返回代码描述:
2.10 UNSUBSCRIBE 取消订阅消息解释
UNSUBSCRIBE 消息提供的主题找到的内容将逐个字符与服务器为此客户端维护的当前主题集进行比较。 如果主题完全匹配,则删除其(服务器)自己的订阅。 否则,不会进行进一步的处理。
2.11 UNSUBACK 取消订阅确认
变量头包含等待确认的 UNSUBSCRIBE 消息。包含消息标识符符号。
2.12 解读PINGREQ心跳请求消息
2.13 解读 PINGRESP 心跳响应消息
客户端向服务器发送 PINGREQ 消息。
1. 如果客户端没有向服务发送其他控制消息,则通知服务器客户端仍然处于活动状态。
2. 请求服务器发送响应以确认服务器处于活动状态。
3.使用Network确保网络连接不中断。
14.剪切剪切
客户端发送 DISCONNECT 消息后:
• 网络连接必须关闭。 • 控制数据包无法通过该网络连接发送。
当服务器收到 DISCONNECT 消息时:
• 与当前连接关联的任何未发布的遗书消息都必须被丢弃。 • 网络连接必须关闭。 3. MQTT 访问过程
3.1 连接流程
• 设备向平台发起CONNECT请求,CONNECT传递认证信息。 :0in;text-align:left;">
• 如果CLEANSESSION=0,平台会检索凭据进行认证。通过后,如果CLEANSESION=1,平台会加载已保存的设备信息。如果设备不向平台保存任何信息,不会加载设备相关信息,并返回CONNACK认证结果。 >
• 设备下发Qos0 消息 •
平台上报
• 设备收到上报后下发QoS1 消息。保存 • 平台将相应的 PUBACK 发送回设备。 • 设备发送 QoS2。 • 平台收到报告的数据点后将其存储。 • 平台向设备响应相应的PubRec 消息。 • 设备必须在超时时间内响应平台的PubRel 消息。 • 平台将向设备发送回PubComp 消息。
3.3 订阅流程
设备接受订阅开始请求;
平台收到请求后更新主题列表。
平台向设备响应 SubAck。
订阅请求级别0、1、2。
• 设备发起取消订阅请求。 • 平台返回到设备的 UnSubAck
3.5 连接保活过程
客户端向服务器发送 PINGREQ 消息,服务器响应客户端的 PINGREQ 消息,表明服务器还活着。
3.6 断开连接流程
DISCONNECT 消息是客户端发送的最后一条控制消息,表示客户端已成功连接到服务器并断开连接。
4. MQTT 消息 QOS
Level 0:消息发送方最多尝试发送一次消息。 但是,如果发生意外情况并且没有重试,则此级别将导致消息丢失。
1 级:至少一次。 如果消息接收者没有收到通知,或者通知本身丢失,则消息发送者会重新发送通知,使得消息接收者至少收到一次通知。 此级别可确保消息到达,但可能会导致消息重复。
第 2 级:恰好一次,消息仅到达一次我会成功。
MQTT 发布消息的 QoS 保证不是端到端的,而是在客户端和服务器之间。 订阅者接收MQTT消息的QoS级别最终由消息发布QoS和主题订阅QoS决定。
评论前必须登录!
注册