一.MQTT简介MQTT是基于TCP/IP协议栈构建的异步通信消息协议 , 是一种轻量级的发布/订阅信息传输协议 。MQTT在时间和空间上 , 将消息发送者与接受者分离 , 可以在不可靠的网络环境中进行扩展 。适用于设备硬件存储空间有限或网络带宽有限的场景 。物联网平台支持设备使用MQTT协议接入MQTT的特点是可以保持长连接 , 具有一定的实时性 , 云端向设备端发送消息 , 设备端可以在最短的时间内接收到并作出响应 , 所以MQTT更适合需要实时控制的场合 , 更适合执行器 。要保持长连接 , 那么就要时不时地发送心跳包 , 这就不会省电了 。所以低功耗的场合并不适合MQTT 。MQTT的长连接需要建立在TCP的基础上 , TCP协议的复杂性决定了对设备的要求是比较高一些的 , 相比UDP 。
【MQTT协议使用总结】
二.MQTT框架图
文章插图
三.MQTT特点MQTT协议是为大量计算能力有限 , 且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议 , 它具有以下主要的几项特性:
- 使用发布/订阅消息模式 , 提供一对多的消息发布 , 解除应用程序耦合;
- 对负载内容屏蔽的消息传输;
- 使用 TCP/IP 提供网络连接;
- 有三种消息发布服务质量:QoS(定阅等级) , 分0、1、2三个等级 , 简单来说是等级越高越可靠 。
“至少一次”(QoS1):确保消息到达 , 但消息重复可能会发生 。即是你收到推送后 , 你还得返回一个puback给对方 , 告诉对方收到了 , 不然对方会以为你没收到 , 隔一段时间后重新给你推送 , 直到你给对方返回一个Puback为止 。
“只有一次”(QoS2):确保消息到达一次 。这一级别可用于如下情况 , 在计费系统中 , 消息重复或丢失会导致不正确的结果 。
文章插图
- 小型传输 , 开销很小(固定长度的头部是2字节) , 协议交换最小化 , 以降低网络流量;
- 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制 。
MQTT客户端可以注册一个典型的遗愿遗嘱消息 , 如果它们断开连接 , 由代理发送 。这些消息可以用于向订阅者发出信号 , 当设备断开连接时 。
四.MQTT协议原理1.MQTT协议实现框图
文章插图
?
2.MQTT协议实现方式实现MQTT协议需要:客户端和服务器端MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe) 。其中 , 消息的发布者和订阅者都是客户端 , 消息代理是服务器 , 消息发布者可以同时是订阅者 。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分
- Topic:可以理解为消息的类型 , 订阅者订阅(Subscribe)后 , 就会收到该主题的消息内容(payload) 。
- Payload:可以理解为消息的内容 , 是指订阅者具体要使用的内容 。
4.MQTT客户端一个使用MQTT协议的应用程序或者设备 , 它总是建立到服务器的网络连接 。客户端可以:
推荐阅读
- 使用Redis时要避免的5个错误
- Linux进程管理
- 白帽黑客如何使用Dirbuster网站目录扫描神器
- 网络协议之:基于UDP的高速数据传输协议UDT
- Windows命令行包管理工具scoop使用教程
- 使用 MDT 下载部署 Windows 11 局域网批量安装252台
- 前篇 使用 Docker 和 Node 搭建公式渲染服务
- 使用.NET5、Blazor和Electron.NET构建跨平台桌面应用
- 内网常见隧道工具的使用
- 使用 NetQ 排除网络故障