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

“深入浅出”系列之数通篇:(5)TCP的三次握手和四次挥手

TCP(传输控制协议)的三次握手和四次挥手是TCP连接建立和释放的过程。

一、TCP三次握手

TCP三次握手是为了建立可靠的连接,确保客户端和服务器之间的通信能力。具体过程如下:

第一次握手:客户端向服务器发送一个带有SYN(Synchronize Sequence Numbers,同步序列编号)标志的数据包,表示需要建立TCP连接。此时,客户端进入SYN_SENT状态,等待服务器的确认。

第二次握手:服务器收到客户端的SYN数据包后,会回复一个带有SYN/ACK标志的数据包,表示同意建立连接并确认收到了客户端的请求。此时,服务器进入SYN_RECEIVED状态。SYN/ACK数据包中的ACK字段数值是在客户端发送过来的序列号的基础上加1进行回复的,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。

第三次握手:客户端收到服务器的SYN/ACK数据包后,会再次回复一个带有ACK标志的数据包,表示确认收到了服务器的回复,并准备好进行数据传输。此时,客户端和服务器都进入ESTABLISHED状态,表示TCP连接已经成功建立。

在三次握手过程中,服务器会维护一个未连接队列,为每个客户端的SYN数据包开设一个条目,并等待客户端的确认。如果服务器在发送SYN/ACK数据包后未收到客户端的确认,会进行重传,直到达到最大重传次数为止。

二、TCP四次挥手

TCP四次挥手是为了释放已经建立的连接。由于TCP是全双工通信,因此每个方向都必须单独进行关闭。具体过程如下:

第一次挥手:客户端想要释放连接时,会向服务器发送一个带有FIN(Finish,结束)标志的数据包,表示需要关闭客户端到服务器的数据传送。此时,客户端进入FIN_WAIT_1状态。

第二次挥手:服务器收到客户端的FIN数据包后,会回复一个带有ACK标志的数据包,表示确认收到了客户端的释放连接请求。此时,服务器进入CLOSE_WAIT状态,并准备关闭服务器到客户端的数据传送。客户端收到服务器的ACK数据包后,进入FIN_WAIT_2状态。

第三次挥手:服务器在确认所有传输到客户端的数据已经发送完毕后,会向客户端发送一个带有FIN标志的数据包,表示准备关闭服务器到客户端的数据传送。此时,服务器进入LAST_ACK状态。

第四次挥手:客户端收到服务器的FIN数据包后,会回复一个带有ACK标志的数据包,表示确认收到了服务器的释放连接请求。此时,客户端进入TIME_WAIT状态,并等待足够的时间(通常为2MSL,即Maximum Segment Lifetime的两倍)以确保服务器接收到确认报文。在TIME_WAIT期间,客户端不会立即释放连接资源,以防止由于网络延迟等原因导致的重复报文。如果在这段时间内没有收到服务器的任何报文,客户端会进入CLOSED状态,表示连接已经完全释放。服务器在收到客户端的ACK数据包后,也会进入CLOSED状态。

http://www.lryc.cn/news/523663.html

相关文章:

  • 接口测试及接口测试常用的工具
  • 使用rpc绕过咸鱼sign校验
  • NPC与AI深度融合结合雷鸟X3Pro AR智能眼镜:引领游戏行业沉浸式与增强现实新纪元的畅想
  • 【物联网】ARM核介绍
  • Android系统定制APP开发_如何对应用进行系统签名
  • Tesla Free-Fall Attack:特斯拉汽车网络安全事件纪要
  • 网络安全工程师学习路线
  • 分区和分表有什么区别?
  • C#,入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程
  • 简述mysql 主从复制原理及其工作过程,配置一主两从并验证。
  • Android 右键后无Java class创建
  • 【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数
  • 哈尔滨有双线服务器租用吗?
  • JVM 面试八股文
  • STM32 FreeRTOS内存管理简介
  • 【云岚到家】-day02-客户管理-认证授权
  • 【达梦数据库】两地三中心环境总结
  • 【springboot 集成 mybatis-plus】
  • 深入浅出 Go语言并发安全字典 sync.Map:原理、使用与优化
  • 【Go】Go数据类型详解—指针
  • 道格拉斯-普克算法(DP)轮廓点精简(Python)
  • WPF如何跨线程更新界面
  • Ubuntu 24.04 LTS 服务器折腾集
  • ROS机器人学习和研究的势-道-术-转型和变革的长期主义习惯
  • Linux 管道操作
  • 【Python】深入探讨Python中的单例模式:元类与装饰器实现方式分析与代码示例
  • imbinarize函数用法详解与示例
  • 【NextJS】PostgreSQL 遇上 Prisma ORM
  • ASP.NET Core - 配置系统之配置提供程序
  • 【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】