物联网基础:MQTT协议

消息队列遥测传输 (MQTT : Message Queuing Telemetry Transport)是一种物联网(机器到机器)的通信协议。它和HTTP一样在TCP / IP协议之上工作, 在物联网大规模数据的情境之下,之前HTTP的请求/回答(Request/Response)模式不再合适,取而代之的是MQTT的发布/订阅(Publish/Subscribe)模式。 它适用于需要“小代码占用”或网络带宽有限的远程连接。 

目前MQTT已经成为物联网领域的主流协议,范围超过其它协议(类似LWM2M,CoAP等)。

“MQTT是一种客户端服务器发布/订阅消息传输协议。 它重量轻,开放,简单,设计简单,易于实施。 这些特性使其非常适合在许多情况下使用,包括受限制的环境,例如机器到机器(M2M)和物联网(IoT)环境中的通信,其中需要小的代码占用空间和/或网络带宽非常宝贵。”

来自官方MQTT 3.1.1规范的引用

2014年底,MQTT正式成为OASIS(结构化信息标准促进组织)的开放标准。

MQTT协议的优势与特点

MQTT协议由Andy Stanford-Clark(IBM)和Arlen Nipper(Cirrus Link)于1999年发明。 他们需要一种协议,将石油管道上的传感器与卫星连接时,可以最小化电池电量损耗和带宽。 两位发明人为未来的协议规定了几个要求:

  • 实施简单
  • 保证服务数据传输的质量
  • 轻巧并带宽效率最大化
  • 数据不可知(即:与数据内容无关)
  • 支持持续的会话

最终,MQTT是一种支持双方之间异步通信的协议。它在空间和时间方面将消息的发送者和接收者分开。并遵循发布/订阅模型。与HTTP等协议相比,MQTT在传输数据时性能优异,并客户端非常容易实现。 使其非常适合当今资源有限的受限设备。

下面是MQTT与传统HTTP协议的对比

3GWIFI
HTTPsMQTT+SSLHTTPsMQTT+SSL
接收速度(消息/小时)1,7081602783628263314
功耗(电池消耗%/消息)0.017090.00010.000950.00002
质量(消息送达)240/10241024/1024524/10241024/1024
发送速度(消息/小时)192621685522923184
功耗(电池消耗%/消息)0.009750.000820.001040.00016

发布/订阅 – MQTT的工作模式

MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。

  • 消息的发布者和订阅者都是客户端
    • 消息发布者可以同时是订阅者。
    • 工业应用的场景下,MQTT的客户端也可能是一台服务器设备。它可能有自己的业务用途(如物联网可视化呈现)并对接其下游客户端设备,但它不是MQTT的消息代理服务器。
  • MQTT服务器以称为”消息代理”(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它的作用为:
    • 加收客户发布的信息
    • 过滤发布的消息
    • 管理订阅与退订
    • 向订阅用户退送消息
    • 授权与身份认证管理

MQTT使用基于主题的消息过滤。每条消息都包含一个主题(例如:topic=site_1/location_room_121/temperature),代理可以使用该主题来确定订阅客户端是否需要收到消息。
MQTT协议中包括客户端身份与密码,同时也可能通过TCP/IP层的SSL加密。

如上图,MQTT同样也可以进行设备控制。

总结

MQTT已经是一种广泛应用的物联网协议。你可能已经在智能家居平台中不知不觉的体验过。目前AWS、阿里、华为等工业互联网/物联网平台也能广泛支持MQTT协议。

但在工业应用的实践中,MQTT只解决了物到物联网服务器的数据标准问题。MQTT是与数据内容无关的协议。
不同的应用层之间如何基于标准的业务模型,进行物联网的数据交互,需要有其它标准的支持。后续我们将普及OGC SensorThings API协议来解决物联网的业务层模型与标准。

发表评论