第03章 MQTT协议
约 1135 字大约 4 分钟
2026-01-27
3.1 MQTT 通信协议介绍
MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输 )是一种轻量级的、基于发布/订阅模式的消息传输协议,广泛应用于嵌入式系统和物联网(IoT)设备中。由于其协议设计简单、开销小、易于实现,MQTT 在带宽受限、网络不稳定、低功耗设备中尤其受到青睐。


MQTT 特点:
轻量级和高效:MQTT消息头小,只有2字节的开销,因此非常适合资源有限的设备。
基于发布/订阅模式:设备可以作为发布者或订阅者,发布者发送消息到主题(Topic),订阅者接收订阅的主题的消息。
可靠性:提供三种消息传递质量(QoS)等级:
QoS等级 可靠性 重复可能性 协议流程 网络开销 适用场景 QoS 0 最低
消息最多发送一次,且不确认无 单向发送
PUBLISH最低 高频非关键数据,
如传感器读数、状态报告QoS 1 较高
消息至少发送一次,且需要确认可能重复 双向确认
PUBLISH → PUBACK)中等 重要指令或状态更新,如设备控制、安防警报 QoS 2 最高
确保消息仅发送一次,使用四步握手进行确认无 四步握手
PUBLISH → PUBREC → PUBREL → PUBCOMP最高 关键业务,
如金融交易、航空控制、固件升级补充说明:
- QoS降级规则:若订阅者请求的QoS低于发布者设定的等级,代理(Broker)会按较低等级转发消息(如QoS 2降级为QoS 1)
- 性能影响:QoS 2的吞吐量通常为QoS 0/1的一半,且CPU和磁盘I/O压力更大。
- 业务层处理:QoS 1需业务逻辑处理重复消息(如通过消息ID或时间戳去重)。
保持连接(Keep Alive)机制:设备与MQTT代理之间通过心跳机制保持连接,减少了网络中断的影响。
最大保活间隔:18小时12分钟15秒。客户在保活间隔乘以1.5倍的时间内可以不与broker通信。如果客户没有消息发给broker,则应该发布PINGREQ包;broker回复PINGRESP包。 broker具有Client Take-Over功能,以便在客户重连broker,但broker认为与客户的TCP连接还存在时(称为Half-Open),能删除原有连接,接收重连请求。持久化会话:可以保存客户端的订阅信息和消息状态,当客户端重新连接时,仍能接收到未接收到的消息。
MQTT 网络拓扑结构:

Topic(主题名):
命名规则:

通配符(过滤器)规则:

3.2 使用 mosquitto 部署 MQTT 服务器
① 安装
Mosquitto是轻量级命令行工具,方便大家在学习的过程中,轻松的在本机部署MQTT的服务端。

② 修改配置参数
mosquitto 软件默认创建的服务端不能使用其他机器连接,所以需要对其进行配置,找到安装路径:C:\Program Files\mosquitto(此为默认安装目录) 。使用文本编辑器打开配置文件 mosquitto.conf(注意需要管理员权限)。在文件的末尾添加两行配置:
listener 1883 0.0.0.0
allow_anonymous true③ 添加环境变量
将 mosquitto 的安装目录添加到 Path 中。
④ 启动本地服务端
使用电脑进入到 POWER SHELL中,输入以下命令:
mosquitto -v -c 'C:\Program Files\mosquitto\mosquitto.conf', 注意要改为你的安装路径。
如果出现以下报错信息:
PS C:\Users\merge> mosquitto -v -c 'C:\Program Files\mosquitto\mosquitto.conf'
1740818155: mosquitto version 2.0.20 starting
1740818155: Config loaded from C:\Program Files\mosquitto\mosquitto.conf.
1740818155: Opening ipv4 listen socket on port 1883.
1740818155: Error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。是因为本机会默认启动一个无法连接的服务端,需要在任务管理器中关闭之后再重新执行:


3.3 MQTT客户端工具 MQTTX
MQTTX 是一款便捷的图形化MQTT软件,方便直接使用windows窗口进行MQTT的调试。
① 配置

安装完成之后添加新的MQTT连接,填写如下参数

② 发布和订阅
订阅


直接使用图形界面下面的窗口即可发送数据:

