什么是 MQTT?

消息队列遥测传输 (MQTT) 是一种常用的轻量级发布-订阅消息协议,是通过互联网连接物联网 (IoT) 或机器对机器 (M2M) 设备和应用的理想选择。MQTT 设计用于在低带宽或低功耗环境下高效运行,因此是具有大量远程客户端的应用的理想选择。其广泛应用于各行各业,包括消费电子、汽车、运输、制造和医疗保健。

MQTT 如何运作?

通过 MQTT 连接的设备或应用称为客户端。这些客户端发布和/或订阅特定主题或多个主题上的消息。订阅的客户端接收发布到该主题上的所有消息,从而在多个设备和服务之间实现高效、容错的数据交换。

MQTT 架构的核心是代理。代理是一种服务器,负责跟踪客户端(及其订阅的任何主题)、处理消息以及将这些消息路由到适当的系统。

MQTT 协议版本

MQTT 协议的几大关键版本均已成为标准。OASIS 组织负责修订协议,并提供每个版本的完整规范。MQTT 的每个版本都对协议功能集进行扩展,因此了解设备和代理所遵循的 MQTT 版本至关重要。

MQTT 消息类型和格式

MQTT 消息有多种类型,每种消息类型都包含符合要求的设备和应用必须遵循的特定格式。MQTT 协议的修订版在格式和消息类型上各不相同。MQTT 协议的每个规范中均可找到消息类型的完整列表

最常见的三种消息类型是“连接”、“发布”和“订阅”。每条 MQTT 消息都包含标头、有效负载和可选标志。根据消息类型的不同,有效负载的长度也不尽相同。例如,在“发布”消息中,有效负载包含要发送到所有订阅设备的数据,数据字段的长度直接影响消息的大小。默认情况下,MQTT 设备以不安全的方式连接到端口 1883,或启用 SSL/TLS 加密后连接到端口 8883。

什么是 MQTT 实际应用的示例?

智能汽车是 MQTT 实际应用的典范。随着汽车制造商增加新功能,支持从远程诊断和车队管理到燃料支付和娱乐等各种功能,MQTT 已成为联网汽车的通用标准。与 Hypertext Transfer Protocol (HTTP) 协议不同,MQTT 可以保持持续会话,即使汽车进出无信号区或其连接更换基站。MQTT 还支持双向通信,确保汽车和云应用可以更轻松地发送和接收数据,而无需等待对方响应。

HTTP 和 MQTT 有什么区别?

HTTP 和 MQTT 都是用于在互联网上传输数据的网络协议。让我们看一下有何区别。

HTTP

  • 请求-响应协议,即客户端向服务器发送请求,服务器响应所请求的数据。
  • 主要用于在 Web 服务器和浏览器之间传输 Web 内容(如 HTML 文档、图像和表单数据)。
  • 示例:Web 浏览器(客户端)向 Web 服务器发送请求,服务器以网页的形式响应数据。

MQTT

  • 发布-订阅协议,即轻量级消息传递协议,客户端订阅主题并接收其他客户端发布到这些主题的消息。
  • 主要用于需要考虑低带宽、连接稳定性和功耗的网络拓扑和设备。
  • 例如:上文的智能汽车方案。
为什么在物联网 (IoT) 中使用 MQTT?

MQTT 因诸多特性而成为物联网设备(物联网中的“物”)与后端系统之间传递信息的理想协议。在此,我们重点介绍四种特性:

  • 轻量级:MQTT 代码占用空间小,在处理能力和内存有限的设备(如传感器)中运行良好。
  • 可靠:许多物联网设备通过蜂窝网络连接。MQTT 是一种适用于低带宽网络的协议,要求使用较少的数据发送紧凑型消息。这使得 MQTT 更加可靠,即使在网络带宽有限或不稳定的情况下也是如此。
  • 可扩展:随着设备和后端系统的增加,发布-订阅模式很容易扩展。单个设备向两个独立的后端网络(订户)发布数据的示例是住宅智能电表,该电表将公用事业使用数据发送到公用事业公司的系统,用于计费目的,同时也将数据发送到面向客户的应用,房主可以访问该应用,以了解其住宅的能源使用情况。
  • 安全:MQTT 信息可使用标准传输层安全 (TLS) 进行加密,并支持可用于身份验证的凭据。这使得 MQTT 成为物联网应用中的安全信息传输协议,可处理各种医疗设备的健康监测读数等敏感信息。
MQTT 使用什么传输协议?

MQTT 支持传输控制协议/互联网协议 (TCP/IP) 作为底层传输协议。这一广泛使用的网络协议可确保消息在客户端和代理之间可靠发送。

TCP/IP 成为可靠、高效协议的原因如下:

  • 错误检测和纠正:各种技术可验证数据包的完整性,并通过重传机制恢复丢失的数据包。
  • 流量控制:任何给定的网络中,数据以最佳速率进行传输,防止传输延迟并提高通信效率。
  • 复用:单个连接可发送多个数据流,因此多个应用可同时使用同一连接。
  • 兼容性:可与多种设备和操作系统配合使用。
  • 可扩展性:专为在大型复杂网络中运行而设计,即使在处理大量流量时也不会降低性能。

虽然 TCP/IP 是最常见的协议,但并不是传输 MQTT 消息的唯一选择。MQTT 协议也适用于用户数据报协议 (UDP) 和 WebSockets。

更多资源

我们很荣幸能够提供以下免费资源,帮助您继续研究 NGINX 如何为基于 MQTT 的物联网系统提供安全性、负载均衡和高可用性。

博客

文档