消息队列遥测传输(MQTT)是一种常用的轻量级“发布-订阅”消息协议,非常适合通过互联网连接物联网(IoT)或机器对机器(M2M)设备和应用。MQTT 可在低带宽或低功耗环境中高效运行,因此是有着众多远程客户端应用的理想之选,适用于多个行业,包括消费类电子产品、汽车、运输、制造及医疗行业。
MQTT 的工作原理?
通过 MQTT 连接的设备或应用被称为“客户端(client)”。这些客户端发布和(或)订阅有关某一特定主题或多个主题的消息。已订阅的客户端会收到围绕该主题发布的所有消息,从而在许多设备和服务之间实现高效且支持容错的数据交换。
MQTT 架构的核心是 broker。所谓的 broker 其实是一台服务器,负责跟踪客户端(及其订阅的任何主题)、处理消息,并将这些消息路由到相应系统。
MQTT 协议版本
MQTT 协议的多个关键版本已被采用为标准协议。OASIS 组织负责管理协议的修订,并维护每个版本的完整规范。MQTT 的每次修订都扩展了协议特性集,因此了解您的设备和 broker 所遵循的 MQTT 版本至关重要。
MQTT 消息类型和格式
MQTT 消息有多种类型,每种消息类型都包含符合规范的设备和应用必须遵循的特定格式。MQTT 协议修订的格式和消息类型各不相同。有关消息类型的完整列表,请参阅每种 MQTT 协议规范。
三种最常见的消息类型是 CONNECT、PUBLISH 和 SUBSCRIBE。每个 MQTT 消息都包含一个请求头、有效载荷和可选标志。根据消息类型,有效载荷的长度是可变的。例如,在 PUBLISH 消息中,有效载荷包含要发送给所有订阅设备的数据,数据字段的长度会直接影响消息的大小。
默认情况下,MQTT 设备以不安全的方式连接到 1883 端口,或者在启用 SSL/TLS 加密后连接到 8883 端口。
有哪些 MQTT 示例?
智能汽车是典型的 MQTT 示例。随着汽车制造商不断增添新功能以支持从远程诊断和车队管理到燃油支付和车载娱乐等服务,MQTT 已成为互联汽车的通用标准。与超文本传输协议(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)作为其底层传输协议。这一广泛使用的网络协议可确保在客户端和 broker 之间可靠地发送消息。
TCP/IP 被认为可靠高效的原因如下:
- 错误检测和纠正 – 多种技术验证数据包的完整性和重传机制,以恢复丢失的数据包。
- 流量控制 – 在指定网络中,数据以最佳速率传输,可防止传输延迟,并加强高效通信。
- 多路复用 – 可通过单个连接发送多个数据流,因此多个应用可同时使用同一连接。
- 兼容性 – 可支持各种设备和操作系统。
- 可扩展性 – 可在大型复杂网络中使用,即使在处理大量流量时也不会影响性能。
虽然 TCP/IP 是最常见的协议,但并非传输 MQTT 消息的唯一选择。MQTT 协议也可利用用户数据报协议(UDP)和 WebSockets。
更多资源
我们很高兴为您提供以下免费资源,以帮助您继续研究 NGINX 如何确保基于 MQTT 的物联网系统的安全性、负载均衡及高可用性。