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

TCP 的四次挥手

TCP 的四次挥手是用于安全关闭一个已建立的连接的过程,它确保双方都能完成数据传输并安全地释放连接资源。

简述步骤:

1)第一次挥手(FIN → ACK):客户端主动关闭连接,发送 FIN 包,进入 FIN_WAIT_1 状态。服务器收到 FIN 后,表示不再接收数据,但仍可能继续发送数据。

2)第二次挥手(ACK):服务器发送 ACK 包,确认已收到 FIN。此时服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。

3)第三次挥手(FIN → ACK):服务器完成所有数据传输后,发送 FIN 包,进入 LAST_ACK 状态。客户端收到 FIN 后,准备关闭连接。

4)第四次挥手(ACK):客户端发送最后一个 ACK 包,进入 TIME_WAIT 状态,等待可能迟到的 FIN 包。服务器收到 ACK 后,关闭连接,进入 CLOSED 状态。客户端在 TIME_WAIT 计时结束后(2MSL),正式关闭连接。

为什么挥手需要四次

主要是为了确保数据完整性

比如当客户端数据发送完之后,发送 FIN,此时服务器收到返回 ACK,那这个时候可能服务器还有数据没返回给客户端,所以要等服务器没有数据要返回的时候发送 FIN,客户端返回 ACK,此时正好需要四次挥手。

挥手一定需要四次吗

不一定,可能需要三次

可能客户端发送完 FIN 后,服务器也没有数据要返回了,此时服务器的 ACK+FIN 可以一起发送给客户端。这是挥手就变成了三次。

TIME_WAIT 状态

1)确保最后的 ACK 被成功接收
  • 在 TCP 四次挥手过程中,主动关闭连接的一方在发送最后一个 ACK 确认包后进入 TIME_WAIT 状态。
  • 如果这个 ACK 丢失了,另一方(被动关闭连接的一方)没有收到确认包,会重发 FIN 报文。主动关闭的一方需要在 TIME_WAIT 状态下保持一段时间,以便能够重发 ACK,确保连接能被正确地关闭。
2)防止旧的重复分段干扰新连接
  • TCP 连接在关闭后,可能会有一些延迟的或者已经失效的报文还在网络中传输。如果立即重新使用相同的 IP 地址和端口建立新的连接,可能会受到这些旧报文的干扰。
  • TIME_WAIT 状态可以确保在旧连接的所有报文都超时失效后,才允许新的连接使用相同的 IP 地址和端口,从而避免数据混乱。
http://www.xdnf.cn/news/8844.html

相关文章:

  • AI重塑数据治理的底层逻辑
  • Java求职者面试指南:Spring、Spring Boot、MyBatis技术栈深度解析
  • Windows逆向工程提升之异常处理机制
  • docker 镜像完整生成指南
  • ResponseBodyEmitter与SseEmitter使用
  • MyBatis实战指南(二)如何实现小鸟图标与导入Teacher数据库表实战
  • 《深入剖析:Python自动化测试框架之unittest与pytest》
  • 微服务——网关
  • TypeScript
  • OpenCV 第7课 图像处理之平滑(一)
  • Flink流水线集成Gravitino
  • 微软Build 2025五大AI发布
  • 人工智能数学基础实验(五):牛顿优化法-电动汽车充电站选址优化
  • 基于微信小程序的漫展系统的设计与实现
  • 研报精读:数据要素市场培育及企业数据资源会计处理实证研究【附全文阅读】
  • 基于opencv的全景图像拼接
  • 【ExcelVBA 】类模块学习从入门到放弃
  • 数据仓库中的业务域与数据域
  • 关于PHP的详细介绍,结合其核心特点、应用场景及2025年的技术发展趋势,以清晰的结构呈现:
  • 用HTML5实现实时ASCII艺术摄像头
  • git子模块--常见操作
  • HarmonyOS NEXT 技术特性:分布式软总线技术架构
  • OpenLayers 加载全屏显示控件
  • 【Fargo】razor框架调用mediasoup的发送和接收能力
  • FFT Shift
  • 双目视野高精度拼接
  • PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成
  • DeepONet深度解析:原理、架构与实现
  • python+vlisp实现对多段线范围内土方体积的计算
  • 连接表、视图和存储过程