整理了一下网络编程中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 协议的三次握手和四次挥手过程来实现的,它们确保了网络连接的可靠建立和关闭,以及数据的可靠传输。

相关推荐
张一不吃豆芽1 分钟前
TCPIP详解 卷1协议 八 ICMPv4和ICMPv6 Internet控制报文协议
网络·网络协议·tcp/ip
野犬寒鸦3 分钟前
Linux常用命令详解(下):打包压缩、文本编辑与查找命令
linux·运维·服务器·数据库·后端·github
是垚不是土20 分钟前
探秘高可用负载均衡集群:企业网络架构的稳固基石
运维·服务器·网络·云原生·容器·架构·负载均衡
skywalk81631 小时前
在一个FreeBSD的控制台,当移动鼠标时,就会有字符发生,这是怎么回事:35;62;18m35;60;
服务器·计算机外设·freebsd
胖大和尚1 小时前
Termius ssh连接服务器 vim打开的文件无法复制问题
服务器·ssh·vim
进取星辰1 小时前
24、TypeScript:预言家之书——React 19 类型系统
linux·运维·ubuntu
向哆哆1 小时前
Netty在Java网络编程中的应用:实现高性能的异步通信
java·网络·php
阳区欠2 小时前
【Linux】线程的同步与互斥
linux·服务器·c++·线程同步·线程互斥·生产者/消费者模型
WG_172 小时前
Linux:43线程封装与互斥lesson31
linux·运维·服务器
showmethetime2 小时前
centos 中查看 内存及磁盘使用率
linux·运维·centos