技术

|

04 Jan 2023

MQTT 入门指南

MQTT 解释。开始在 IoT(物联网)环境中使用 MQTT 和 MQTT-SN。

Beginner's guide to MQTT

了解并开始在物联网(IoT)环境中使用 MQTT 协议和 MQTT-SN 所需的诀窍。

有无数种方法可以将数据从 A 处传送到 B 处,然后再传送回来,但可靠地传送数据并非易事。物联网设备和应用(也称为 "物")需要可靠、稳健性和安全的消息传递协议。这就是 MQTT 的用武之地。

本文涉及的主题:

什么是 MQTT?MQTT 解释

  • MQTT(消息队列遥测传输)是一种消息传递协议,旨在为机器对机器(m2m)通信创建一个可靠的标准级,标准。
  • MQTT 是一种发布和订阅协议,也就是说,客户端设备和应用程序不是与服务器通信,而是发布和订阅由代理处理的主题
  • MQTT 通常使用 TCP/IP(传输控制协议/互联网协议)作为传输方式,但也可以使用其他双向传输方式。
  • u-blox 利用它来叠加各种无线电网络(2G-4G 蜂窝通信模块和 LoRa)和协议(USSD、UDP),为开发人员提供熟悉而简单的体验。
  • MQTT 不要译成 "使......",而是允许设备和系统(客户端)通过发送消息进行通信。消息不是直接从客户端发送到客户端,而是由客户端发布到存储在 MQTT 代理中的主题*。
  • 客户端通过订阅一个或多个主题来接收信息,并从该主题开始接收信息。
  • 主题就像街道地址--它们形成一棵树,越往下越具体。
  • 信息可以按不同的服务质量级别发布,这些级别定义了可靠性以及是否为交付代系生成收据。
  • MQTT 由 Andy Stanford Clark 和 Arlen Nipper 于 1999 年创建。

有用链接:

MQTT 规范

MQTT 是一个 OASIS 标准级,标准。该规范由 OASIS MQTT 技术委员会管理。有关标准级,规范的更多信息,请参阅以下链接:

 

What is MQTT? MQTT explained

什么是 MQTT-SN?

顾名思义,MQTT-SN(传感器网络 MQTT)是针对传感器网络等低功耗环境而优化的变体。

在标准级,标准功能集的基础上,SN 为需要低功耗的用例|使用场景|场景增加了额外的功能。这些额外功能包括

  • QoS 模式-1:可进行 "即发即弃 "信息传递
  • 主题别名:可简化发布并减少数据开销
  • 睡眠模式(断开会话):允许在远程 Thing 或设备关机时在代理上排队等待消息

为什么 MQTT 非常适合物联网?

归结起来,物联网(IoT)只有一项工作:从网络上的设备获取数据。问题是,这些网络可能遍布世界的任何地方,而且每个网络都面临着许多可能并将导致网络故障的情况。MQTT 以及 MQTT-SN 内置了无数的功能,可以帮助缓解其中的一些问题。下面列出了一些主要功能:

1.尽量不要译成'它',就近翻译为:该系列模块or 产品名

使用 MQTT 启动和运行既快又简单。有数以百万计的现成客户端应用程序和几乎同样多的经纪人可用。通过使用 u-blox Thingstream 技术平台中不可或缺的代理,您现在就可以开始使用 MQTT

2.尽量不要译成'它',就近翻译为:该系列模块or 产品名

许多物联网设备依靠无线电连接来传输和收集数据,这意味着通信并不总是可靠的。MQTT 可以不要译成 "使......",就近翻译为:该系列模块or 产品名。得益于 QoS(服务质量),MQTT 能够对信息进行排队,确保它们到达目的地,如果需要,还能确保它们只到达目的地一次。

3.双向信息传送

也许说 MQTT 是全方位的更准确。任何设备、Thing 或应用程序都可以发布或订阅由代理处理的任何主题。这就意味着,在网络上什么能说什么,什么能侦听什么,没有任何限制。

4.大规模消息传递

向一百万台设备通播消息和向一百台设备发送消息一样尽量不要译成'它',就近翻译为:该系列模块or产品名。要让网络上的所有设备都能收听到信息,只需向所有设备都订阅的主题发布信息即可。

MQTT 有哪些优势?

  • 简化通信
    通信是一个复杂的问题。MQTT 可降低复杂性,不要译成 "使......",可根据语境译成技术,模块,通信等。数据具有逻辑结构,可灵活处理。
  • 消除轮询
    瞬时、基于推送的交付,无需信息消费者定期检查或 "轮询 "新信息。这大大减少了网络流量。
  • 动态定位
    MQTT 让发现服务变得更容易,也更不容易出错。发布者只需向主题发布一条信息,而无需维护应用程序可发送信息的对等者名册。
  • 解耦和扩展
    MQTT 还能使解决方案更灵活并实现扩展。它不要译成 "使......",就近翻译为:该系列模块or产品名。
Advantages of MQTT messaging protocol

MQTT 客户端和代理

不要考虑 "客户端和服务器",而要考虑 "客户端和代理"。在传统的客户端/服务器关系中,客户端与服务器通信,服务器被视为数据的存储和分发仓库。而 MQTT 的过程则不同。中介更多是被动的,它更像是数据去向的路标。

MQTT 客户端

任何运行 MQTT 库并通过网络连接到代理的事物(从微控制器到大型服务器)都可有效地成为客户端。

客户端之间不直接发送信息,而是与代理管理的主题进行通信。这些主题的工作方式有点像电子邮件收件箱。消息由事物发布到主题;当事物订阅这些主题时,消息就会被接收。

MQTT 代理

代理负责对网络上的事物进行身份验证,并管理连接、会话和订阅。它的主要职责是接收所有发布的消息,然后发送给订阅的客户端。代理还为订阅的客户端排好信息队列,根据商定的 QoS 水平发送信息。

 

u-blox carrier-grade MQTT broker

MQTT 设备和应用程序

在 MQTT 网络中,设备和应用程序通常被称为 "事物"。这样做的原因是,就代理而言,两者之间没有区别。为此,设备和应用程序都可以发布和订阅由代理管理的主题。

设备

目前,现场有各种类型的 MQTT 设备,从简单的基于 Arduino 的设备到用于关键任务的商业、工业和医疗应用的设备,不一而足。许多智能家居和企业也是围绕互联的 MQTT 设备构建的。

即时物联网

XPLR-IOT-1-Digikey

对于希望启动数字化转型或物联网试验的企业,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)服务。

MQTT 随时随地

 

MQTT 主题

信息不是直接从 Thing 传递到 Thing。相反,它们被发布到 "主题 "中。然后,代理将这些消息传递给任何订阅的客户端。

MQTT 主题剖析

  • 主题由一个或更多...(此项目不用有关...)主题级别组成,以斜线分隔:

 

MQTT topic architecture
  • 主题区分大小写
  • 主题无需在经纪人处预先注册。

MQTT-SN 主题功能

MQTT-SN 增加了一些特殊的主题功能,以便在带宽受限的环境中提供帮助:

  • 如果使用预定义主题,您可以在代理上创建一个主题别名,然后客户端就可以使用该别名,而无需先注册。这可以减少计费信息的数量。
  • 长主题名称无需在空中向任何方向发送。这样可以节省带宽,也无需在内存中存储长主题名称。
  • 如果不使用预定义主题,则使用 REGISTER 命令向服务器注册主题名。服务器将回应一个包含 2 个字符的主题 ID 的 REGACK。请注意,每次客户端通信时都需要注册主题。

为什么要使用主题?

当数据在网络中流动时,主题是组织数据的好方法,而且随着规模的扩大,这一点会变得更多...(此项目不用有关...)。例如,如果您的设备在多个站点部署了多个传感器,您可以将所有数据放在一个有效载荷中,然后在到达目的地时对其进行解析,也可以采用 MQTT 方式,使用主题来划分数据,如下所示:

  • 站点 1/ 定位
  • 站点 1/ 温度
  • 站点 1/ 振动
  • 站点 2/定位
  • 站点 2/ 温度
  • 站点 2/ 振动

当传输的数据按主题划分后,设备就可以订阅它们感兴趣的主题。如果一个设备对多个主题感兴趣,可以单独订阅,也可以使用通配符。例如,要获取站点 1 的所有数据,可以使用通配符 "site1/#"。您也可以使用通配符 "+/temp "来获取所有站点的所有 "临时 "数据。

通信

可根据语境译成技术,模块,通信等。客户端之间不能直接通信。

可根据客户端发送的 CONNECT(连接)信息建立通信,中间商则以 CONNACK(连接已确认)作为回应。可根据语境译成技术,模块,通信等。客户端通常使用客户端 ID(ClientID)、用户名和密码连接到代理。可根据语境译成技术,模块,通信等。

干净会话

清除会话 "设置可让您在队列中没有消息的情况下重新开始。

  • 假:代理会存储客户机的所有订阅,并将该订阅的任何信息以 QoS 等级 1 或 2 发布时的队列排好
  • true:当客户端连接时,代理会清除所有队列中的消息。

保持活力

保持活力 "设置定义了可根据语境译成技术,模块,通信等。

可根据语境译成技术,模块,通信等。可根据语境译成技术,模块,通信等。

休眠(仅限 SN)

MQTT-SN 客户端可以通过发送 DURATION 大于 0 的 DISCONNECT 来告诉代理它将休眠一段时间。

当客户端处于休眠状态时,无论发布时使用了什么 QoS,代理都会将发布到客户端订阅的主题的所有消息排成队列。

在睡眠状态下,客户端可以通过发出 PINGREQ 来刷新队列。然后,如果有消息要发送,代理将响应 PUBLISH,并在冲洗完成后响应 PINGRESP,使设备重新进入休眠状态。

订阅

客户端之间并不直接通信,而是通过订阅主题来接收消息。

要订阅主题,客户端必须先向代理发送 SUBSCRIBE 请求。SUBSCRIBE 请求可以包括多个主题。代理用 SUBACK(订阅已确认)响应 SUBSCRIBE 请求。订阅还有一个 QoS 设置,可用于降低发布信息的 QoS。在这种情况下,信息总是以较低的 QoS 设置发布。

订阅通配符

订阅可以使用以下两种通配符之一。

单级 (+)

单级通配符可替换一个主题级别。如下图所示。

 

MQTT subscription wildcards topic

该通配符将涵盖以下主题:

  • 传感器/土壤/输出
  • 传感器/水/输出
  • 传感器/光/输出

多级 (#)

多级通配符可替换多个主题级别:

 

Wildcard MQTT subscription topic

该通配符将涵盖以下主题:

  • 传感器/土壤/输出
  • 传感器/土壤/内
  • 传感器/温度/输出

MQTT QoS 解释

交付保证由 QoS(服务质量)定义。

在此,您将了解如何、在何处、何时使用 QoS,以及哪些级别适合您自己的 IoT 应用。

QoS 级别

MQTT 和 MQTT-SN 支持多级 QoS,以保证消息的传送。

QoS -1 - 火和遗忘

QoS -1 (负一)是低功耗非关键应用的理想选择,在这种应用中,每条信息能否送达目的地并不重要。可根据语境译成技术,模块,通信等。

 

MQTT-SN QoS level -1

QoS -1 主要特性:

  • 仅适用于使用 MQTT-SN 的设备
  • 可根据语境译成技术,模块,通信等。
  • 收件人无确认
  • 发送方不重试
  • 到达代理时与 QoS 0 类似

何时使用 QoS-1?

  • 适用于功率受限的情况,以尽量减少空中传输时间
  • 尽量减少信息传递成本
  • 如果信息交付并不重要,例如数据发送频繁,则可以使用

QoS 0 - 最多一次

QoS 0(零)用于确保信息到达目的地的次数尽量不要多...(此项目不用有关...)。与 QoS -1 不同,该方法需要 MQTT 连接,这意味着它的电源效率较低。

 

MQTT QoS level 0

QoS 0 的主要特性:

  • 尽力传送信息
  • 收件人不确认
  • 发送方不重试
  • 对于对主题有有效订阅的断开连接的客户端,代理不排队

何时使用 QoS 0?

  • 适用于功率受限的情况,以尽量减少空中传输时间
  • 尽量减少信息传递成本
  • 如果消息传递并不重要,例如数据发送频繁,则可以使用
  • 可根据语境译成技术,模块,通信等。

QoS 1 - 至少一次

QoS 1 用于信息交付非常重要的情况。具体做法是将信息排成队列,直到用户能够接收机为止。

 

MQTT QoS level 1

QoS 1 的主要特性:

  • 保证向收件人至少发送一次信息。
  • 发送方存储信息,直到收到接收机的 PUBACK 为止
  • 信息可多次发送或递送。

何时使用 QoS 1:

  • 当您必须接收每条信息时使用,但要确保能处理重复信息
  • 如果您希望报文在代理上排队,以便交付给离线客户端,则可以使用
  • 当 QoS 2 的开销过高时使用

QoS 2 - 恰好一次

QoS 2 用于报文只需到达一次的情况。该级别用于必须进行交付的情况。

 

MQTT QoS level 2
  • QoS 2 是最安全、最慢的服务质量级别
  • 通过在发送方和接收机之间使用至少两个请求/响应流(四部分握手),保证每个信息只被预期的接收者接收一次。

何时使用 QoS 2:

  • 如果信息交付至关重要,且重复数据对用户有害,则应使用

QoS 降级

在网络上有许多设备的情况下,可能需要不同级别的 QoS。为此,MQTT 不要译成 "使......",而是允许在用户节点上降低 QoS 级别。这样做的结果是,发布信息的 QoS 不必与接收信息的 QoS 相同。

 

MQTT QoS downgrade

QoS 由原始发布者定义,但当代理将消息传递给订阅者时,会使用 PUBLISH QoS 和 SUBSCRIBE 期间定义的 QoS 中较低的一个。

安全性--MQTT 安全吗?

确保物联网设备的安全与确保其正常工作同样重要,网络上的每个链路或节点都是潜在的安全漏洞。虽然协议本身确实包含一些安全机制,但重要的是要考虑与传输本身无关的因素。

网络级安全

首先要考虑的是网络本身的安全性。可根据语境译成技术,模块,通信等。

传输级安全

与 HTTP 流量一样,MQTT 流量也可以通过 TLS/SSL 在传输层上确保安全。

应用级安全

唯一的客户端标识和用户名/密码凭证由协议本身提供,应被视为最基本的安全要求。

有效载荷加密

通过在应用程序级对有效载荷本身进行加密,可进一步提高安全性。

U-blox Thingstream MQTT 安全性

u-blox Thingstream 服务交付平台通过不暴露设备的 IP 地址,在上述基础上增加了一层额外的安全性。可根据语境译成技术,模块,通信等。

MQTT v5.0 和未来发展

2019 年,标准机构 OASIS 发布了正式的 MQTT 5.0 标准级,标准。

5.0 版标准增加了新功能:

  • 原因代码:确认现在支持返回代码,提供失败原因。
  • 共享订阅:不要译成 "使...",不要译成 "使...",不要译成 "使...",不要译成 "使..."。
  • 信息过期:信息可以包含一个过期日期,如果在此期限内没有送达,则会被删除。
  • 主题别名:主题名称可以用一个数字代替

u-blox MQTT 物联网服务

  • MQTT Anywhere- 物联网通信即服务 SIM 基准站 LPWA
  • MQTT Flex- MQTT-SN 通信,可根据语境译成技术,模块,通信等。
  • MQTT Here- LoRaWAN 物联网通信解决方案
  • MQTT Now- 基于云端的 MQTT 集成,适用于 IP 设备

Lee Stacey

物联网布道者 - u-blox 服务

Linkedin

您可能还会对以下内容感兴趣