当谈论 MQTT(Message Queuing Telemetry Transport)协议时,了解一些与其相关的术语非常重要。这些术语有助于理解 MQTT 协议的工作原理以及如何有效地使用它。下面是一个关于 MQTT 术语的文章,它将帮助您更深入地理解 MQTT 协议:
MQTT 术语表:深入了解 MQTT 协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的、发布/订阅式的通信协议,广泛应用于物联网设备、传感器网络和分布式系统中。在使用 MQTT 协议时,您可能会遇到一些特定的术语,下面是一些重要的 MQTT 术语以及它们的解释:
A - Broker(经纪人)
在 MQTT 中,经纪人(Broker)是指 MQTT 服务器,负责接收发布者(Publishers)发送的消息并将其传递给订阅者(Subscribers)。有时候也直接称之为 Broker。
C - Clean Start(清理启动)
客户端可以在连接时使用 Clean Start 字段来指示是否期望从已存在的会话中恢复通信,还是创建一个全新的会话。这个功能仅适用于 MQTT v5.0。
Client(客户端)
客户端是使用 MQTT 协议连接到 MQTT 经纪人的设备或应用程序。它可以是发布者或订阅者,通过 MQTT 协议完成发布和订阅操作。
Client ID(客户端标识)
Client ID 用于唯一标识 MQTT 客户端的连接和会话。MQTT 允许客户端自行指定 Client ID,也支持由 MQTT 服务器统一为客户端分配 Client ID。
Connection(连接)
MQTT 客户端与 MQTT 服务器之间的网络连接。请注意,MQTT 客户端之间不会直接建立连接,而是通过 MQTT 服务器中转消息。
Content Type(内容类型)
Content Type 字段用于描述消息的内容类型,以便接收方能够更好地处理它。它可以使用 MIME 类型,例如 "text/plain",也可以使用自定义的字符串来描述消息内容。这个字段仅适用于 MQTT v5.0。
E - Enhanced Authentication(增强认证)
MQTT v5.0 引入了 AUTH 报文,支持增强认证。它扩展了原有的用户名和密码认证以及令牌认证机制,允许使用更安全的认证机制,如 SCRAM 认证,以增强安全性,抵御中间人攻击。
F - Flow Control(流控制)
MQTT v5.0 引入了流控制机制,允许客户端和服务器协商最大消息发送速率,以避免网络拥塞和接收方过载的问题。
K - Keep Alive(保持连接)
Keep Alive 表示客户端在传输一个 MQTT 控制报文到发送下一个报文之间允许的最大空闲时间间隔。如果没有其他控制报文可以发送,客户端必须发送一个 PINGREQ 报文,以保持连接。如果服务器在1.5倍的 Keep Alive 时间内没有收到客户端的控制报文,它将断开连接。
M - Message(消息)
通常指的是 PUBLISH 报文,即 MQTT 协议中的消息。
Message Expiry Interval(消息过期时间)
MQTT v5.0 允许客户端为消息设置过期时间,以确保在服务端中停留较长时间的消息不会被转发给订阅者。
MQTT over QUIC(MQTT 在 QUIC 上运行)
MQTT over … 指的是 MQTT 运行在何种传输协议之上。MQTT 协议只要求底层传输提供有序、可靠的双向字节流,但并不强制要求使用特定的传输协议。MQTT over QUIC 是一种扩展,利用 QUIC 协议提供更高效的连接管理和传输。
MQTT v3.1.1(MQTT 3.1.1 版本)
OASIS 技术委员会于 2014 年发布的 MQTT 规范,它是 MQTT 协议的一个重要版本。
MQTT v5.0(MQTT 5.0 版本)
OASIS 技术委员会于 2019 年发布的 MQTT 规范,是当前最新版本的 MQTT 规范。MQTT v5.0 引入了许多新特性,并向后兼容 v3.1.1。
P - Packet(报文)
通常指 MQTT 协议中的控制报文,用于交换信息。例如 CONNECT 报文用于连接,PUBLISH 报文用于发布消息,SUBSCRIBE 报文用于订阅等。
Packet Identifier(报文标识符)
报文标识符用于唯一标识 QoS 大于 0 的消息或订阅/取消订阅请求,通常由客户端和服务器内部管理。
Payload(有效载荷)
MQTT 报文中的有效载荷部分,根据报文类型不同,有效载荷的内容会有所不同。对于 PUBLISH 报文来说,有效载荷即消息的实际内容。
Payload Format Indicator(有效载荷格式指示符)
有效载荷格式指示符用于指示消息内容(包括遗嘱消息)是否是 UTF-8 编码的字符串,仅适用于 MQTT v5.0。
PINGREQ & PINGRESP
PINGREQ 报文由客户端发送,用于告知服务器客户端仍然活动。服务器必须及时响应 PINGREQ 报文,以保持连接。
#
Property(属性)
MQTT 为大多数控制报文定义了一组可选属性,不同类型的控制报文可以具有不同的可选属性。这些属性提供了更多的控制和扩展性。
Publish/Subscribe(发布/订阅)
MQTT 的核心机制之一,发布订阅机制解耦了消息的发送方和接收方,允许消息的广播、组播和单播。
Q - QoS(服务质量等级)
MQTT 定义了三种 QoS 等级,用于提供不同级别的消息可靠性保证。每条消息都可以在发布时设置自己的 QoS 等级:
- QoS 0:最多交付一次,消息可能会丢失。
- QoS 1:至少交付一次,消息可以保证到达,但可能会重复到达。
- QoS 2:只交付一次,消息保证到达,并且不会重复。
R - Reason Code(原因码)
MQTT 使用 Reason Code 字段来指示操作结果,MQTT v5.0 扩展了 Reason Code 以提供更准确的结果反馈。
Reason String(原因字符串)
Reason String 字段用于在 Reason Code 的基础上进一步解释操作结果,提供更易读的信息,仅适用于 MQTT v5.0。
Receive Maximum(最大接收数量)
用于声明服务端和客户端愿意同时处理的 QoS 1 和 QoS 2 消息的最大数量,以避免过多消息导致负载问题。仅适用于 MQTT v5.0。
Request & Response(请求和响应)
MQTT 的发布订阅机制确保消息到达 MQTT 服务器,但要确保消息被正确传递给订阅者,需要使用请求和响应机制。
MQTT v5.0 改进了请求和响应的支持,允许请求方直接指定响应主题,减少了约定的复杂性。
Retained Message(保留消息)
保留消息在 MQTT 服务器中保留,除了被正常转发给订阅者外,还会在新订阅时发送给订阅者。每个主题只能有一条最新的保留消息。
S - Security(安全性)
MQTT 支持多种安全机制,包括 TLS 加密传输、身份验证和访问控制,以确保通信的保密性和完整性,以及授权合法用户访问特定主题。
Server(服务器)
在 MQTT 中,服务器是指 MQTT 经纪人,它负责接收发布者发送的消息并将其传递给订阅者。服务端也会处理客户端的连接请求和订阅/取消订阅请求。
Server Disconnect(服务器断开连接)
MQTT v5.0 允许服务器发送 DISCONNECT 报文,以指示客户端连接被关闭的具体原因。
Server Reference(服务器引用)
MQTT v5.0 允许服务器通过 CONNACK 或 DISCONNECT 报文中的服务端参考属性,指示客户端临时或永久切换至另一台服务器。
Session(会话)
MQTT 的会话机制用于管理客户端和服务器之间的有状态交互,存储 QoS 1、2 消息的传输状态和订阅信息。它可以持续与网络连接一样长的时间,也可以跨越多个网络连接存在。
Session Expiry Interval(会话过期时间)
会话过期时间表示客户端连接断开后会话在服务端中保留的时间。这个功能仅适用于 MQTT v5.0。
Session Present(会话存在标志)
服务端通过 Session Present 字段告知客户端本次连接是之前会话的延续还是一个全新的会话,以便客户端适当地调整自己的行为。
Shared Subscription(共享订阅)
MQTT v5.0 允许将客户端划分为多个订阅组,消息仍然会被传递给所有订阅组,但一个订阅组内的客户端将以轮询或其他策略交替接收消息,实现了消息的负载均衡。
Subscription Identifier(订阅标识符)
客户端可以在订阅时指定订阅标识符,服务端在转发与这些订阅匹配的消息时需要附上与之关联的订阅标识符。
Subscription Options(订阅选项)
MQTT 允许客户端为每个订阅使用不同的订阅选项,例如是否接收保留消息、最大 QoS 等。
T - Topic(主题)
主题用于标识和区分不同的消息,它是 MQTT 消息路由的基础。发布者指定消息的主题,订阅者选择订阅感兴趣的主题来接收相关的消息。
Topic Alias(主题别名)
MQTT v5.0 允许发送端将主题名映射成一个双字节整数表示的别名,从而减少带宽消耗,提高效率。
Topic Filter(主题过
滤器)
主题过滤器在订阅时使用,可以包含单层通配符(+)和多层通配符(#)来同时订阅多个主题。
Topic Name(主题名)
主题名在发布消息时使用,不允许包含通配符。
U - Username & Password(用户名和密码)
MQTT 允许客户端在连接报文中提供可选的用户名和密码,以实现对密码认证和令牌认证的支持。
User Property(用户属性)
MQTT v5.0 允许客户端和服务端将自定义的键值对作为用户属性添加到控制报文中,以提供更好的可扩展性和元数据。
W - Will Delay Interval(遗嘱消息延迟时间)
遗嘱消息延迟时间指示遗嘱消息可以在连接断开后延迟多久发送,这个功能仅适用于 MQTT v5.0。
Will Message(遗嘱消息)
如果客户端异常断开连接,那么客户端在连接时设置的遗嘱消息将由服务器转发给其他客户端。遗嘱消息与普通消息具有相同的字段,包括主题、QoS、Payload 等。
$ - $ Topic(以 $ 开头的主题)
以 $ 开头的主题必须由服务器决定其使用方式和场景,客户端不能自行使用这类主题。例如,$share 开头的主题用于共享订阅,$SYS 开头的主题通常用于发布系统消息。
以上是一些关于 MQTT 协议的重要术语及其解释,它们有助于您更深入地理解 MQTT 协议的工作原理和如何在实际应用中使用 MQTT 进行可靠的消息通信。无论您是物联网开发者还是系统架构师,了解这些术语都将对您的工作大有裨益。如果您需要更多有关 MQTT 或物联网的信息,请随时提问。