MQTT简介

MQTT简介

什么是MQTT

MQTT官方文档的定义是:MQTT是一个基于客户端、服务端的发布/订阅消息传输协议。它的特点包括轻量级、开放、简单,如此设计是为了方便应用。这些特性使之成为很多应用场景的理想选择,包括很多受限环境,比如机器之间(Machine to Machine, M2M)通信、需要一小段脚本空间的IoT内容和网络带宽很昂贵的场景。

MQTT的一个特点“轻量级”,意味着它在被设计时,简单、高效并且不是资源密集型的。MQTT被设计时,重点关注在不稳定、带宽有限的网络上发送小量数据。和其他协议相比,MQTT拥有更少的代码量、开销低、功耗低。由于其最小的数据包开销,与HTTP相比,MQT在通过网络传输数据时表现出色。这也使之非常适合用于处理能力、内存和电池寿命有限的设备,比如传感器和其他IoT设备。

MQTT使用二进制消息格式在客户端和代理之间通信,这和其他以文本格式为基础的协议形成鲜明对比,比如HTTP或SMTP。

Bit

7

6

5

4

3

2

1

0

byte 1

MQTT Control Packet type

Flags specific to each MQTT Control Packet type

byte 2…

Remaining Length

MQTT Version 3.1.1 (oasis-open.org)

MQTT之所以使用二进制格式,是为了减小消息的大小,并增加通信的效率。通过使用二进制,可以将需要传输的数据最小化并降低消息处理所需的功耗。这使MQTT刚好适用于低带宽或低功耗场景,比如资源有限的IoT设备。同样被用在需要实时数据传输的企业系统中。

另一个重要的方面就是该协议在客户端非常容易实现。易用性是MQTT在发展过程中的一个关键方面,使其非常适合资源有限的受限设备。

MQTT在IoT、工业IoT(IIoT)和M2M应用中使用非常广泛。比如:

  1. 智能家居:MQTT用来连接智能家居中的各种设备,包括智能恒温器、灯泡、安全摄像头和其他电器。使用户可以通过APP远程控制家中的设备。
  2. 工业自动化:MQTT被用来连接工厂中的机器、传感器和其他工业设置。允许实时监控、流程控制,提高效率,减少停工。
  3. 农业:MQTT被应用在农业中,监控土壤湿度、天气状况、农作物生长情况,帮助农民优化灌溉和其他管理。
  4. 医疗保健:MQTT被用来用来连接一些医疗器械和传感器,例如血糖仪和心率监测仪。这样就可以远程监控患者,改善病人的治疗效果并降低医疗保健成本。
  5. 交通:MQTT可以用来连接汽车和其他交通系统,做到对车轴的实时监控和跟踪,增加安全性,优化车流。

现在我们对MQTT及其特点有了一个基本的了解,接下来让我们对其进行深入的了解,看其如何发展成为流行的通信协议。当我们对其发展历程有一个了解之后,会对MQTT的各方面及特点有更好的认识。

MQTT起源

1999年,当通过卫星连接输油管道时,为了能够最小化电量流失和带宽使用,IBM的Andy Stanford-Clark和Arcom的Arlen Nipper开发了MQTT协议,他们为该协议定义了几个要点,包括:

  • 实现简单
  • 数据传输质量
  • 轻量和带宽利用率
  • 数据无关性
  • 持续会话感知

这些目标依旧是MQTT的核心。但是,协议的重点已从原来的嵌入式系统变了开发的IoT应用场景。

在之后的10年间,IBM一直在内部使用该协议,直到2010年,他们发布了MQTT3.1作为免费版本。重点从专有的嵌入式系统到开放的IoT应用,使人们对MQTT这个简称开始产生疑惑。起初它代表MQ Telemetry Transport,其中MQ代表IBM开发的用来支持MQ telemetry transport的一系列产品,MQTT并不是简称。但现在它简单的只是该协议的名称。

当Andy Stanford-Clark和Arcom的Arlen Nipper在1999年创建这个协议时,他们以IBM产品命名。虽然许多资源将MQTT打上消息队列协议的标签,这并不完全准确。虽然在某些场景中可以作为消息队列,MQTT并不是一个传统的消息队列解决方案。

2011年,IBM将MQTT的客户端实现贡献给了Eclipse基金会新建的Paho项目,一个独立的、非营利性的向社会提供开源软件的组织。这对该协议是一个有意义的发展,因为这将为MQTT创造更多生态系统。通过将MQTT客户端实现贡献给一个像Paho的开源项目,IBM允许开发者接入该协议,在其上构建他们自己的应用。这一步有助于提高MQTT在开发者社区的知名度和采用率。

OASIS在MQTT标准化中的角色

2014年,OASIS宣布将接管MQTT的标准化,目标是建立一个开放、中立的协议。创建于1993年,作为一个非营利的组织,OASIS(Organization for the Advancement of Structured Information Standards)是一个国际性组织,为互联网和相关技术开发开放标准。

它已经为工业开发了很多重要的标准,比如云计算、安全和IoT,包括AMQP、SAML、DocBook。MQTT的标准化进行了一年时间,在2014年12月29日,MQTT成为被OASIS承认的官方标准。

OASIS参与MQTT,对其作为广泛采用的物联网协议的成功至关重要。作为一个中立、第三方的组织,OASIS确保该协议作为一个开放的标准被维护起来,任何人都可以实现它,而无需授权费用,没有专有的限制。

另外,OASIS为社会提供了一个论坛,能够让大家聚在一起,合作改进该协议,进而发展出了MQTT5,该协议的最新版本,提供了一些新的功能改进协议的稳定性和扩展性。

2019年3月,OASIS批准了新的MQTT 5规范。此版本为MQTT引入了部署在云平台上的物联网应用程序所需的新功能,以及实现关键任务消息传递需要更多可靠性和错误处理的案例

探索MQTT:主题、订阅、QoS、持久消息等

MQTT消息模型:它是如何工作的和为什么它对IoT&IIoT重要

MQTT的消息模型基于主题和订阅。主题是供订阅和发布消息的字符串。主题是分层的,可以包含以斜杠分割的多个层级,类似一个文件路径,如:

myhome/kitchen/smartdishwasher

订阅是用来指定客户端感兴趣的主题来接收信息。

当客户端订阅一个主题,实际是告诉代理它有兴趣的接收该主题发布的消息。然后代理会跟踪这个订阅,推送发布到该主题的任何消息到这个客户端。

要注意的是一个客户端可以同时订阅多个主题,一个主题可以有多个订阅者。这样就是一个灵活、可扩展的消息系统。

除了主题和订阅,MQTT也支持通配符,可用于订阅与特定模式匹配的多个主题。两类通配符,一类是单层级的+,在一个主题中匹配一个层级,另一类是代表多层级的#,在一个主题中匹配其后的所有层级。

总之,MQTT的消息模型通过主题和订阅提供了一个灵活、可扩展的方式来发布和订阅消息。通配符的使用增加了额外的灵活性,允许通过一个订阅来订阅多个相关的主题。

理解MQTT的消息模型非常关键,同样关键的还有服务质量(QoS)等级,用来保证消息传输的可靠性。

理解MQTT的QoS等级

MQTT支持有三个QoS等级:QoS 0,QoS 1,QoS 2:

  • QoS 0: 该等级提供“最多一次”的传输,消息被发送后,没有确认,可能丢失。这是最低的QoS等级,被用在消息丢失或消息不重要的场景中。比如,传感器发送数据,其中偶尔的数据丢失不会对整体结果产生重大影响。
  • QoS 1: 该等级提供“最少一次”的传输,消息会被确认,如果需要消息会重新发送。使用QoS 1,发布者发送数据到代理,在处理前等待确认。如果代理在设定时间内没有响应,发布者会重新发送消息。该等级被用在消息丢失不可接受的场景中,但消息重复可以接受。比如发送指令给设备,指令丢失会产生严重的结果,但指令重复却不会。
  • QoS 2: 该等级提供“只有一次”的传输,消息会被确认,直到被一个订阅者确实收到。是最高的QoS等级,被应用在消息丢失或重复都不可接受的场景中。发布者和代理会进行两步确认过程,其中代理存储消息,直到订阅者收到并确认消息为止。该等级通常用于关键消息,如金融交易或紧急警报。

需要注意的是越高的QoS等级,通常需要更多的资源,可能会导致延迟和网络流量增加。所以,要结合你自己应用的需要选择合适的QoS等级。

除了三个等级的QoS,MQTT同样支持消息持久化,确保在网络或服务器出问题时,消息不会丢失。

理解MQTT消息持久化

消息持久化是MQTT的一个重要功能,确保在网络或服务器出问题时,消息不会丢失。在MQTT中,消息持久化是通过将消息存储到服务器上,直到被发送到订阅者。

MQTT提供三种消息持久化选择:

  • 不持久: 这是MQTT的默认配置,在该模式下,消息没有被存储在服务器上,如果服务器或网络出问题,消息就会丢失。这种模式适用于消息不重要并可以轻易重新创建的场景。
  • 排队持久化: 在该模式下,消息被存储在服务器上,直到被发送到订阅者,如果订阅者不可用,消息会被排入队列,直接订阅者重新连接。排除持久化适用于订阅者不总是在线的场景,或者订阅者需要接收所有消息,即使消息被发送时订阅者不在线。
  • 确认持久化: 该模式提供最高等级的持久化。在该模式下,消息被存储在服务器上,直到被发送到订阅者,订阅者必须确认收到消息,否则消息会被重新发送。该模式适用于消息确定被订阅者接收和处理的场景。

在MQTT中为了配置消息持久化,用来做代理的处理MQTT连接的软件必须支持选择持久化选项,可以通过配置文件或接口进行配置。

需要注意的是,消息持久化需要在性能和存储方面进行权衡。持久化的消息越多,代理就需要越多的存储和处理资源。所以,根据应用的需要选择合适的持久化等级很重要

MQTT安全:保护你的IoT设备

对于安全,MQTT支持TLS加密来确保客户端和服务端的通信安全。有几种策略可以保护MQTT部署,比如加密通信,实施强身份验证和访问控制等。

MQTT安全是一个复杂的主题,这里不再详谈。如果你在自己的应用中使用了MQTT,咨询一个安全专家非常重要,遵守最佳实践来确保MQTT安全实施。

总结

现在知道 MQTT 是一种轻量级且高效的协议,已成为IoT和 M2M 应用的热门选择。凭借其简单的发布/订阅消息传递模型,它允许设备和系统之间的灵活通信。MQTT 的历史表明,它从 IBM 对可靠消息传递协议的需求演变为现在由 OASIS 维护的广泛采用的标准。上面已经介绍了 MQTT 的功能和特性,包括其 QoS 级别和安全注意事项,并探讨了使用 MQTT 的实际应用。后续将介绍 “MQTT 的发布和订阅模式”。

你可能感兴趣的:(MQTT,中间件,网络协议)