TCP断开通信前的四次挥手(为啥不是三次?)

ops/2025/1/21 19:36:35/

1.四次握手的过程

  • 客户端A发送 FIN(终止连接请求)

    • A:我要断开连接了(FIN)。
    • A进入FIN_WAIT_1状态,表示请求断开,等待对方确认。
  • 服务器B回复 ACK(确认断开请求,但还未准备好关闭)

    • B:我收到了你的断开请求,但我还有数据要处理,你先等一下(ACK)。
    • B进入CLOSE_WAIT状态,A进入FIN_WAIT_2状态,A此时不会再发送数据,但会继续接收。
  • 服务器B处理完数据后,发送 FIN(关闭请求)

    • B:我也准备好断开了,我们可以关闭连接(FIN)。
    • B进入LAST_ACK状态,等待客户端的最终确认。
  • 客户端A回复 ACK(确认断开完成)

    • A:好的,连接断开(ACK),正式关闭连接。
    • A进入TIME_WAIT状态,等待一段时间确保B已收到ACK,之后真正关闭。B收到ACK后直接关闭连接。

2.为啥不是三次(确保数据完整交付)

假设三次挥手的流程如下:

  1. A 发送 FIN,请求关闭连接。
  2. B 立即发送 FIN+ACK,表示确认并关闭连接。
  3. A 直接关闭连接。

问题:

  • 由于B可能仍有未完成的数据需要发送,A的过早关闭会导致数据丢失。
  • B应该在确认A的请求(ACK)后,先完成自己要发送的数据,再主动请求关闭(发送 FIN)。
  • 三次挥手无法区分“确认收到断开请求 和 我也准备断开””这两个不同的操作,因此需要额外的一次握手。

总结:TCP 需要四次挥手,而不能三次的原因是:

  1. TCP是全双工通信,双方的发送和接收是独立的,必须各自关闭。
  2. 确保数据的完整性,避免提前关闭连接导致数据丢失。
  3. 防止“半关闭”状态时误断开,导致连接数据未完整发送。

http://www.ppmy.cn/ops/151987.html

相关文章

Vue2:el-tree用scope slot为每一个节点添加一个鼠标悬浮时出现的右对齐的按钮

el-tree中,每一个节点后面添加一个按钮,响应除节点点击事件之外的操作,要求: 1、按钮在鼠标悬浮在该节点之上时才出现 2、按钮右对齐 实现如下。 1、为每个节点添加按钮 从官网说明来看,有两种方式添加按钮,render-content和 scoped slot,我使用的是scoped slot方式…

2025年免费量化交易软件——PTrade(含开通攻略)

量化交易软件,为广大投资者提供了一个便捷、高效的投资工具。 本文重点为大家介绍一款2025年好用的免费量化交易软件:PTrade量化,并详解其功能、特点、开通方法等。 一、PTrade的概念 PTrade是恒生电子开发的一款交易终端软件,旨…

【面试题】JVM部分[2025/1/13 ~ 2025/1/19]

JVM部分[2025/1/13 ~ 2025/1/19] 1. JVM 由哪些部分组成?2. Java 的类加载过程是怎样的?3. 请你介绍下 JVM 内存模型,分为哪些区域?各区域的作用是什么?4. JVM 垃圾回收调优的主要目标是什么?5. 如何对 Jav…

springboot基于微信小程序的传统美食文化宣传平台小程序

Spring Boot 基于微信小程序的传统美食文化宣传平台 一、平台概述 Spring Boot 基于微信小程序的传统美食文化宣传平台是一个集传统美食展示、文化传承、美食制作教程分享、用户互动交流以及美食相关活动推广为一体的综合性线上平台。它借助 Spring Boot 强大的后端开发框架构…

32单片机从入门到精通之测试与验证——单元测试(十五)

人生苦短,我们都会面临困难和挑战。但是,只要我们保持积极的心态和勇往直前的精神,我们就能战胜一切困难,实现自己的目标。 成功并不是一蹴而就的,它需要我们付出努力和坚持不懈。就像爬山一样,我们可能会遇…

大数据-260 实时数仓 - 项目背景与需求 实时数仓架构 需求分析 技术选型 逻辑架构

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 目前已经更新到了: H…

grafana + Prometheus + node_exporter搭建监控大屏

本文介绍生产系统监控大屏的搭建,比较实用也是实际应用比较多的方式,希望能够帮助大家对监控系统有一定的认识。 0、规划 grafana主要是展示和报警,Prometheus用于保存监控数据,node_exporter用于实时采集各个应用服务器的事实状…

理解CPU负载与使用率

目录 CPU使用率 CPU负载 CPU使用率 定义:就像看一个工人干活的时间占他上班时间的比例。比如工人上班8小时,实际干活6小时,干活时间占比就是68100%75%。对于CPU,单核的看它被占用的时间占总时间的比例,多核的就把每个…