整理了一下网络编程中TCP的状态

服务器端状态

  • CLOSED:初始状态,表明 TCP 连接尚未建立或已经关闭,没有正在进行的连接或相关的资源分配。服务器在启动后未监听任何端口时,相关的 TCP 连接处于此状态。
  • LISTEN:服务器端处于监听状态,正在等待客户端的连接请求。此时服务器已经绑定到指定的端口,准备接受连接。如 Web 服务器启动后,就会在指定的端口(如 80 端口)处于 LISTEN 状态,等待浏览器等客户端的连接。
  • SYN_RCVD:当服务器接收到客户端发送的 SYN(同步)数据包后,进入此状态。表示服务器已经收到了客户端的连接请求,正在等待客户端对服务器发送的 SYN-ACK(同步确认)数据包进行确认。
  • ESTABLISHED:连接已成功建立,服务器和客户端之间可以进行数据传输。在这个状态下,双方可以相互发送和接收数据,完成各种网络交互操作,如文件传输、网页数据传输等。
  • CLOSE_WAIT:当客户端发送 FIN(结束)数据包,请求关闭连接时,服务器收到后会进入 CLOSE_WAIT 状态。此时服务器需要处理完当前正在进行的操作,然后向客户端发送 FIN 数据包来关闭连接。
  • LAST_ACK:服务器在发送 FIN 数据包后,等待客户端对该 FIN 数据包的确认。当服务器收到客户端的 ACK 确认后,就会进入 CLOSED 状态,彻底关闭连接。

客户端状态

  • SYN_SENT:客户端发送 SYN 数据包后进入此状态,表明客户端正在等待服务器的 SYN-ACK 响应。通常是客户端主动发起连接请求后所处的状态,例如浏览器向 Web 服务器发起连接请求时会出现此状态。
  • ESTABLISHED:与服务器端的 ESTABLISHED 状态一样,在客户端与服务器成功完成三次握手后,客户端也进入此状态,开始进行数据传输。
  • FIN_WAIT_1:客户端主动发送 FIN 数据包后进入此状态,等待服务器的 ACK 确认和 FIN 数据包。表示客户端已经完成了数据发送,请求关闭连接。
  • FIN_WAIT_2:客户端收到服务器对 FIN 数据包的 ACK 确认后进入此状态,继续等待服务器发送 FIN 数据包。
  • TIME_WAIT:客户端收到服务器的 FIN 数据包并发送 ACK 确认后进入此状态。在这个状态下,客户端会等待一段时间(通常是 2 倍的 MSL,即最长报文段寿命),以确保服务器能收到 ACK 确认,防止数据包丢失导致连接异常。
  • CLOSED:连接关闭状态,客户端与服务器之间的连接已完全终止,所有相关资源已释放。

这些 TCP 状态的转换是通过 TCP 协议的三次握手和四次挥手过程来实现的,它们确保了网络连接的可靠建立和关闭,以及数据的可靠传输。

相关推荐
Java.熵减码农3 小时前
解决Linux修改环境变量后导致登录循环进不去系统的问题
linux·运维·服务器
明天好,会的3 小时前
分形生成实验(五):人机协同破局--30万token揭示Actix-web状态管理的微妙边界
运维·服务器·前端
猫头虎4 小时前
如何在浏览器里体验 Windows在线模拟器:2026最新在线windows模拟器资源合集与技术揭秘
运维·网络·windows·系统架构·开源·运维开发·开源软件
C_心欲无痕4 小时前
nginx - alias 和 root 的区别详解
运维·前端·nginx
徐同保5 小时前
nginx转发,指向一个可以正常访问的网站
linux·服务器·nginx
HIT_Weston5 小时前
95、【Ubuntu】【Hugo】搭建私人博客:_default&partials
linux·运维·ubuntu
实心儿儿5 小时前
Linux —— 基础开发工具5
linux·运维·算法
oMcLin5 小时前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
SelectDB6 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
❀͜͡傀儡师6 小时前
docker部署Arcane容器可视化管理平台
运维·docker·容器