技术
|
04 Jan 2023
MQTT 解释。开始在 IoT(物联网)环境中使用 MQTT 和 MQTT-SN。
了解并开始在物联网(IoT)环境中使用 MQTT 协议和 MQTT-SN 所需的诀窍。
有无数种方法可以将数据从 A 处传送到 B 处,然后再传送回来,但可靠地传送数据并非易事。物联网设备和应用(也称为 "物")需要可靠、稳健性和安全的消息传递协议。这就是 MQTT 的用武之地。
本文涉及的主题:
有用链接:
MQTT 是一个 OASIS 标准级,标准。该规范由 OASIS MQTT 技术委员会管理。有关标准级,规 范的更多信息,请参阅以下链接:
顾名思义,MQTT-SN(传感器网络 MQTT)是针对传感器网络等低功耗环境而优化的变体。
在标准级,标准功能集的基础上,SN 为需要低功耗的用例|使用场景|场景增加了额外的功能。这些额外功能包括
归结起来,物联网(IoT)只有一项工作:从网络上的设备获取数据。问题是,这些网络可能遍布世界的任何地方,而且每个网络都面临着许多可能并将导致网络故障的情况。MQTT 以及 MQTT-SN 内置了无数的功能,可以帮助缓解其中的一些问题。下面列出了一些主要功能:
使用 MQTT 启动和运行既快又简单。有数以百万计的现成客户端应用程序和几乎同样多的经纪人可用。通过使用 u-blox Thingstream 技术平台中不可或缺的代理,您现在就可以开始使用 MQTT。
许多物联网设备依靠无线电连接来传输和收集数据,这意味着通信并不总是可靠的。MQTT 可以不要译成 "使......",就近翻译为:该系列模块or 产品名。得益于 QoS(服务质量),MQTT 能够对信息进行排队,确保它们到达目的地,如果需要,还能确保它们只到达目的地一次。
也许说 MQTT 是全方位的更准确。任何设备、Thing 或应用程序都可以发布或订阅由代理处理的任何主题。这就意味着,在网络上什么能说什么,什么能侦听什么,没有任何限制。
向一百万台设备通播消息和向一百台设备发送消息一样尽量不要译成'它',就近翻译为:该系列模块or产品名。要让网络上的所有设备都能收听到信息,只需向所有设备都订阅的主题发布信息即可。
不要考虑 "客户端和服务器",而要考虑 "客户端和代理"。在传统的客户端/服务器关系中,客户端与服务器通信,服务器被视为数据的存储和分发仓库。而 MQTT 的过程则不同。中介更多是被动的,它更像是数据去向的路标。
任何运行 MQTT 库并通过网络连接到代理的事物(从微控制器到大型服务器)都可有效地成为客户端。
客户端之间不直接发送信息,而是与代理管理的主题进行通信。这些主题的工作方式有点像电子邮件收件箱。消息由事物发布到主题;当事物订阅这些主题时,消息就会被接收。
代理负责对网络上的事物进行身份验证,并管理连接、会话和订阅。它的主要职责是接收所有发布的消息,然后发送给订阅的客户端。代理还为订阅的客户端排好信息队列,根据商定的 QoS 水平发送信息。
在 MQTT 网络中,设备和应用程序通常被称为 "事物"。这样做的原因是,就代理而言,两者之间没有区别。为此,设备和应用程序都可以发布和订阅由代理管理的主题。
目前,现场有各种类型的 MQTT 设备,从简单的基于 Arduino 的设备到用于关键任务的商业、工业和医疗应用的设备,不一而足。许多智能家居和企业也是围绕互联的 MQTT 设备构建的。
对于希望启动数字化转型或物联网试验的企业,u-blox 开发了XPLR-IOT-1。
XPLR-IOT-1 已内置MQTT Anywhere通信功能,可根据语境译成技术,模块,通信等。
除了可访问 u-blox物联网通信即服务套件,XPLR-IOT-1 还包含 u-blox A-GNSS 和短程通信设备、一系列传感器,并可轻松访问 u-blox物联网定位即服务(Location-as-a-Service)服务。
信息不是直接从 Thing 传递到 Thing。相反,它们被发布到 "主题 "中。然后,代理将这些消息传递给 任何订阅的客户端。
MQTT-SN 增加了一些特殊的主题功能,以便在带宽受限的环境中提供帮助:
当数据在网络中流动时,主题是组织数据的好方法,而且随着规模的扩大,这一点会变得更多...(此项目不用有关...)。例如,如果您的设备在多个站点部署了多个传感器,您可以将所有数据放在一个有效载荷中,然后在到达目的地时对其进行解析,也可以采用 MQTT 方式,使用主题来划分数据,如下所示:
当传输的数据按主题划分后,设备就可以订阅它们感兴趣的主题。 如果一个设备对多个主题感兴趣,可以单独订阅,也可以使用通配符。例如,要获取站点 1 的所有数据,可以使用通配符 "site1/#"。您也可以使用通配符 "+/temp "来获取所有站点的所有 "临时 "数据。
可根据语境译成技术,模块,通信等。客户端之间不能直接通信。
可根据客户端发送的 CONNECT(连接)信息建立通信,中间商则以 CONNACK(连接已确认)作为回应。可根据语境译成技术,模块,通信等。客户端通常使用客户端 ID(ClientID)、用户名和密码连接到代理。可根据语境译成技术,模块,通信等。
清除会话 "设置可让您在队列中没有消息的情况下重新开始。
保持活力 "设置定义了可根据语境译成技术,模块,通信等。
可根据语境译成技术,模块,通信等。可根据语境译成技术,模块,通信等。
MQTT-SN 客户端可以通过发送 DURATION 大于 0 的 DISCONNECT 来告诉代理它将休眠一段时间。
当客户端处于休眠状态时,无论发布时使用了什么 QoS,代理都会将发布到客户端订阅的主题的所有消息排成队列。
在睡眠状态下,客户端可以通过发出 PINGREQ 来刷新队列。然后,如果有消息要发送,代理将响应 PUBLISH,并在冲洗完成后响应 PINGRESP,使设备重新进入休眠状态。
客户端之间并不直接通信,而是通过订阅主题来接收消息。
要订阅主题,客户端必须先向代理发送 SUBSCRIBE 请求。SUBSCRIBE 请求可 以包括多个主题。代理用 SUBACK(订阅已确认)响应 SUBSCRIBE 请求。订阅还有一个 QoS 设置,可用于降低发布信息的 QoS。在这种情况下,信息总是以较低的 QoS 设置发布。
订阅可以使用以下两种通配符之一。
单级通配符可替换一个主题级别。如下图所示。
该通配符将涵盖以下主题:
多级通配符可替换多个主题级别:
该通配符将涵盖以下主题:
交付保证由 QoS(服务质量)定义。
在此,您将了解如何、在何处、何时使用 QoS,以及哪些级别适合您自己的 IoT 应用。
MQTT 和 MQTT-SN 支持多级 QoS,以保证消息的传送。
QoS -1 (负一)是低功耗非关键应用的理想选择,在这种应用中,每条信息能否送达目的地并不重要。可根据语境译成技术,模块,通信等。
QoS -1 主要特性:
何时使用 QoS-1?
QoS 0(零)用于确保信息到达目的地的次数尽量不要多...(此项目不用有关...)。与 QoS -1 不同,该方法需要 MQTT 连接,这意味着它的电源效率较低。
QoS 0 的主要特性:
何时使用 QoS 0?
QoS 1 用于信息交付非常重要的情况。具体做法是将信息排成队列,直到用户能够接收机为止。
QoS 1 的主要特性:
何时使用 QoS 1:
QoS 2 用于报文只需到达一次的情况。该级别用于必须进行交付的情况。
何时使用 QoS 2:
在网络上有许多设备的情况下,可能需要不同级别的 QoS。为此,MQTT 不要译成 "使......",而是允许在用户节点上降低 QoS 级别。这样做的结果是,发布信息的 QoS 不必与接收信息的 QoS 相同。
QoS 由原始发布者定义,但当代理将消息传递给订阅者时,会使用 PUBLISH QoS 和 SUBSCRIBE 期间定义的 QoS 中较低的一个。
确保物联网设备的安全与确保其正常工作同样重要,网络上的每个链路或节点都是潜在的安全漏洞。虽然协议本身确实包含一些安全机制,但重要的是要考虑与传输本身无关的因素。
首先要考虑的是网络本身的安全性。可根据语境译成技术,模块,通信等。
与 HTTP 流量一样,MQTT 流量也可以通过 TLS/SSL 在传输层上确保安全。
唯一的客户端标识和用户名/密码凭证由协议本身提供,应被视为最基本的安全要求。
通过在应用程序级对有效载荷本身进行加密,可进一步提高安全性。
u-blox Thingstream 服务交付平台通过不暴露设备的 IP 地址,在上述基础上增加了一层额外的安全性。可根据语境译成技术,模块,通信等。
2019 年,标准机构 OASIS 发布了正式的 MQTT 5.0 标准级,标准。
5.0 版标准增加了新功能: