什么是MQTT?
消息队列遥测传输协议(MQTT)是一种广受欢迎的轻量级发布/订阅消息传递协议,非常适合通过互联网连接物联网(IoT)或机器对机器(M2M)设备和应用。MQTT旨在低带宽或低功耗环境中高效运行,因此适用于拥有大量远程客户端的应用。该协议广泛应用于消费电子、汽车、交通运输、制造和医疗保健等多个行业。
MQTT如何工作?
通过MQTT连接的设备或应用程序称为客户端。这些客户端在特定主题或多个主题上发布和/或订阅消息。订阅客户端会接收发布到相应主题的所有消息,从而在众多设备和服务之间实现高效且具备容错能力的数据交换。
MQTT架构的核心是代理服务器。代理服务器负责跟踪客户端(以及客户端订阅的所有主题)、处理消息,并将消息路由到相应的系统。
MQTT协议版本
MQTT协议的多个主要版本已被采纳为标准。OASIS组织负责管理该协议的修订,并维护完整的各版本规范。MQTT的每次修订都扩展了协议的功能集,因此,了解设备和代理遵循的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具备多项特性,非常适合用于IoT设备(即IoT中的“物”)与后端系统之间的消息传递。下面重点介绍其中4项特性:
- 轻量级:MQTT的代码占用空间小,非常适合传感器等处理能力和内存有限的设备。
- 可靠:许多物联网设备通过蜂窝网络连接。MQTT适用于低带宽网络,其紧凑的消息可减少数据用量。因此,即使网络带宽有限或不稳定,MQTT也能提供更可靠的通信。
- 可扩展:随着设备和后端系统的增加,发布-订阅模式可以轻松扩展。例如,住宅智能电表可将公用事业使用数据发布到两个不同的后端网络(订阅方):一是公用事业公司的系统,用于计费;二是面向客户的应用,房主可通过该应用了解住宅的能源使用情况。
- 安全:MQTT消息可使用标准传输层安全协议(TLS)进行加密,并支持使用凭据进行身份验证。因此,在处理各类医疗设备的健康监测读数等敏感信息的物联网应用中,MQTT可用作安全的消息传递协议。
MQTT使用哪种传输协议?
MQTT支持将传输控制协议/互联网协议(TCP/IP)用作底层传输协议。这种广泛使用的网络协议可确保消息在客户端与代理之间可靠传输。
TCP/IP之所以被认为可靠且高效,主要有以下几个原因:
- 错误检测和纠正:采用多种技术验证数据包的完整性,并通过重传机制恢复丢失的数据包。
- 流量控制:数据以适合相应网络的速率传输,从而避免传输延迟并提高通信效率。
- 多路复用:可通过单个连接发送多个数据流,使多个应用能够同时使用同一连接。
- 兼容性:支持多种设备和操作系统。
- 可扩展性:专为大型复杂网络而设计,即使处理大量流量,也不会影响性能。
虽然TCP/IP最为常用,但它并非传输MQTT消息的唯一选择。MQTT协议还可通过用户数据报协议(UDP)和WebSocket运行。

