什么是 MQTT?
MQTT 是一种基于标准的消息传递协议或规则集,用于机器对机器的通信。智能传感器、可穿戴设备和其他物联网(IoT)设备通常必须通过带宽有限的资源受限网络传输和接收数据。这些物联网设备使用 MQTT 进行数据传输,因为它易于实施,并且可以有效地传输物联网数据。MQTT 支持设备到云端和云端到设备之间的消息传递。
为什么 MQTT 协议很重要?
MQTT 协议已成为物联网数据传输的标准,因为它具有以下优势:
轻量、高效
IoT 设备上的 MQTT 实施需要最少的资源,因此它甚至可以用于小型微控制器。例如,最小的 MQTT 控制消息可以少至两个数据字节。MQTT 消息的标头也很小,因此您可以优化网络带宽。
可扩展
MQTT 实施需要最少的代码,在操作中消耗的功率非常少。该协议还具有支持与大量物联网设备通信的内置功能。因此,您可以实施 MQTT 协议来连接数百万台此类设备。
可靠
许多 IoT 设备通过低带宽、高延迟的不可靠蜂窝网络连接。MQTT 具有内置功能,可减少 IoT 设备重新连接云所需的时间。它还定义了三种不同的服务质量级别,以确保 IoT 用例的可靠性——最多一次(0)、至少一次(1)和恰好一次(2)。
安全
MQTT 使开发人员可以轻松地使用现代身份验证协议(例如 OAuth、TLS1.3、客户管理的证书等)加密消息并对设备和用户进行身份验证。
得到良好的支持
几种语言(如 Python)对 MQTT 协议的实施提供广泛的支持。因此,开发人员可以在任何类型的应用程序中以最少的编码快速实现它。
MQTT 协议背后的历史是什么?
MQTT 协议于 1999 年发明,用于石油和天然气行业。工程师需要一种协议来实现最小带宽和最小电池损耗,以通过卫星监控石油管道。最初,该协议被称为消息队列遥测传输,得名于首先支持其初始阶段的 IBM 产品 MQ 系列。2010 年,IBM 发布了 MQTT 3.1 作为任何人都可以实施的免费开放协议,然后于 2013 年将其提交给结构化信息标准促进组织 (OASIS) 规范机构进行维护。2019 年,OASIS 发布了升级的 MQTT 版本 5。现在 MQTT 不再是首字母缩写词,而是被认为是协议的正式名称。
MQTT 背后的原理是什么?
MQTT 协议基于发布/订阅模型工作。在传统的网络通信中,客户端和服务器直接相互通信。客户端向服务器请求资源或数据,然后,服务器将处理并发回响应。但是,MQTT 使用发布/订阅模式将消息发送者(发布者)与消息接收者(订阅者)解耦。相反,称为消息代理的第三个组件将处理发布者和订阅者之间的通信。代理的工作是筛选所有来自发布者的传入消息,并将它们正确地分发给订阅者。代理将发布者和订阅者解耦,如下所示:
空间解耦
发布者和订阅者不知道彼此的网络位置,也不交换 IP 地址或端口号等信息。
时间解耦
发布者和订阅者不会同时运行或具有网络连接。
同步解耦
发布者和订阅者都可以发送或接收消息,而不会互相干扰。例如,订阅者不必等待发布者发送消息。
MQTT 有哪些组成部分?
MQTT 通过如下定义客户端和代理来实施发布/订阅模型。
MQTT 客户端
MQTT 客户端是从服务器到运行 MQTT 库的微控制器的任何设备。如果客户端正在发送消息,它将充当发布者;如果它正在接收消息,它将充当接收者。基本上,任何通过网络使用 MQTT 进行通信的设备都可以称为 MQTT 客户端设备。
MQTT 代理
MQTT 代理是协调不同客户端之间消息的后端系统。代理的职责包括接收和筛选消息、识别订阅每条消息的客户端,以及向他们发送消息。它还负责其他任务,例如:
- 授权 MQTT 客户端以及对其进行身份验证
- 将消息传递给其他系统以进行进一步分析
- 处理错过的消息和客户端会话
MQTT 连接
客户端和代理开始使用 MQTT 连接进行通信。客户端通过向 MQTT 代理发送 CONNECT 消息来启动连接。代理通过响应 CONNACK 消息来确认已建立连接。MQTT 客户端和代理都需要 TCP/IP 堆栈进行通信。客户端从不相互联系,它们只与代理联系。
MQTT 的工作原理?
下面概述了 MQTT 的工作原理。
- MQTT 客户端与 MQTT 代理建立连接。
- 连接后,客户端可以发布消息、订阅特定消息或同时执行这两项操作。
- MQTT 代理收到一条消息后,会将其转发给对此感兴趣的订阅者。
让我们进行详细的分解,以进一步了解详情。
MQTT 主题
“主题”一词是指 MQTT 代理用于为 MQTT 客户端筛选消息的关键字。主题是分层组织的,类似于文件或文件夹目录。例如,考虑在多层房屋中运行的智能家居系统,每层都有不同的智能设备。在这种情况下,MQTT 代理可以将主题组织为:
ourhome/groundfloor/livingroom/light
ourhome/firstfloor/kitchen/temperature
MQTT publish
MQTT 客户端以字节格式发布包含主题和数据的消息。客户端确定数据格式,例如文本数据、二进制数据、XML 或 JSON 文件。例如,智能家居系统中的灯可能会针对主题 livingroom/light 发布消息 on。
MQTT subscribe
MQTT 客户端向 MQTT 代理发送 SUBSCRIBE 消息,以接收有关感兴趣主题的消息。此消息包含唯一标识符和订阅列表。例如,您手机上的智能家居应用程序想要显示您家中有多少灯亮着。它将订阅主题 light 并增加所有 on 消息的计数器。
什么是 MQTT over WSS?
MQTT over WebSockets (WSS) 是一种 MQTT 实施,用于将数据直接接收到 Web 浏览器中。MQTT 协议定义了一个 JavaScript 客户端来为浏览器提供 WSS 支持。在这种情况下,该协议照常工作,但它向 MQTT 消息添加了额外标头以支持 WSS 协议。您可以将其视为包装在 WSS 信封中的 MQTT 消息负载。
MQTT 安全吗?
MQTT 通信使用 SSL 协议来保护物联网设备传输的敏感数据。您可以使用 SSL 证书和/或密码在客户端和代理之间实施身份、身份验证和授权。MQTT 代理通常使用其密码以及分配给每个客户端的唯一客户端标识符来对客户端进行身份验证。在大多数实施中,客户端使用证书或 DNS 代码来对服务器进行身份验证。您还可以使用 MQTT 来实施加密协议。
MQTT 支持 REST 吗?
MQTT 不支持 REST。表征状态转移(REST)是一种网络通信的架构方法,它使用消息发送者和接收者之间的请求-响应模式进行通信。相比之下,MQTT 在应用层使用发布/订阅的通信模型,需要一个常设的 TCP 连接以推送的方式传输消息。但是,MQTT 版本 5 添加了一个新的请求/响应方法,以类似于 REST 的方式运行,其中,发布者可以附加一个特殊的响应主题,接收者将处理并生成适当的响应。
AWS 如何支持您的 MQTT 实施?
AWS IoT Core 是一项完全托管的服务,可让您连接数十亿个 IoT 设备并将数万亿条消息路由到 AWS 服务。您可以:
- 无需预置或管理服务器,即可轻松可靠地连接、管理和扩展您的设备机群。
- 选择您首选的通信协议,包括 MQTT、HTTPS、MQTT over WSS 和 LoRaWAN。
- 通过双向身份验证和端到端加密保护设备连接和数据。
- 可以按照定义的业务规则快速筛选、转换和处理设备数据。
立即创建免费账户,开始使用 AWS 上的 MQTT。