查看原文
其他

物联网技术系列之MQTT协议详解

中国光大银行 中国光大银行科技创新实验室 2023-03-29

物联网通过网络及传感器技术将分散在各地的设备联系起来,进行信息交换及交互控制,实现智能化感知与管理。但是随着物联网的快速发展,海量物联设备的接入给传统web通信协议带来很大的挑战,而MQTT协议的出现可以解决网络不可靠、终端设备资源有限等问题。本文将就MQTT协议的特点、消息格式做深入分析。


MQTT(Message Queuing Telemetry Transport),翻译为消息队列遥测传输协议,起初主要解决卫星与石油管道监测数据传输的问题,最大限度减少电池消耗及带宽占用。MQTT是一种轻量级“发布&订阅”方式工作的消息协议,主要特征是简单、轻便、易于实现,这些特征比较适用于物联网领域,比如传感器与服务器的通信、传感器信息采集等。



基本特点

1. 发布&订阅模式实现一对多的消息分发机制,具体如下所示:



代理服务器broker集消息存储、转发功能于一体,解耦发布者与订阅者。发布者与订阅者之间的消息传递按照主题(topic)进行,发布者发布消息并不要求订阅者连接到broker,只要订阅者之前订阅过该主题,那么在它连接到broker之后就可以收到发布者在它离线期间发布的保持持久会话消息。


2. 承载在TCP/IP协议上的应用层协议。


3. 提供三种不同QoS(服务质量)的消息传递机制。



消息格式

每个MQTT消息都有一个固定报文头,有些消息还需可变报文头及报文体,具体如下所示:


2.1

固定报文头

固定报文头由2个字节组成,第1个字节包含4个字段:MessageType、DUP Flag、QoS Level、RETAIN,第2个字节Remaining length声明后续可变报文头和报文体的长度。具体如下所示:


其中MessageType由4 bit的无符号整数表示,其含义如下:


QoS Level占2 bit,用来表示消息传递安全机制,其值解释如下:


  • 0:最多一次(at most once),sender发送的消息,receiver最多只能收到一次,重复或者丢失消息的现象是存在的;

  • 1:至少一次(at least once),receiver一定会收到发布的消息,但是可能收到重复消息;

  • 2:有且仅有一次(exactly once),保证receiver一定能收到消息,而且只能收到一次。sender发送消息失败会重试,直到receiver成功收到该消息,同时保证receiver不会因为消息重传而收到重复的消息。


2.2

可变报文头

可变报文头位于固定报文头和报文体之间,不同的消息类型携带不同的信息,携带的信息主要有以下部分组成。


(1)协议名称:协议的名称,在CONNECT消息中是一个以UTF编码的“MQTT”字符串。


(2)协议版本:表示当前协议的版本。


(3)连接标志:包含多个标志位,具体如下:

① Clean Session(清除会话):客户端断线,服务器是否需要存储客户端的订阅信息。Clean Session=0,客户端会收到离线期间QoS=1或2的消息;Clean Session=1,客户端每次重新上线时需重新订阅topic,且不会订阅到离线期间的消息。

② Will Flag:客户端连接broker时会设立一个遗愿,这个遗愿会保存在broker。当发布者非正常原因与broker断开连接,broker会将该遗愿发布订阅者,同时Will Flag置为1,遗愿报文Will Message和遗愿主题Will Topic会体现在报文体Payload中。

③ Will QoS:表示Will Flag=1遗愿消息的服务质量要求。

④ Will Retain:表示Will Flag=1遗愿消息是否需要broker保存。

⑤ Username Flag和Password Flag用来表示CONNECT消息的报文体是否包含用户名密码,Username Flag=1,Password Flag=1表示CONNECT消息的报文体存在用户名密码信息。


(4)心跳时长:此字段定义了broker接收客户端消息的最大时间间隔,如果超过该时间间隔没收到消息,则认为客户端已掉线。


(5)连接返回码:此字段出现在CONNECTACK消息的可变报文头中,0表示接入成功。


(6)主题名称:此字段出现在PUBLISH消息,表示消息发布的topic。


(7)消息id:该字段只出现在QoS=1或者QoS=2的消息中,该字段必须是独一无二的,每发送一次消息,对应的消息ID加1。


2.3

Encoder

有些消息有报文体,有些消息没有报文体,比如PUBLISH消息的报文体就是消息内容,而CONNECT消息的报文体包括Will topic、Will Message、Username、Password等内容。



总结

以上介绍了MQTT协议的基本特点及报文格式,发布&订阅的异步消息通信模式,可以解决不可靠或高延迟的网络通信问题。提供一对多的消息发布,可以将消息传送到网络上的所有设备。因为报文的精简,传输开销小,降低网络流量,所有才可以高效传输数据。MQTT提供一个有质量的服务,包括消息应答、存储和重传,保证消息被正确接收。正是MQTT以上特质,才能在物联网领域扮演着重要的角色。


作者 | 张淑文

视觉 | 王朋玉

统筹 | 祖德光

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存