通博TBET

新闻中心
什么是MQTT?为什么在IIoT中需要它
2020-11-26
3111

  随着行业的快速发展,数据管理和接收所需的设备数量也在增加。为了解决众多设备之间的通信问题以及单个网络中设备组合的问题,已经创建了物联网(IoT)概念-基于某些功能的单个网络中设备的组合或特性,此网络进一步与类似网络组合在一起,从而创建更大的网络,依此类推。

什么是MQTT?为什么在IIoT中需要它

  在这样的网络中,设备通过各种接口和通信协议彼此交互。当我们正在考虑物联网概念的工业实现时,应使用具有自己的协议和硬件的工业设备,让我们开始探讨IIoT概念(工业物联网)。

  为了进行通信,设备可以使用各种工业协议。为此,MQTT很受欢迎。

  什么是MQTT?

  MQTT或消息队列遥测传输是一种轻巧的开放式消息传递协议,用于在要求“代码占用量小”或网络带宽受限的远程位置进行数据传输。这些优势允许在M2M系统(机器对机器)和IIoT系统(工业物联网)中实现此协议。

  还存在一种协议变体MQTT-SN(用于传感器网络的MQTT),以前称为MQTT-S,其设计用于不支持TCP / IP网络的嵌入式无线设备,例如ZigBee。

  MQTT协议的功能

  MQTT协议的主要功能:

  ● 异步协议

  ● 紧凑的消息

  ● 在数据传输线连接不稳定的情况下运行

  ● 支持多个服务质量(QoS)级别

  ● 轻松集成新设备

  在应用程序层上,MQTT协议在TCP / IP协议之上工作,并且默认使用端口1883(如果通过SSL连接则使用端口8883)。

MQTT协议的功能

  在MQTT协议中,消息交换在客户端(可能是消息发布者或消息订阅者)与消息代理(例如Mosquitto MQTT)之间进行。

  发布者在MQTT Broker上发送数据,并在消息中指定了明确的主题。订阅者可以根据对相应主题的订阅,从多个发布者接收各种数据。

  MQTT设备使用确定类型的消息来与代理进行通信。主要类型如下:

  ● 连接–建立与Message Broker的连接

  ● 断开连接–断开与消息代理的连接

  ● 发布–在Message Broker中发布有关主题的数据

  ● 订阅–订阅消息代理上的主题

  ● 退订–退订主题

MQTT设备使用确定类型的消息来与代理进行通信。

  消息的结构

  MQTT消息包含以下几部分:

  ● 固定的标头(出现在所有消息中)

  ● 可变标头(出现在某些消息中)

  ● 数据,有效负载(存在于某些消息中)

  固定头

MQTT消息包含哪那几部分

  消息类型-例如:CONNECT,SUBSCRIBE,PUBLISH等。

  每个MQTT数据包特有的标志–这4位用于辅助标志,辅助标志的存在和状态取决于消息类型。

  剩余长度–当前消息长度(可变报头+数据),大小为1到4个字节。

  总体而言,MQTT协议中有15种消息类型:

讯息类型 流向 描述
已预留 0000(0) 禁止的 已预留
连接 0001(1) C *-> S ** 客户端请求连接到服务器
康纳克 0010(2) C <- 连接确认
发布 0011(3) C <-S,C-> S 发布讯息
回送 0100(4) C <-S,C-> S 发布确认
PUBREC 0101(5) C <-S,C-> S 发布收到
公开 0110(6) C <-S,C-> S 发布发行
PUBCOMP 0111(7) C <-S,C-> S 发布完成
订阅 1000(8) C-> S 客户订阅请求
后退 1001(9) C <- 订阅确认
取消订阅 1010(10) C-> S 退订请求
取消订阅 1011(11) C <- 退订确认
PINGREQ 1100(12) C-> S PING请求
平RESP 1101(13) C <- PING回应
断开 1110(14) C-> S 客户端断开连接
已预留 1111(15) 禁止的 已预留

   标志

  固定标头的前4个最高有效位用作特定标志:

固定标头的前4个最高有效位用作特定标志

  DUP –当客户端或MQTT代理提交重发的数据包(在PUBLISH,SUBSCRIBE,UNSUBSCRIBE,PUBREL中使用)时,将设置Duplicate。如果设置了该标志,则变量头必须包含消息ID(消息标识符)。

  QoS –服务质量(0,1,2)

  保留-发布带有保留标志的数据时,代理将对其进行存储。建立对该主题的新订阅后,代理将立即发送带有此标志的消息。仅在PUBISH类型的消息中使用。

  可变标题

  某些标头中存在可变标头。

  它包含以下数据:

  ● 数据包标识符–存在于所有类型的消息中,但以下情况除外:CONNECT,CONNACK,PUBLISH(сQoS <1),PINGREQ,PINGRESP,DISCONNECT

  ● 协议名称–仅在CONNECT消息类型中显示

  ● 协议版本–仅在CONNECT消息类型中存在

  ● 连接标志–指定连接期间客户端行为的标志

可变标题数据

  用户名–如果设置了该标志,则有效负载中必须存在一个用户名(用于客户端身份验证)

  密码–如果设置了此标志,则有效负载中必须存在密码(用于客户端身份验证)

  将会保留-如果该标志设置为1,则代理将存储一个意愿消息。

  Will QoS – Will Message的服务质量。如果设置了意愿标记,则必须存在意愿QoS和意愿保留。

  意志标志-如果设置了该标志,则在客户端断开代理而不发送DISCONNECT命令(如果发生不可预知的关闭,失败等情况)之后,代理将通过所谓的意志消息通知所有已连接的客户端。

  干净会话-如果将该标志设置为0,则代理存储一个会话,所有客户端订阅都将通过客户端的下一个连接发送,并且在客户端断开连接时,代理将接收来自QoS1和QoS2的所有消息。因此,如果该标志设置为1,则到下一个连接,客户端必须再次订阅所有主题。

  ● 会话存在–在CONNACK类型的消息中应用。如果Broker接受将Clean Session设置为1的连接,则必须将Session Present(SP)设置为0。如果Broker接受Clean Session设置为0的连接,则SP中设置的值取决于Broker是否已存储此客户端的会话状态(如果是,则必须将SP设置为1,反之亦然)。会话存在标志使客户端能够确定是否已经存储了会话状态。

  ● 连接返回码–如果代理出于某种原因无法从客户端接收格式正确的CONNACK数据包,则必须在下表的CONNACK数据包的第二个字节中设置适当的值:

返回码响应 描述
0 0x00接受连接 接受连接
1个 0x01连接被拒绝,协议版本不可接受 代理不支持客户端请求的协议版本
2 0x02连接被拒绝,标识符被拒绝 用于连接的客户端的客户端ID不在具有允许ID的列表中
3 0x03连接被拒绝,服务器不可用 已建立网络连接,但MQTT服务不可用
4 0x04连接被拒绝,用户名或密码错误 用户名或密码中的数据格式错误
5 0x05连接被拒绝,未授权 客户端无权连接
6-255 保留以备将来使用

  数据,有效载荷

  通过MQTT消息传输的数据的内容和格式在设备中定义。可以通过从剩余长度中减去变量头的长度来计算数据大小。

  返回目录

  MQTT协议(QoS)中的服务质量

  发送消息时,MQTT支持三个级别的服务质量(QoS)。

  QoS 0最多一次。在此级别上,发布者一次向代理发送一条消息,并且不等待任何响应,即发送并忘记它。

QoS 0最多一次

  QoS 1至少一次。此级别可确保将消息传递到代理,但是可以从发布者复制消息。一旦收到副本,代理将再次将此消息发送给订阅服务器,并将消息接收确认转发给发布服务器。如果发布者未从代理获取PUBACK消息,它将尝试重新传递此数据包,将DUP设置为1。

QoS 1至少一次。

  QoS 2恰好一次。在此级别上,可以确保将消息传递到客户端,并且不可能重复副本。

QoS 2恰好一次。

  发布者向代理发送消息。该消息包含唯一的数据包ID,QoS = 2和DUP = 0。发布者存储未经确认的消息,除非它从代理获得PUBREC响应。代理回复包含相同分组ID的PUBREC消息。收到此消息后,发布者发送具有相同数据包ID的PUBREL。代理必须存储消息副本,直到获得PUBREL。代理收到PUBREL后,它将删除消息副本,并将有关已完成的事务的PUBCOMP消息发送给发布者。

上一篇: 如何使用以太网作为串行端口 下一篇: 2G与4G之间的区别 返回首页
热门推荐
热门标签