通信是物联网 (IoT) 应用中不可或缺的一部分,而针对不同的应用场景,通信需求也不尽相同,从中也能捕捉到这些场景对网络环境的特殊要求。在如今的工业 4.0 时代下,工厂生产线设备需要实时响应中央控制器的命令,这就促使该应用场景对超低网络延迟有着更高的要求。另一方面,土壤状况检测远程传感器一般都是由电池供电,但由于传感器在较长时间内都处于待机状态,为了减少能耗延长使用周期,传感器仅在传送数据包时才允许被唤醒。
如今,蜂窝网络、无线连接技术(比如 Wi-Fi和蓝牙)、有线以太网,以及卫星等通信技术广泛应用于各类IoT设备中,但通信协议则是所有 IoT技术栈的关键构成,唯有通过特定的通信协议,IoT设备才能进行数据传输与交换。
为了满足当下IoT 应用的多样化需求,市面上开放了包括 CoAP、XMPP 和 DDS 在内的多种协议,可供各个应用场景按需选择。其中,消息队列遥测传输 (MQTT) 及其衍生协议 MQTT-SN 正广泛应用在日益普遍的低功耗广域 (LPWA) 网络中。
MQTT 协议
作为一种轻量级协议,MQTT 拥有简单紧凑的架构和较小的代码占用空间,适用于低成本、低功耗的IoT微控制设备。MQTT 可在 TCP/IP 协议上兼容运行,专攻延迟较高、质量不佳的网络环境。该协议适用于具有以下通信需求的应用:
MQTT 在 IoT 多种应用中都备受青睐,如智能表计、资产追踪工具和工业设备的互联传感器。凭借对有限带宽的高效利用,因此MQTT非常适用于网络成本高、功耗大的应用场景,例如远程传感器阵列就需要在现场自主运行数年且期间无需维修。MQTT是多个客户端通过一个中央服务器传递信息的多对多协议,能高效地将信息分发给一个或多个订阅者,加之其代码占用空间小,便使得MQTT成为移动应用通信的理想之选。
MQTT 功能概述
MQTT 基于发布和订阅模型,而非“客户端-服务器”模型,它具有两个功能实体——MQTT 服务器和 MQTT 客户端。IoT 网络上的任何“事物”,无论是硬件设备还是软件程序,都可以视为 MQTT的 客户端。所有的客户端并非直接向彼此发布或订阅消息,而是向MQTT 服务器所管理的“主题”来发布或订阅消息。“主题”可理解为电子邮件的收件箱;客户端向主题发布消息,订阅该主题的其他客户端都将收到该消息。
MQTT 服务器负责接收所有已发布的消息,并需要确保将其传输到所有订阅的客户端。消息根据多个商定的 QoS 级别进行发布(见下文)。服务器还将对网络上的所有 IoT 设备进行验证,进而管理连接、会话和订阅。
图 1:什么是 MQTT
MQTT-SN
MQTT-SN 是 MQTT 的优化版本,专为需要提高数据传输效率和功耗效率的大规模无线传感器网络而设计。MQTT-SN 主要通过缩短主题 ID 的长度来提升数据传输效率。这些经过缩短处理的 ID 会编程到客户端和服务器中,从而减少信息传递数量。
MQTT-SN 中的“链路保持机制”允许设备进入睡眠模式,并在被唤醒时才可检索任何排队消息。
MQTT 核心概念
除了服务器和客户端实体,MQTT 和 MQTT-SN 运行还涉及到如下核心概念:
1.MQTT 主题 (MQTT Topics)
主题是 MQTT 实现对带宽高效利用的基础,它具有多级结构,如图 2 所示。MQTT 客户端只会订阅其所关注的主题,并且可以使用通配符条目来访问多个主题。
图 2:MQTT 主题(来源:u-blox)
由于设备仅接收已订阅的主题消息,MQTT 主题通过 IoT 网络将更加高效地组织数据流,从而实现大规模应用。
2.连接(Connections)
MQTT 客户端必须与服务器建立连接才能发布或订阅消息。客户端在发送连接请求时会提供其客户ID、用户名和密码,随后服务器会确认该项请求。而连接请求也可使用如下参数加以限定:
2.1.MQTT会话(Clean Session) - 请求连接并删除订阅队列中已存储的任何消息。
2.2.链路保持(Keep Alive) - 当服务器或客户端未发送消息时,链路保持功能将优先确保设备连接的最长时间,从而为处于睡眠模式下的其他电池供电设备提供支持。在此期间,客户端接收到的任何消息都会由服务器存储,直到指定时间结束。
2.3.睡眠(仅限 MQTT-SN) - 在设备告知服务器即将进入睡眠模式时,服务器会在设备告知的时间段内将设备订阅的所有消息排入队列。此模式与“链路保持”模式的主要区别在于,服务器会无视QoS 级别,将所有消息进行存储,而在“链路保持”模式中则仅存储 QoS 1 和 QoS 2 消息。在睡眠模式时,客户端还能在不需要唤醒的情况下刷新其消息队列。
3.订阅
客户端可请求订阅一个或多个主题,该请求支持两种不同的通配符设置,如图 3a 和 3b 所示。
单级 (+) 通配符用于替换一个主题级别,因此“sensors/+/out”将订阅以下主题:
sensors/soil/out(传感器/土壤/输出)
sensors/water/out(传感器/水/输出)
sensors/light/out(传感器/光/输出)
图 3a:单级通配符
多级 (#) 通配符用于替换多个主题级别,因此这个通配符可以订阅以下主题:
sensors/soil/out(传感器/土壤/输出)
sensors/soil/in(传感器/土壤/输入)
sensors/temperature/out(传感器/温度/输出)
图 3b:多级通配符
4.消息服务质量QoS
MQTT 和 MQTT-SN 两者规定了消息服务质量 (QoS) 模式,让发布者能够自行定义消息质量。我们针对这些模式进行汇总(见表 1),并分享了如何根据特定应用的限制条件来采用不同的模式。
5.QoS 在发布与订阅中的区别
在MQTT 发布与订阅操作中, QoS 代表了不同的含义,发布时的 QoS 表示消息发送到服务端时使用的 QoS,订阅时的 QoS 则表示服务端向自己转发消息时可以使用的最大 QoS。
当客户端 A 的发布 QoS 大于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 B 的订阅 QoS。
当客户端 A 的发布 QoS 小于客户端 B 的订阅 QoS 时,服务端向客户端 B 转发消息时使用的 QoS 为客户端 A 的发布 QoS。
结论
现如今,MQTT 已广泛应用于包括汽车、能源、制造业及电信等多个关键领域,尤其适用于更窄带宽的网络环境和更低功耗IoT设备。为简化IoT的开发流程,技术人员还可根据自身需求,选择包括服务器端与客户端在内的MQTT测试工具。
要记住“通信不仅仅是建立连接”。以 u-blox 物联网通信即服务产品组合为例(见图 4),u-blox MQTT Anywhere、MQTT Here 和 MQTT Now三款产品基于可扩展的高性能MQTT服务器与数据流管理器,彼此相辅相成且互为补充,能有效帮助您缩短产品开发周期,简化物联网设备与企业间的数据通信。
图 4:u-blox 物联网通信即服务产品组合
ublox 简介
瑞士 ublox 公司 (SIX:UBXN) 是为汽车、工业和消费市场提供定位和无线通信技术的领先供应商。其解决方案能准确进行人员、车辆和机器的定位,并通过蜂窝网络和短程通信网络实现无线通信。凭借广泛及多样化的芯片、模块和日益扩大的产品支持数据服务生态系统,ublox 公司在帮助其客户针对物联网快速而成本高效地开发创新解决方案方面具有得天独厚的优势。u-blox 公司总部设在瑞士塔尔维尔,目前在欧洲、亚洲和美国都设有办事处。
请关注u-blox中国区官方微信号
作者:Eric Heiser,u-blox 高级副总裁兼产品中心服务主管