mqtt协议:设计规范,协议原理及主要特性

2021-12-20 09:25:27 admin 387

1、简述

Mqtt(messagequeuingtelemetrytransport)是一种基于发布/订阅模式通信协议的“轻量级”通信协议,它基于TCP/IP协议,由IBM于1999年发布。mqtt的最大优点是,它可以用很少的代码和有限的带宽为连接的远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通信协议,它广泛应用于物联网、小型设备、移动应用等领域。

Mqtt是一种基于客户机-服务器的消息发布/订阅传输协议。Mqtt协议轻量级、简单、开放且易于实现。这些特点使其具有广泛的适用性。在许多情况下,包括受限环境,如机器对机器(M2M)通信和物联网(IOT),它已通过卫星链路、偶尔的拨号医疗设备、智能家居和一些小型设备广泛应用于通信传感器中。


5g/4g工业路由网关


2、设计规范

由于物联网的环境非常特殊,mqtt遵循以下设计原则:

(1)精简和不增加可有可无的功能;

(2)发布/订阅(Pub/sub)模式,以促进传感器之间的消息传输;

(3)允许用户动态创建主题,零运维成本;

(4)将传输容量降至最低,以提高传输效率;

(5)考虑了低带宽、高延迟、网络不稳定等因素;

(6)支持连续会话控制;

(7)了解客户机的计算能力可能非常低;

(8)提供服务质量管理;

(9)假设数据未知,则不需要传输数据的类型和格式来保持灵活性。

3、主要特征

Mqtt协议设计用于低带宽和不可靠网络中远程传感器和控制设备之间的通信。它具有以下主要特点:

(1)使用发布/订阅消息模式可提供一对多消息发布和解耦应用程序。

这与XMPP非常相似,但mqtt的信息冗余比XMPP少得多,因为XMPP使用XML格式的文本传输数据。

(2)屏蔽有效负载内容的消息传输。

(3)使用TCP/IP提供网络连接。

主流mqtt基于TCP连接推送数据,但也有一个基于UDP的版本,称为mqttsn。因为这两个版本基于不同的连接方法,所以它们的优缺点自然不同。

(4)有三种类型的消息发布服务质量:

“至少一次”,消息发布完全取决于底层TCP/IP网络。可能会发生消息丢失或重复。此级别可用于以下情况。主读取记录是否丢失并不重要,因为在不久的将来会有第二次传输。此方法主要用于推送普通应用程序。如果您的智能设备在推送消息时未连接到Internet,并且过去未收到推送,则在再次联网时将不会收到推送。

“至少一次”,以确保消息到达,但可能会发生消息重复。

“仅一次”以确保消息到达一次。此级别可用于某些要求严格的计费系统。在计费系统中,重复或丢失消息将导致错误结果。这项最高质量的消息发布服务还可用于推送即时消息应用程序,以确保用户接收并只接收一次。

(5)传输量小,开销低(固定长度报头为2字节),协议切换最小化,以减少网络流量。

这就是为什么在导言中说它非常适合“传感器和服务器之间的通信以及物联网领域的信息收集”。您应该知道,嵌入式设备的计算能力和带宽相对较弱。使用此协议传输消息非常合适。

(6)一种通过使用最后遗嘱和遗嘱特征通知相关方客户端异常中断的机制。

遗言:遗言机制,用于通知同一主题下的其他设备发送遗言的设备已断开连接。

遗嘱:遗嘱机制,类似于最后遗嘱。

4、Mqtt协议原理

4.1mqtt协议的实现模式

mqtt协议的实现需要客户端和服务器之间的通信。在通信过程中,mqtt协议中有三个标识:发布者、代理(服务器)和订阅者。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

mqtt传输的消息分为两部分:主题和有效负载:

(1)主题可以理解为消息的类型。订阅后,订阅方将收到该主题的消息内容(有效载荷);

(2)有效载荷可以理解为消息的内容,指订户要使用的特定内容。

4.2网络传输和应用信息

Mqtt将构建底层网络传输:它将建立客户端到服务器的连接,并在两者之间提供有序、无损、基于字节流的双向传输。

当应用程序数据通过mqtt网络发送时,mqtt将把服务质量(QoS)和与其相关的主题关联起来。

4.3mqtt客户端

使用mqtt协议的应用程序或设备。它始终与服务器建立网络连接。客户可以:

(1)发布其他客户可能订阅的信息;

(2)订阅其他客户端发布的消息;

(3)取消订阅或删除应用程序消息;

(4)断开与服务器的连接。

4.4mqtt服务器

Mqtt服务器称为“MessageBroker”,它可以是应用程序或设备。它位于消息发布者和订阅者之间。它可以:

(1)接受客户的网络连接;

(2)接受客户发布的申请信息;

(3)处理客户的订阅和取消订阅请求;

(4)将应用程序消息转发给订阅的客户。

4.5mqtt协议中的订阅、主题和会话

1、订阅

订阅包含主题筛选器和最大服务质量(QoS)。订阅与会话相关联。一个会话可以包含多个订阅。每个会话中的每个订阅都有不同的主题筛选器。

2、会议

在每个客户机与服务器建立连接后,这是一个会话,客户机和服务器之间存在状态交互。网络之间存在会话,或者会话可能跨越客户端和服务器之间的多个连续网络连接。

3、主题名称

连接到与服务器订阅匹配的应用程序消息的标签。服务器向订阅匹配标记的每个客户端发送一条消息。

4、主题过滤器

主题名称的通配符筛选器,在订阅表达式中用于表示订阅匹配的多个主题。

5、载荷(有效载荷)

消息订阅者接收的特定内容。

4.6mqtt协议中的方法

Mqtt协议定义了一些方法(也称为操作)来表示特定资源上的操作。此资源可以表示预先存在的数据或动态生成的数据,具体取决于服务器的实现。一般来说,资源是指服务器上的文件或输出。主要方法是:

(1)连接。等待与服务器建立连接。

(2)断开。等待mqtt客户端完成其工作,并断开TCP/IP会话与服务器的连接。

(3)订阅。等待订阅完成。

(4)取消订阅。等待服务器从客户端取消订阅一个或多个主题。

(5)出版。mqtt客户机发送消息请求,并在发送后返回到应用程序线程。

5、Mqtt协议包结构

在mqtt协议中,mqtt数据包由固定报头、可变报头和有效负载组成。mqtt数据包的结构如下:

(1)固定标题。它存在于所有mqtt数据包中,表示数据包的数据包类型和数据包类标识。

(2)可变标题。它存在于某些mqtt数据包中。数据包类型确定变量头是否存在及其特定内容。

(3)消息正文(有效负载)。它存在于某些mqtt数据包中,表示客户端接收到的特定内容。

5.1mqtt固定头

固定头存在于所有mqtt包中,其结构如下:

5.1.1mqtt数据包类型

位置:字节1中的第7-4位。

对应于4位无符号值,类型、值和说明如下:

5.1.2识别位

位置:字节1中的第3-0位。

在不使用标识位的消息类型中,标识位用作保留位。如果接收到无效标志,则接收端必须关闭网络连接:

(1)DUP:已发布消息的副本。它用于确保信息的可靠传输。如果设置为1,则messageid将添加到以下可变长度,需要回复确认以确保消息传输完成,但不能用于检测重复的消息传输。

(2)QoS:发布消息的服务质量,即消息传递的数量

00:最多一次,即<=1

01:至少一次,即>=1

10:一次,即:=1

11:保留

(3)Retain:发布保留ID,表示服务器希望保留这次推送的信息。如果出现新订户,请将消息推送到该订户。如果是,将其推送到当前订户并释放。5.1.3剩余长度

地址:字节2。

固定标头的第二个字节用于存储可变长度标头和消息正文的总大小,但不能直接存储。这个字节可以扩展。其保存机制是前7位用于保存长度,最后一位用作标识。最后一位为1时,表示长度不足,需要用两个字节保存。例如:将以下大小计算为0

5.2mqtt可变磁头

mqtt数据包包含一个位于固定头和有效负载之间的可变头。可变报头的内容因数据包类型而异。它通常用作数据包的标识:

许多类型的数据包包括一个2字节的数据包标识字段。这些类型的数据包包括:发布(QoS>0)、puback、pubrec、pubrel、pubcomp、订阅、订阅、取消订阅、取消订阅。

5.3有效载荷消息正文

有效负载消息正文是mqtt数据包的第三部分,它包含四种类型的消息:connect、subscribe、suback和unsubscribe:

(1)Connect,消息体的主要内容有:客户端ID、订阅主题、消息、客户端用户名和密码。

(2)订阅,消息体的内容是一系列要订阅的主题和QoS。

(3)消息体的内容是服务器确认并回复subscribe应用的主题和QoS。

(4)取消订阅:消息正文的内容是要订阅的主题。


标签: MQTT
网站首页
解决方案
产品中心
在线咨询