MQTT四次握手
MQTT 的四次握手特指QoS 2Exactly Once恰好一次消息传递机制。它是 MQTT 协议中可靠性最高、但也最复杂的交付保障核心目标是确保消息既不丢失也不重复。这四次握手并非建立连接而是针对单条消息的端到端确认流程。 四次握手详细流程整个过程涉及四种控制报文通过两个阶段的确认来保证消息的唯一性PUBLISH (QoS 2)发送方客户端或 Broker发出消息并携带唯一的 Packet ID。发送方会将此消息持久化存储直到收到最终确认12。PUBREC (Publish Received)接收方收到 PUBLISH 报文后不会立即将消息投递给应用层而是先回复 PUBREC 报文告知发送方“我已安全收到请进入第二阶段”。同时接收方会记录下这个 Packet ID防止后续重复处理。PUBREL (Publish Release)发送方收到 PUBREC 后确认接收方已安全接收于是可以丢弃原始的 PUBLISH 消息。随后发送 PUBREL 报文通知接收方“你可以安全地处理这条消息了”。PUBCOMP (Publish Complete)接收方收到 PUBREL 后确认不会再收到重传的 PUBLISH 报文于是将消息正式投递给应用层并回复 PUBCOMP 报文。发送方收到 PUBCOMP 后丢弃 PUBREL 报文整个消息传递流程才算真正完成。️ 为什么需要四次如何防止重复QoS 1 只需要两次握手PUBLISH PUBACK但存在一个致命缺陷如果接收方处理完消息并发送了 PUBACK但 PUBACK 在网络中丢失发送方超时后会重传 PUBLISH导致接收方重复处理消息12。QoS 2 的四次握手通过状态机 Packet ID完美解决了这个问题第一阶段 (PUBLISH → PUBREC)确保消息被安全接收。即使 PUBREC 丢失导致发送方重传 PUBLISH接收方通过 Packet ID 识别出这是重复消息只会再次回复 PUBREC而不会重新处理消息。第二阶段 (PUBREL → PUBCOMP)确保消息被安全投递。只有收到 PUBREL接收方才确认“不会再有重传”此时才将消息交给应用层。即使 PUBCOMP 丢失发送方重传 PUBREL接收方也能通过状态机识别出该消息已处理完毕直接回复 PUBCOMP避免重复投递。⚠️ 关键注意事项会话内有效QoS 2 的“恰好一次”保证仅在单个会话Session内有效。如果客户端断开重连且Clean Session true历史状态丢失无法跨会话保证唯一性。性能开销最大四次握手意味着每条消息至少需要 4 次网络往返带宽和延迟开销远高于 QoS 0 和 QoS 1。不要滥用除非是计费、金融交易、关键控制指令等绝对不能丢失或重复的场景否则不建议使用 QoS 223。对于高频传感器数据或普通告警QoS 1 配合应用层幂等处理是更优选择13。应用层仍需幂等尽管 QoS 2 在协议层保证了“恰好一次”但在分布式系统或客户端异常重启等极端情况下应用层实现幂等处理依然是最佳实践1。 QoS 级别对比速查QoS 级别语义握手次数可靠性适用场景QoS 0至多一次 (At most once)1 次最低可能丢失高频传感器数据、日志上报QoS 1至少一次 (At least once)2 次中等保证送达但可能重复告警通知、设备状态同步QoS 2恰好一次 (Exactly once)4 次最高不丢不重计费、金融交易、关键控制指令核心总结MQTT 四次握手是 QoS 2 的实现机制通过两阶段确认和状态机设计在协议层面解决了 QoS 1 的重复投递问题。但它以性能为代价仅适用于对消息一致性要求极高的关键场景12。

相关新闻

Go泛型堆(heap/v2)设计与性能优化实践

Go泛型堆(heap/v2)设计与性能优化实践

1. Go语言堆数据结构演进史在计算机科学中,堆(Heap)是一种特殊的完全二叉树结构,它满足堆属性:每个节点的值都大于等于(最大堆)或小于等于(最小堆)其子节点的值。这种数据…

2026/10/12 19:07:28 阅读更多 →
CTF Web安全入门:SQL注入、文件上传与命令执行三大核心漏洞详解

CTF Web安全入门:SQL注入、文件上传与命令执行三大核心漏洞详解

1. 项目概述:从零到一,理解CTF Web赛道的核心价值如果你刚接触网络安全,或者对CTF(Capture The Flag,夺旗赛)充满好奇,看到“Web安全”这个赛道时,可能会觉得它既神秘又复杂。各种漏…

2026/10/16 0:55:21 阅读更多 →
转化服务数字员工:智能客服和智能销售如何减少线索漏损

转化服务数字员工:智能客服和智能销售如何减少线索漏损

很多企业投入大量预算做流量,但转化一直上不去。问题往往不在流量不够,而在"接不住"。用户来了,咨询没人及时回,等了半天就走了;线索攒了一堆,没人跟进,慢慢就凉了;客户咨…

2026/10/2 6:40:37 阅读更多 →

最新新闻

海南商业航天发射场:填补空白,撬动高频发射产业链

海南商业航天发射场:填补空白,撬动高频发射产业链

这两年搞商业航天的团队越来越多,但不少火箭造出来了,真正卡住他们的往往不是技术,而是一个很现实的问题——去哪儿发射。海南商业航天发射场就是冲着这个空白去的:它是国内第一个专门为商业火箭搭建的发射阵地,定位就…

2026/10/16 4:45:24 阅读更多 →
Deepin 20安装佳能LBP2900打印机驱动实战指南

Deepin 20安装佳能LBP2900打印机驱动实战指南

1. 项目概述:为什么在Deepin 20(1002)上装LBP2900不是“点几下就完事”的事?你刚拿到一台二手LBP2900,或者办公室里那台服役十年的老打印机突然被新配的Deepin 20电脑“拒之门外”——系统识别出设备,但点击…

2026/10/16 4:45:24 阅读更多 →
llama.cpp与GGUF完全指南:本地大模型推理与量化实战

llama.cpp与GGUF完全指南:本地大模型推理与量化实战

1. 本地大模型跑起来的真相:llama.cpp 和 GGUF 到底是什么关系第一次接触 llama.cpp 的时候,我脑子里只有一个疑问:为什么大家都在说它,却没人把它和模型文件的关系讲清楚。后来自己折腾了几个晚上才明白,这俩其实是两…

2026/10/16 4:45:24 阅读更多 →
华为OD机试Python备考指南:评分规则、高频题型与答题节奏

华为OD机试Python备考指南:评分规则、高频题型与答题节奏

简介:这是一套面向华为OD机试备考者的Python解题代码合集,适合正在准备在线编程笔试、希望提升算法实战能力的开发者。内容覆盖IP地址识别、01背包动态规划、扑克牌大小比较、素数伴侣、数字转英语、索引统计等典型题型,涉及socket与ipaddres…

2026/10/16 4:45:24 阅读更多 →
Dify模型供应商API Key解密全攻略:从PostgreSQL还原明文密钥

Dify模型供应商API Key解密全攻略:从PostgreSQL还原明文密钥

先别急着翻配置文档,我直接说结论:如果你用的是Docker Compose部署的Dify,模型供应商的API Key虽然不会明文存在数据库里,但只要你的SECRET_KEY还在,就有办法把密文解出来。这篇东西就是干这个用的——我会从Dify到底怎…

2026/10/16 4:45:24 阅读更多 →
深度学习花书学习笔记法:模块化拆解与代码实践

深度学习花书学习笔记法:模块化拆解与代码实践

我在这行摸爬滚打了快十年,带过不少新人,也见过太多人兴致勃勃翻开深度学习教材,结果没几天就放弃了。说实话,不是那本书写得不好,而是大多数人的打开方式不对。“deeplearningbook_001-1”这个标题,就是我…

2026/10/16 4:44:24 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →