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

MQTT的QoS2中四次握手与TCP的三次握手、四次挥手的异同

目录

一、根本定位不同(核心差异)

二、流程对比

1. TCP 三次握手(建立连接)

2. TCP 四次挥手(关闭连接)

3. MQTT QoS 2 四次握手(单条消息确认)

三、功能与目标对比

四、它们的关系:分层协作

五、常见误解澄清

六、总结:异同表

结论


        MQTT QoS 2 的“四次握手”TCP 中的“三次握手”和“四次挥手” 虽然都涉及“握手”一词,但它们处于完全不同的网络层次、目的和机制。下面我们从多个维度对比分析它们的异同、关系与本质区别

        需要强调的是:‌HTTP和HTTPS使用TCP协议进行数据传输,因此它们的三次握手和四次挥手过程实际上是TCP协议的握手和挥手过程‌。TCP是传输层协议,负责建立和断开可靠的连接,而HTTP/HTTPS是应用层协议,依赖于TCP的连接管理。

        三次握手(确认双方的收发能力,保证发送方和接收方正常;防止已失效的连接请求报文突然传送到服务端;同步初始序列号)。四次挥手(资源释放;防止无效数据;提高安全性;网络效率)


一、根本定位不同(核心差异)

项目MQTT QoS 2 四次握手TCP 三次握手 / 四次挥手
协议层级应用层(MQTT 是应用层协议)传输层(TCP 是传输层协议)
目的保证单条消息的“恰好一次”可靠交付建立/释放端到端连接(会话通道)
作用对象单个 MQTT 消息(基于 Packet ID)整个 TCP 连接(socket)
是否依赖对方依赖底层已建立的 TCP 连接是建立可靠通信的基础

关键结论
MQTT QoS 2 的四次握手运行在已经通过 TCP 三次握手建立好的连接之上
换句话说:没有 TCP 三次握手,就没有 MQTT 通信;而 MQTT QoS 2 是在 TCP 连接之上的“业务级可靠性增强”


二、流程对比

1. TCP 三次握手(建立连接)

Client                 Server| ------- SYN --------> || <---- SYN+ACK ------- || ------- ACK --------> |✅ 连接建立,可传输数据
  • 目的:同步双方初始序列号,防止历史连接请求干扰。
  • 发生在任何应用数据传输之前

2. TCP 四次挥手(关闭连接)

Client                 Server| ----- FIN ----------> || <---- ACK ----------- || <---- FIN ----------- || ----- ACK ----------> |✅ 连接关闭
  • 因为 TCP 是全双工,需双向关闭。

3. MQTT QoS 2 四次握手(单条消息确认)

Sender                Receiver| -- PUBLISH (QoS=2) --> || <-- PUBREC ----------- || -- PUBREL ------------> || <-- PUBCOMP ---------- |✅ 该消息“恰好一次”交付完成
  • 发生在TCP 连接已建立之后,用于一条具体消息的可靠投递
  • 可在同一 TCP 连接中发生多次(每条 QoS 2 消息独立进行)。

三、功能与目标对比

维度MQTT QoS 2 握手TCP 握手/挥手
解决的问题应用层消息重复/丢失传输层连接建立/释放
可靠性范围单条消息的语义可靠性字节流的有序、无差错传输
重传机制应用层基于 Packet ID 重传传输层基于序列号重传
状态维护MQTT 客户端/Broker 维护消息状态机操作系统内核维护 TCP 状态(ESTABLISHED, TIME_WAIT 等)
是否可见于应用应用可通过 MQTT 库感知(如回调)应用通常无感(除非监听 socket 事件)

四、它们的关系:分层协作

MQTT 运行在 TCP 之上,典型的协议栈如下:

[ Application Layer ]↓MQTT (QoS 0/1/2)↓
[ Transport Layer ]↓TCP (三次握手 + 数据传输 + 四次挥手)↓
[ Network Layer ]↓IP

因此:

  • TCP 三次握手 → 为 MQTT 提供可靠的字节流通道
  • MQTT QoS 2 四次握手 → 在该通道上实现更高语义级别的消息可靠性(TCP 无法保证“消息是否被业务处理”)。

💡 举个例子:
TCP 能保证你发的 100 字节数据完整到达对方内核缓冲区,
但不能保证对方应用程序是否读取、是否崩溃、是否重复处理。
QoS 2 就是为了解决“应用逻辑层面”的可靠交付问题


五、常见误解澄清

误解正确理解
“MQTT 四次握手 = TCP 四次挥手”完全无关!一个是消息确认,一个是连接关闭
“QoS 2 替代了 TCP 的可靠性”不,QoS 2 依赖 TCP 的可靠性,是在其之上的增强
“用了 QoS 2 就不需要关心 TCP”错!如果 TCP 频繁断连,QoS 2 也无法完成握手,消息会卡住

六、总结:异同表

对比项MQTT QoS 2 四次握手TCP 三次握手TCP 四次挥手
所属层应用层传输层传输层
触发时机每发送一条 QoS 2 消息时连接建立时连接关闭时
目的消息“恰好一次”交付同步序列号,建立连接安全关闭双向连接
报文类型PUBLISH / PUBREC / PUBREL / PUBCOMPSYN / SYN+ACK / ACKFIN / ACK
是否可选是(可选 QoS 0/1/2)否(TCP 必须)否(关闭连接必需)
依赖关系依赖已建立的 TCP 连接无依赖(最底层可靠连接起点)依赖已建立的 TCP 连接

结论

MQTT QoS 2 的四次握手与 TCP 的三次握手/四次挥手没有直接功能关联,但存在严格的分层依赖关系:
TCP 提供“可靠管道”,MQTT QoS 2 在管道上实现“可靠消息语义”。
它们协同工作,分别解决传输层和应用层的不同可靠性问题。

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

相关文章:

  • 10个css更新
  • Git 实现github仓库管理-删除指定目录下的所有文件并保留目录结构
  • INT305 Machine Learning 机器学习 Pt.6 卷积神经网络(Convolutional Neural Network)
  • 方案分享:一款基于低功耗单片机的腰腹甩脂机方案
  • 鸿蒙开发TypeScript第三课:数组
  • React 15
  • 浏览器开发者工具(尤其是 Vue Devtools 扩展)和 Vuex 的的订阅模式冲突
  • 网站建设核电程序员找工作的网站
  • 特殊三列布局需求
  • js(DOM)基础:11、DOM定义、事件、文档的加载、DOM查询1、DOM实现轮播图、DOM查询2、DOM实现全选
  • 想做个电影网站该怎么做阳春ycqq人才招聘信息
  • JavaScript的Web APIs 入门到实战(day4):DOM 进阶与日期对象(附巩固练习和案例讲解)
  • AtCoder Educational DP Contest 刷题记录Ⅰ
  • WPF CalcBinding简化判断逻辑
  • HarmonyOS NFC应用开发:构建分布式近场通信解决方案
  • Robinhood的再进化:从零佣金交易到链上金融超级应用
  • Rust开发实战之简单游戏开发(piston游戏引擎)
  • MK9019 Buck降压电路设计笔记(光伏发电应用优化版 - UVLO 7V设置)
  • 5118网站的功能郑州网站优化公司排名
  • MQTT协议之QoS0(<=1)、QoS1(>=1)、QoS2(=1)详解
  • Dify使用02-Dify集成Ollama
  • [免费]基于Python的Flask酒店客房管理系统【论文+源码+SQL脚本】
  • LeetCode 219.存在重复元素2
  • 【CS224N】《深度学习自然语言处理》完整版笔记
  • 广东企业网站建设推荐网站做收录
  • XC7Z020-1CLG484I Xilinx AMD FPGA Zynq-7000 SoC
  • 论文分享 | BARD-GS:基于高斯泼溅的模糊感知动态场景重建
  • FPGA—ZYNQ学习spi(六)
  • 多智能体医疗会诊系统
  • ETCD 压力测试脚本