IoT—MQTT协议:01-MQTT简介

一、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)

标识 计数 描述
Reserved 0 保留
Connect 1 客户端到服务端的连接请求
ConnACK 2 服务端对连接请求的响应
Publish 3 发布消息
puback 4 对发布消息的回应
pubRec 5 收到发布消息(保证传输part1)
pubRel 6 释放发布消息(保证传输part2)
pubComp 7 完成发布消息(保证传输part3)
subscribe 8 客户端订阅请求
subBack 9 订阅请求的回应
unsubscribe 10 停止订阅请求
unsubBack 11 停止订阅请求响应
pingReq 12 Ping请求(保持连接)
pingResp 13 Ping响应
disconnect 14 客户端正在断开
reserved 15 保留

11、服务质量

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

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

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

以上为MQTT协议的简介!

猜你喜欢

转载自blog.csdn.net/weixin_43335226/article/details/107061316