MQTT是TCP / IP协议之上的基于发布/订阅模式的机器到机器(M2M)通信的轻量级消息协议。该协议提供遥测技术,MQTT 开发人员正在努力连接不断壮大的互联网世界,预计将会产生更多样化的智能设备。 MQTT 协议的第一个版本由 IBM 的 Stanford-Clark 和 Arlen Nipper 撰写。
MQTT 已经用于 Facebook的 消息应用,它可以在不消耗太多电量的情况下和服务器保持长连接;它仅仅需要很低的网络带宽,同时代码的占用的空间也很小;它通过广泛分布和有时间间歇的网络传输数据。这些特点使得 MQTT 应用在小内存、弱处理能力的远程设备上具有很大的优势。
此外,MQTT 还有如下一些非常显著的特点:
MQTT 和 HTTP 的对比:
. | MQTT | HTTP |
---|---|---|
设计 | 以数据为中心 | 以文档为中心 |
模式 | 发布/订阅 | 请求/响应 |
复杂度 | 简单的命令 | 复杂 |
消息大小 | 很小,2字节的紧凑二进制消息头 | 比较大,消息头是文本格式 |
服务等级 | 具有3个 QoS 级别 | 只有一个消息服务等级 |
消息发布方式 | 一对多 | 一对一 |
MQTT 拓扑结构的一个例子:
为了更好地理解消息级别,我们先了解一下 MQTT 的消息类型。MQTT 具有14中消息类型:
消息名称 | 含义 |
---|---|
CONNECT | 客户端连接到MQTT代理 |
CONNACK | 连接确认 |
PUBLISH | 新发布消息 |
PUBACK | 新发布消息确认,是QoS 1给PUBLISH消息的回复 |
PUBREC | QoS 2消息流的第一部分,表示消息发布已记录 |
PUBREL | QoS 2消息流的第二部分,表示消息发布已释放 |
PUBCOMP | QoS 2消息流的第三部分,表示消息发布完成 |
SUBSCRIBE | 客户端订阅某个主题 |
SUBACK | 对于SUBSCRIBE消息的确认 |
UNSUBSCRIBE | 客户端终止订阅的消息 |
UNSUBACK | 对于UNSUBSCRIBE消息的确认 |
PINGREQ | 心跳 |
PINGRESP | 确认心跳 |
DISCONNECT | 客户端终止连接前优雅地通知MQTT代理 |
QoS 值决定了每个消息将如何传递,每个发送的消息都需要强制性设置 QoS 值。
当消息的 QoS 值设置为 0 时,不需要响应,并且不会定义重传机制。消息要么一次性成功到达 broker(MQTT 代理),要么就无法到达。如果客户端断开连接或服务器发生故障,则QoS 0消息将会丢失,MQTT 层不会尝试消息重传。从性能的角度来看,这是使用 MQTT 发送消息的最快方法。级别0中只使用 MQTT 命令 PUBLISH,其他命令均不会被使用。
MQTT 客户端或服务器将尝试至少传递一次消息,但可能存在重复的消息。当代理收到消息时,将发送确认指令 PUBACK。在没有收到 PUBACK 的情况下,发送方会再次使用 DUP(重复)发送消息。在接收到设置了 DUP 位的消息时,代理将向所有订阅者重新发布消息,并再次发送确认指令 PUBACK 给发送方。级别1的通信机制通过 MQTT 消息持久化来实现。发生 PUBLISH 时,消息将存储在持久化层(比如磁盘)中,并在接收到 PUBACK 时将其删除。QoS 1 的消息在消息头中具有消息 ID 。
在 QoS 1 的基础上通过额外的控制流确保消息正好传递一次,不会重复。消息在PUBLISH 流中发送,由客户端存储在持久层中。作为对 PUBLISH 的响应会发送 PUBREC 消息。同时,消息被锁定在服务器上。在接收到 PUBREC 时,将 PUBREL 发送到服务器。接收到 PUBREL 时,代理发送消息,返回 PUBCOMP 并丢弃存储状态。QoS 2 的消息在消息头中具有消息 ID。
MQTT 旨在为为物联网提供轻量级的通信,但是安全性是以增加处理器使用率和通信开销为代价的。这是为什么在协议中只有少数几个安全机制的原因。但是许多 MQTT的实现都使用了SSL / TLS等安全标准。
MQTT 中的安全性分为多个层级:
网络层:使用物理安全网络或 VPN 为通信提供安全连接。
传输层:使用 TLS / SSL 进行传输加密,确保通信加密、身份验证。
应用层:该协议具有客户端ID,用户名/密码凭证提供设备认证。另一种方式是在没有广泛传输加密的情况下进行有效负载加密。
家庭监控系统是基于 MQTT 的应用程序的典型示例。例如,室内加热器的当前温度可根据要求发送到设备。
像任何其他应用程序一样,当涉及到两个应用程序或者设备之间的通信时,就会有通信失败的可能,监视应用程序以确保应用程序的有效运行和良好的用户体验显得非常重要。
Catchpoint 目前可以使用 MQTT 协议监视 IoT 设备的性能和可用性。MQTT 测试可用于通过发布和订阅指定主题的消息的方式来使用MQTT的发布/订阅模式,并且可以测量通信时间。
关于:中科研拓
深圳市中科研拓科技有限公司专注提供软件+硬件结合系统解决方案定制开发服务,其中包括:软件外包、软件开发、软件定制、硬件开发、硬件定制、智能硬件开发、物联网项目等开发外包服务,通过IT技术实现创造客户和社会的价值,成为优秀的软件公司,通过客户需求导向、开放式创新、卓越运营管理等战略的实施,全面打造公司的核心竞争力。优秀软件外包公司、软件开发公司,联系电话400-0316-532,邮箱sales@zhongkerd.com,网址www.zhongkerd.com