MQTT——物联网的神经系统

原文:MQTT – The Nerve System of IoT
翻译:安翔
审校:苏宓

当今世界有数十亿的智能设备,畅想一下,假如这些设备都相互连接并且能够像它的用户一样互相交流,同时形成一个全球化的网络,会是怎样的情形呢?这其实就是通常所说的物联网,或者叫 IoT。物联网已经彻底改变了 IT 世界以及我们的创新方式。在探索物联网的时候必须考虑它的性能和安全问题。

消息队列遥测传输协议(MQTT)

MQTT是TCP / IP协议之上的基于发布/订阅模式的机器到机器(M2M)通信的轻量级消息协议。该协议提供遥测技术,MQTT 开发人员正在努力连接不断壮大的互联网世界,预计将会产生更多样化的智能设备。 MQTT 协议的第一个版本由 IBM 的 Stanford-Clark 和 Arlen Nipper 撰写。

选择 MQTT 的理由

MQTT 已经用于 Facebook的 消息应用,它可以在不消耗太多电量的情况下和服务器保持长连接;它仅仅需要很低的网络带宽,同时代码的占用的空间也很小;它通过广泛分布和有时间间歇的网络传输数据。这些特点使得 MQTT 应用在小内存、弱处理能力的远程设备上具有很大的优势。

此外,MQTT 还有如下一些非常显著的特点:

  • 开源、免费、易用
  • 遵循一对多、发布/订阅模式
  • 精简的消息头
  • 提供多个不同质量、等级的服务
  • 简单的消息指令
  • 不强求传输数据的类型与格式,保持灵活性
  • 消息可保留
  • 干净的会话和持久的连接
  • 遗愿标志

MQTT 和 HTTP 的对比:

.MQTTHTTP
设计以数据为中心以文档为中心
模式发布/订阅请求/响应
复杂度简单的命令复杂
消息大小很小,2字节的紧凑二进制消息头比较大,消息头是文本格式
服务等级具有3个 QoS 级别只有一个消息服务等级
消息发布方式一对多一对一

MQTT 拓扑结构的一个例子:

MQTT 消息类型

为了更好地理解消息级别,我们先了解一下 MQTT 的消息类型。MQTT 具有14中消息类型:

消息名称含义
CONNECT客户端连接到MQTT代理
CONNACK连接确认
PUBLISH新发布消息
PUBACK新发布消息确认,是QoS 1给PUBLISH消息的回复
PUBRECQoS 2消息流的第一部分,表示消息发布已记录
PUBRELQoS 2消息流的第二部分,表示消息发布已释放
PUBCOMPQoS 2消息流的第三部分,表示消息发布完成
SUBSCRIBE客户端订阅某个主题
SUBACK对于SUBSCRIBE消息的确认
UNSUBSCRIBE客户端终止订阅的消息
UNSUBACK对于UNSUBSCRIBE消息的确认
PINGREQ心跳
PINGRESP确认心跳
DISCONNECT客户端终止连接前优雅地通知MQTT代理

服务质量等级

QoS 值决定了每个消息将如何传递,每个发送的消息都需要强制性设置 QoS 值。

级别0(最多一个消息传递)

当消息的 QoS 值设置为 0 时,不需要响应,并且不会定义重传机制。消息要么一次性成功到达 broker(MQTT 代理),要么就无法到达。如果客户端断开连接或服务器发生故障,则QoS 0消息将会丢失,MQTT 层不会尝试消息重传。从性能的角度来看,这是使用 MQTT 发送消息的最快方法。级别0中只使用 MQTT 命令 PUBLISH,其他命令均不会被使用。

级别1(至少一个消息传递)

MQTT 客户端或服务器将尝试至少传递一次消息,但可能存在重复的消息。当代理收到消息时,将发送确认指令 PUBACK。在没有收到 PUBACK 的情况下,发送方会再次使用 DUP(重复)发送消息。在接收到设置了 DUP 位的消息时,代理将向所有订阅者重新发布消息,并再次发送确认指令 PUBACK 给发送方。级别1的通信机制通过 MQTT 消息持久化来实现。发生 PUBLISH 时,消息将存储在持久化层(比如磁盘)中,并在接收到 PUBACK 时将其删除。QoS 1 的消息在消息头中具有消息 ID 。

级别2(正好一个消息传递)

在 QoS 1 的基础上通过额外的控制流确保消息正好传递一次,不会重复。消息在PUBLISH 流中发送,由客户端存储在持久层中。作为对 PUBLISH 的响应会发送 PUBREC 消息。同时,消息被锁定在服务器上。在接收到 PUBREC 时,将 PUBREL 发送到服务器。接收到 PUBREL 时,代理发送消息,返回 PUBCOMP 并丢弃存储状态。QoS 2 的消息在消息头中具有消息 ID。

MQTT 的安全性

MQTT 旨在为为物联网提供轻量级的通信,但是安全性是以增加处理器使用率和通信开销为代价的。这是为什么在协议中只有少数几个安全机制的原因。但是许多 MQTT的实现都使用了SSL / TLS等安全标准。

MQTT 中的安全性分为多个层级:

网络层:使用物理安全网络或 VPN 为通信提供安全连接。

传输层:使用 TLS / SSL 进行传输加密,确保通信加密、身份验证。

应用层:该协议具有客户端ID,用户名/密码凭证提供设备认证。另一种方式是在没有广泛传输加密的情况下进行有效负载加密。

MQTT 实践 - 家庭监控

家庭监控系统是基于 MQTT 的应用程序的典型示例。例如,室内加热器的当前温度可根据要求发送到设备。

像任何其他应用程序一样,当涉及到两个应用程序或者设备之间的通信时,就会有通信失败的可能,监视应用程序以确保应用程序的有效运行和良好的用户体验显得非常重要。

Catchpoint 目前可以使用 MQTT 协议监视 IoT 设备的性能和可用性。MQTT 测试可用于通过发布和订阅指定主题的消息的方式来使用MQTT的发布/订阅模式,并且可以测量通信时间。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信。基于MQTT物联网消息系统可以实现设备之间的数据传输与通信。 下面是基于MQTT物联网消息系统的设计与实现步骤: 1. 确定系统架构:物联网消息系统包括设备端、MQTT Broker、后台服务三个部分。设备端负责采集数据,通过MQTT协议将数据发送到Broker,后台服务负责接收数据并处理。 2. 设计消息格式:根据业务需求,设计消息格式,包括消息头和消息体。消息头包含设备ID、消息类型等信息,消息体包含具体数据。 3. 部署MQTT Broker:选择一个可靠的MQTT Broker,例如Eclipse Mosquitto,进行部署和配置。 4. 设备接入:设备通过MQTT协议接入系统,需要在设备端集成MQTT客户端库,连接到MQTT Broker,并且发布消息到指定的Topic。 5. 后台服务接收数据:后台服务需要订阅设备发送的消息Topic,并且接收数据并处理。后台服务可以使用MQTT客户端库进行订阅和接收消息。 6. 数据存储和分析:后台服务接收到设备发送的消息后,可以将数据存储到数据库中,并进行数据分析和处理。 7. Web界面展示:可以通过Web界面展示设备发送的数据和分析结果,实现对物联网设备的管理和控制。 总之,基于MQTT物联网消息系统可以实现设备之间的数据传输和通信,为物联网应用提供了重要的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值