IoT—MQTT协议:01-MQTT简介

    技术2022-07-11  151

    一、MQTT协议诞生背景

    到了物联网时代,由于智能硬件的差异,相比互联网终端,硬件配置要低的多,而且智能设备的环境也想多复杂,物联

    网中的数据传输会面临很多问题,比如在网络不稳定的情况下,如果保证数据的传输没有问题,如何保证数据不被重复

    发送,连接断开后如何进行重连,而HTTP协议由于太重量级了,不是适合物联网。

    因此IBM公司为此提出一种轻量级的MQTT协议。

    二、MQTT协议简介

    1、MQTT协议架构

    MQTT协议全称是Message Queuing Telemetry Transport,顾名思义就是消息队列遥测传输协议,它是物联网常用的应用层协议,运行在TCP/IP中的应用层中,依赖TCP协议,因此它具有非常高的可靠性和低的开销量。

    同时它是基于TCP协议的 <客户端-服务器> 模型发布/订阅主题消息的轻量级协议,也是我们常说的发送与接收数据,

    2、MQTT是哪一层的协议?

    众所周知,TCP/IP参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP和UDP位于传输层,应用层常见的

    协议有HTTP、FTP、SSH等。

    MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT。

    3、MQTT相关的名称与功能。

    MQTT协议是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议

    它的最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低

    带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

    4、MQTT通信模型

    (1)、MQTT 协议提供一对多的消息发布,可以降低应用程序的耦合性,用户只需要编写极少量的应用代码就能完成一

    对多的消息发布与订阅,该协议是基于<客户端-服务器>模型.

    其中,MQTT消息的发布者和订阅者都是客户端,服务器只是作为一个中转的存在,将发布者发布的消息进行转发给所

    有订阅该主题的订阅者;发布者可以发布在其权限之内的所有主题,并且消息发布者可以同时是订阅者,实现了生产者

    与消费者的脱耦,发布的消息可以同时被多个订阅者订阅。

    (2)、MQTT协议是基于<客户端-服务器>模型设计的。

    在协议中主要有三种身份:发布者(Publisher)、服务器(Broker)、以及订阅者(Subscriber)。

    发布者和订阅者都是客户端的形式,而中间的服务器即为常说的"云端",作为一个中转站的存在,服务器将发布者发布

    的消息发送给所有订阅此主题的订阅者。

    (3)、MQTT通信模型示意图如下:

    5、MQTT客户端的功能:

    发布消息给其它相关的客户端。 订阅主题请求接收相关的应用消息。 取消订阅主题请求移除接收应用消息。 从服务端终止连接。

    6、MQTT客户服务器功能:

    MQTT 服务器常被称为 Broker(消息代理),它一般为云服务器,比如BTA三巨头的一些物联网平台就是常使用MQTT

    协议,它是位于消息发布者和订阅者之间,以便用于接收消息并发送到订阅者之中,它的功能有:

    接受来自客户端的网络连接请求。 接受客户端发布的应用消息。 处理客户端的订阅和取消订阅请求。 转发应用消息给符合条件的已订阅客户端(包括发布者自身)。

    7、订阅&发布

    订阅包含一个主题过滤器 ( Topic Filter )和一个最大的服务质量( QoS )等级。

    订阅与单个会话( Session )关联。

    会话可以包含多于一个的订阅。

    会话的每个订阅都有一个不同的主题过滤器。

    8、报文格式

    从图中可以看出,MQTT协议的报文只有两个字节,并且每个MQTT命令消息的消息头部都包含了一个固定头部。其中

    一些类型的消息可能还需要一个可变头部和一个有效载荷(可理解为消息体)。

    MQTT报文的固定头部只有2个字节,这也是相比其他协议更加轻量的原因。

    9、消息主题

    主题( topic) : 是附加在消息上的一个标签,该标签与服务器中的所有订阅相匹配)服务器会将消息转发给与标签相匹的每

    个客户端(订阅者)。

    主题过滤器( Topic Filter ) : 订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。

    10、消息类型(Message Type)

    标识计数描述Reserved0保留Connect1客户端到服务端的连接请求ConnACK2服务端对连接请求的响应Publish3发布消息puback4对发布消息的回应pubRec5收到发布消息(保证传输part1)pubRel6释放发布消息(保证传输part2)pubComp7完成发布消息(保证传输part3)subscribe8客户端订阅请求subBack9订阅请求的回应unsubscribe10停止订阅请求unsubBack11停止订阅请求响应pingReq12Ping请求(保持连接)pingResp13Ping响应disconnect14客户端正在断开reserved15保留

    11、服务质量

    QoS0 :最多发送一次消息。在消息发送出去后,接收者不会发送回应,发送者也不会重发消息,消息可能送达一次也可能根本没送达,这个服务质量常用在不重要的消息传递中,因为即使消息丢了也没有太大关系。

    QoS1 :最少发送一-次消息(消息最少需要送达一次,也有可送达多次)。QoS 1的PUBLISH报文的可变报头中包含一个报文标识符,需要PUBACK报文确认。即需要接收者返回PUBACK应答报文。

    QoS2 :这是最高等级的服务质量,有且只有一次。消息丢失和重复都是不可接受的,只不过使用这个服务质量等级会有额外的开销,这个等级常用于支付中,因为支付是必须有且仅有一次成功,总不能没给钱或者给了多次钱吧。

    以上为MQTT协议的简介!

    Processed: 0.013, SQL: 9