MQTT物联网消息传递标准

MQTT物联网消息传递标准

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种极其轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备

技术开发 编程 技术框架 技术发展

 

MQTT物联网消息传递标准

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种极其轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种极其轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备。如今,MQTT被广泛用于汽车,制造业,电信,石油和天然气等行业。

MQTT协议涉及两个主题:客户端和代理。MQTT代理是服务器,而客户端是连接的设备。当设备(或客户端)希望将数据发送到服务器(或代理)时,称为发布。当操作相反时,它称为subscription。

如果从订阅客户端到代理的连接断开,则代理将缓冲消息,并在其重新联机时将消息推送给订阅者。如果从发布客户端到代理的连接断开而没有通知,则代理可以关闭连接,并向订阅者发送包含来自发布者指令的缓存消息。

轻巧高效

MQTT客户端非常小,需要最少的资源,因此可以在小型微控制器上使用。MQTT消息头很小以优化网络带宽。

双向通讯

MQTT允许设备到云之间以及云到设备之间的消息传递。这使得易于将消息广播到事物组。

百万级连接

MQTT可以扩展以与数百万个IoT设备连接。

可靠的消息传递

对于许多物联网用例而言,消息传递的可靠性至关重要。这就是MQTT具有3种定义的服务质量级别的原因:0-最多一次,1-至少一次,2-恰好一次

不可靠网络的支持

许多物联网设备通过不可靠的蜂窝网络进行连接。MQTT对持久性会话的支持减少了将客户端与代理重新连接的时间。

安全启用

MQTT使您可以轻松地使用TLS加密消息并使用现代身份验证协议(例如OAuth)对客户端进行身份验证。

MQTT如何工作

MQTT会话分为四个阶段:连接,认证,通信和终止。客户端首先使用 代理操作员定义的标准端口或自定义端口,创建到代理的传输控制协议/ Internet协议(TCP / IP)连接  。创建连接时,重要的是要认识到,如果服务器提供了可重用的客户端标识,则服务器可能会继续执行旧会话。

使用安全套接字层(SSL)/传输层安全性(TLS)的标准端口是用于非加密通信的1883和用于加密通信的8883 。在SSL / TLS握手期间,客户端将验证  服务器证书并验证服务器。客户端还可以在握手期间向代理提供客户端证书。代理可以使用它来认证客户端。尽管不是MQTT规范的特定组成部分,但代理已习惯使用SSL / TLS客户端证书来支持客户端身份验证。

因为MQTT协议旨在成为资源受限和IoT设备的协议,所以SSL / TLS可能并非始终是一个选择,在某些情况下可能是不希望的。在这种情况下,身份验证以明文形式的用户名和密码表示,由用户端发送给服务器-这是CONNECT / CONNACK数据包序列的一部分。此外,某些经纪人,尤其是在互联网上发布的开放式经纪人,将接受匿名客户。在这种情况下,用户名和密码将留为空白。

MQTT之所以称为轻量级协议,是因为其所有消息的代码占用量都很小。每条消息均由一个固定的报头(2  个字节)  和一个可选的可变报头,一个消息有效载荷(限制为256 MB信息)和一个服务质量(QoS)级别组成。

在通信阶段,客户端可以执行发布,订阅,取消订阅和ping操作。发布操作将二进制   数据块(内容)发送到发布者定义的主题。

MQTT支持最大为256 MB的消息二进制大对象(BLOB)。内容的格式将取决于应用程序。主题订阅是使用SUBSCRIBE / SUBACK数据包对进行的,取消订阅是使用UNSUBSCRIBE / UNSUBACK数据包对进行的。

主题字符串使用特殊的定界符(正斜杠(/))形成自然的主题树。客户可以使用特殊的通配符来订阅主题树中的整个分支,也可以取消订阅。有两个通配符:单级通配符,加号(+);还有一个多级通配符,即井号(#)。特殊主题字符,美元字符($),从任何根通配符订阅中排除主题。通常,$用于传输服务器特定消息或系统消息。

客户端在通信阶段可以执行的另一项操作是 使用PINGREQ / PINGRESP数据包序列对代理服务器执行  ping操作。此数据包序列大致转换为ARE YOU ALIVE / YES I ALIVE。此操作除了维持实时连接并确保网关  或路由器未关闭TCP连接外,没有其他功能  。

当发布者或订阅者想要终止MQTT会话时,它将DISCONNECT消息发送到代理,然后关闭连接。这被称为正常关闭,因为它通过提供客户端标识并恢复其中断位置,使客户端能够轻松地重新连接。

如果断开连接突然发生而发布者没有时间发送DISCONNECT消息,则代理可能会向订阅者发送订阅者的消息,表明该代理先前已缓存。该消息称为“  最后遗嘱”,它为订户提供了有关发布者意外死亡的处理方法的说明。

MQTT协议的历史

MQTT由IBM的Andy Stanford-Clark博士和Arcom的Arlen Nipper(现为Eurotech)于1999年创建。MQTT的创建是一种经济高效且可靠的方式,可将石油和天然气行业中使用的监视设备连接到远程企业服务器。当面临寻找将数据从沙漠中的管道传感器推送到异地监督控制和数据采集(SCADA)系统的挑战时,他们决定采用基于事件的TCP / IP发布/订阅拓扑,   以保持卫星链路传输成本下降。

尽管MQTT仍与IBM紧密联系,但它现在是由结构化信息标准促进组织(OASIS)监督的开放协议。

尽管顾名思义,MQTT并不是原始IBM MQSeries的一部分;但是,从7.1版开始,它在WebSphere MQ中可用。MQTT以前被称为SCADA协议,MQ Integrator SCADA设备协议(MQIsdp)和WebSphere MQTT(WMQTT),尽管所有这些变体都已废弃。

MQTT协议应用程序和用例

Facebook当前在其Messenger应用中使用MQTT,这不仅是因为该协议节省了手机到电话的消息收发过程中的电池电量,而且还因为该协议可以使消息有效地以毫秒(ms)的速度传递,尽管全球互联网连接不一致。

大多数主要的云服务提供商(包括Amazon Web Services(AWS),Google Cloud,IBM Cloud和Microsoft Azure)都支持MQTT。

MQTT非常适合使用M2M和IoT设备进行诸如实时分析,预防性维护和监视等环境中的应用,这些环境包括智能家居,医疗保健,物流,工业和制造业。

物联网中的MQTT

MQTT是有关物联网的最常用协议之一。MQTT使资源受限的IoT设备可以将有关给定主题的信息发送或发布到充当MQTT消息代理的服务器。然后,代理  将  信息推送给先前已订阅该主题的那些客户端。对人类而言,主题看起来像分层文件路径。客户可以订阅主题层次结构的特定级别,也可以使用通配符订阅多个级别。

MQTT的挑战:安全性,互操作性和认证

由于MQTT协议在设计时并未考虑安全性,因此该协议传统上已在安全后端网络中用于特定于应用程序的目的。MQTT的主题结构可以轻松地形成一棵巨大的树,并且没有明确的方法将树划分为可以联合的较小逻辑域。这使得创建全局可扩展的MQTT网络变得很困难,因为随着主题树大小的增加,复杂性也会增加。

MQTT的另一个负面方面是它缺乏互操作性。由于消息有效负载是二进制的,而没有有关其编码方式的信息,因此可能会出现问题-尤其是在开放体系结构中,来自不同制造商的不同应用程序应该可以无缝地协同工作。

如前所述,MQTT在协议中内置了最少的身份验证功能。用户名和密码以明文形式发送,并且任何安全使用MQTT的形式都必须使用SSL / TLS,但不幸的是,它不是轻量级协议。

使用客户端证书对客户端进行身份验证不是一个简单的过程,并且在MQTT中无法控制谁拥有主题以及可以在主题上发布信息,除非使用专有的带外方法。这样可以很容易地有意或无意地将有害消息注入网络。

此外,消息接收者无法知道谁发送了原始消息,除非该信息包含在实际消息中。必须以专有方式在MQTT之上实现的安全功能会增加代码占用空间,并使实现更加困难。

服务质量水平

QoS是指消息的发送者和消息的接收者之间的协议。QoS将在引用特定消息时定义传递的保证。QoS是MQTT的一项关键功能,使客户端能够在三个服务级别之间进行选择。

三种不同的QoS级别决定了MQTT协议如何管理内容。尽管更高级别的QoS更加可靠,但是它们具有更高的延迟和带宽要求,因此订阅客户端可以指定他们希望接收的最高QoS级别。

MQTT服务质量级别

最简单的QoS级别是未确认的服务。此QoS级别使用PUBLISH数据包序列。发布者一次将消息发送给代理,而代理一次将消息传递给订阅者。没有适当的机制来确保已正确接收消息,并且代理不会保存消息。该QoS级别也被称为  最多一次,QoS0或发射后不管。

第二QoS级别是确认服务。此QoS级别在发布者与其代理之间以及代理与订阅者之间使用PUBLISH / PUBACK数据包序列。确认包会验证是否已接收到内容,如果未及时收到确认,重试机制将再次发送原始内容。这可能导致订户接收同一消息的多个副本。该QoS等级也可以被称为至少一次或QoS1。

第三QoS级别是有保证的服务。此QoS级别通过两对数据包传递消息。第一对称为PUBLISH / PUBREC,第二对称为PUBREL / PUBCOMP。这两对确保无论重试次数如何,邮件都只会传递一次。该QoS等级也可以被称为恰好一次或QoS2。

技术开发 编程 技术框架 技术发展