当前位置: 首页 > news >正文

MQTT协议回顾

1.基础模型:
基于 发布 - 订阅(Publish/Subscribe) 模式,
核心角色有 客户端(Client)(既可以发布也能订阅消息)=消息的发布者和订阅者
服务器(Broker)(负责接收、转发消息,匹配订阅关系)。
2.核心特性:
轻量级:协议头小(固定头 + 可变头 + 有效载荷),最小数据包可极简传输,
适配低带宽、弱网络场景。
QoS(Quality of Service):分 0(最多发一次,不保证到达)、
1(至少发一次,丢包重传)、
2(仅发一次,确保消息精准投递)三级
11 预留
遗嘱(Will Message):客户端异常断开时,Broker 代发预设消息,
用于设备离线状态通知。
保留消息(Retained Message):Broker 存储最新消息,新订阅者上线直接
获该内容,适合 “状态同步” 场景(如传感器实时数值)。

2.协议流程

把 MQTT 交互拆成 
「网络连接」→「协议握手」→「消息交互」→「断开连接」 四个阶段,
1. MQTT 是应用层协议,必须依赖 TCP 提供 可靠字节流传输
(避免消息丢包、乱序),所以第一步先完成 TCP 三次握手。
2. TCP 连接建立后,客户端立即发 CONNECT 报文,完成 MQTT 
协议层的 “身份验证 + 会话配置”
客户端发 CONNECT 后,Broker 必须回复 CONNACK,
核心看 Session Present 和 Return Code
3. 协议握手成功后,客户端与 Broker 进入 双向消息交互阶段,
核心动作有 4 类:
(1) PUBLISH发布消息,客户端或 Broker 都能发 PUBLISH
(2) SUBSCRIBE订阅主题,客户端发 SUBSCRIBE 报文,
申请订阅一个或多个主题,Broker 回复 SUBACK 确认
(3) UNSUBSCRIBE:取消订阅 客户端发 UNSUBSCRIBE 报文,
Broker 回复 UNSUBACK 确认,流程简单
(4) PING:心跳保活 若设置了 Keep Alive,客户端需定期发 
PINGREQ,Broker 回复 PINGRESP
4. 断开连接(DISCONNECT)客户端主动发 DISCONNECT 报文,
正常关闭连接:
若 Will Message 已配置,正常断开不会触发遗嘱消息(只有异常断开才触发)。
Broker 收到 DISCONNECT 后,清理该客户端的临时会话

控制报文结构:
┌───────────────┐  固定报头(必选,所有报文都有)
│  Fixed Header │  →  含「报文类型 + 标志位 + 剩余长度」
├───────────────┤
│Variable Header│  可变报头(可选,部分报文有,如 PUBLISH/QoS 相关)
├───────────────┤
│   Payload     │  报文体、有效载荷(可选,部分报文有,如实际消息内容)
└───────────────┘

与 TCP/IP 的关系:MQTT 是 应用层协议,底层必须基于 TCP/IP 协议栈
(或兼容网络层)建立可靠连接,Broker 和客户端通过 TCP socket 收发数据,
借助 TCP 的 “三次握手”“重传机制” 保障消息传输基础可靠性。

http://www.dtcms.com/a/379278.html

相关文章:

  • 端到端语音交互数据 精准赋能语音大模型进阶
  • 大模型在题目生成中的安全研究:攻击方法与防御机制
  • 可达性分析: 什么东西可以被当作根
  • Spring框架中的常见面试题
  • JavaScript 中 map 和 filter 方法的快速上手指南 (附综合案例)
  • C#写字符串到Modbus中
  • 基于SpringBoot+Vue.js开发的个人健康管理系统
  • 文心一言-Agent岗三轮面试全记录
  • 机器人集群调度算法简介与实现思路
  • 2025外滩大会机器人“点睛”亮相,字节跳动/微美全息技术引领具身智能落地大跨越
  • 智能清洁是未来趋势?机器人协作更便捷
  • 基于时空数据的网约车订单需求预测与调度优化
  • Redis其他的数据类型及渐进式遍历
  • 项目中遇到pom文件里使用systemPath的例子记录
  • pycharm——关于Pyqt5
  • Qwen3 中旋转位置编码
  • vue3项目sass全局变量的设置和使用
  • 透彻理解Python环境管理:虚拟环境、Conda、Pyenv和Pipx为何而生
  • 【unity实战】实现在unity3D模型上画线写字涂鸦效果
  • 2025最新超详细FreeRTOS入门教程:第十三章 FreeRTOS临界区与原子操作
  • 玩转Docker | 使用Docker部署dufs文件管理工具
  • 计算机组成原理:定点乘法运算
  • PyQt5 主窗口状态栏实时显示当前路径的实现与分析
  • 利用conda打包/复刻生信环境
  • glide介绍
  • vscode 中通义灵码显示登录过期
  • 【VScode】ssh报错
  • STM32 norflash W25Q64移植FatFS
  • 【Git】版本控制-Gitee
  • Qt常见问题