一、概念和应用场景
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅范式的“轻量级”消息协议,由 IBM 发布。
IoT 设备要运作,就必须连接到互联网,设备才能相互协作,以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IP,MQTT 协议是基于 TCP/IP 协议栈而构建的,因此它已经慢慢的已经成为了 IoT 通讯的标准。
MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。
优点:代码量少,开销低,带宽占用小,即时通讯协议。
二、MQTT协议原理
实现方式:
实现MQTT协议需要客户端和服务器端通讯完成,在通讯中,MQTT协议中有三种身份:发布者(publish),代理(broker)(服务器),订阅者(subscribe)。其中,消息的发布者和订阅者都是客户端。消息代理是服务器,消息发布者可以同时是订阅者,传输过程如下如所示。
有别于传统的客户端/服务器通讯协议,MQTT协议并不是端到端的,消息传递通过代理,包括会话(session)也不是建立在发布者和订阅者之间,而是建立在端和代理之间。代理解除了发布者和订阅者之间的耦合。
除了发布者和订阅者之间传递普通消息,代理还可以为发布者处理保留消息和遗愿消息,并可以更改服务质量(QoS)等级。
三、相关概念
客户端:
一个使用mqtt协议的应用程序或设备,它总是建立到服务器的网络连接。客户端可以:
1、发布其他客户端可能会订阅的信息
2、订阅其他客户端的消息
3、退订或删除应用程序的消息
4、断开与服务器的连接
服务器:
可以是一个应用程序或者一台设备,它用于发布者和订阅者之间,它可以:
1、接受来自客户的网络连接
2、接受客户发布的应用消息
3、处理来自客户端的订阅和退订请求
4、向订阅的客户转发应用程序消息
主题:
连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。
一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,/world 和 emq/emqtt/emqx 是有效的主题。如腾讯云中订阅的云端回复消息为
“$thing/down/service/设备ID/设备名”
QoS(消息传递的服务质量水平):
服务质量,此标志表明此主题范围内的消息传送到客户端所需的一致程度。有三种取值:
值 0:不可靠,消息最多发送一次。如果当时客户端不可用,则会丢失该消息。
值 1:消息应传送至少 1 次。确保消息到达,但消息重复可能会发生。
值 2:确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
遗愿机制/遗嘱机制:
使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
-
Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
-
Testament:遗嘱机制,功能类似于Last Will
四、MQTT协议中的方法
MQTT协议中定义了一些方法(也被称为动作),表示对确定资源进行操作。资源指服务器上的文件或输出。主要方法有:
-
Connect。等待与服务器建立连接。
-
Disconnect。等待MQTT客户端完成所做的工作,并与服务器断开TCP/IP会话。
-
Subscribe。等待完成订阅。
-
UnSubscribe。等待服务器取消客户端的一个或多个topics订阅。
-
Publish。MQTT客户端发送消息请求,发送完成后返回应用程序线程。
五、MQTT数据包结构
MQTT 协议通过交换预定义的 MQTT 控制报文来通信。
一个MQTT数据包结构包括:固定头部,可变头部,消息体(payload)三部分组成,MQTT数据包结构如下:
1、固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
2、可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
3、消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。只有CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息有Payload消息体:
-
CONNECT,消息体内容主要是:客户端的ClientID、订阅的Topic、Message以及用户名和密码。
-
SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。
-
SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
-
UNSUBSCRIBE,消息体内容是要取消订阅的主题。
数据包组成详细描述:
数据包组成的详细内容与数据包长度根据MQTT控制报文格式的不同而不同。MQTT控制报文类型共有14种
控制报文的类型
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|














![表情[chi]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/chi.gif)



暂无评论内容