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/11/5 4:58:13 阅读更多 →
CTF Web安全入门:SQL注入、文件上传与命令执行三大核心漏洞详解

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

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

2026/11/8 22:09:22 阅读更多 →
转化服务数字员工:智能客服和智能销售如何减少线索漏损

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

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

2026/10/29 12:10:55 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/9 14:01:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/9 14:56:39 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/10 2:03:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/9 14:01:11 阅读更多 →

日新闻

周新闻

月新闻