TCP状态流转图详解

接下来再看一下著名的 tcp 状态流转图。
closed状态:表示初始状态。
listen状态:表示服务器端的某个 socket 处于监听状态,可以接受连接。
syn_sent状态:在服务端监听后,客户端 socket 执行 connect 连接时,客户端发送 syn 报文,此时客户端就进入 syn_sent
状态,等待服务端的确认。
syn_rcvd状态:表示服务端接收到了syn 报文,在正常情况下,这个状态是服务器端的 socket 在建立 tcp连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用网络查询工具 netstat 是很难看到这种状态的。因此这种状态时,当收到客户端的 ack报文后,它会进入到 established 状态。
established状态:表示连接已经建立了。
fin_wait_1状态:这个是已经建立连接之后,其中一方请求终止连接,等待对方的 fin 报文 。
fin_wait_1 状态是当 socket 在 established 状态时,它想主动关闭连接,向对方发送了 fin 报文,此时该 socket即进入到 fin_wait_1 状态。而当对方回应 ack 报文后,则进入到 fin_wait_2 状态。
当然在实际的正常情况下,无论对方处于何种情况,都应该马上回应 ack 报文,所以 fin_wait_1 状态一般是比较难见到的,而fin_wait_2 状态还可以用 netstat 看到。
fin_wait_2状态:实际上 fin_wait_2 状态下的 socket,表示半连接,即有一方要求关闭连接,但另外还告诉对方:我暂时还有点数据需要传送给你,请稍后关闭连接。
time_ wait状态:表示收到了对方的 fin 报文,并发送出了 ack 报文,就等 2msl 后即可回到 closed 可用状态了。如果在fin_wait_1 状态下,收到了对方同时带 fin 标志和 ack 标志的报文时,可以直接进入到 time_wait 状态,而无需经过 fin_wait_2状态。
closing状态:这种状态比较特殊,实际情况中应该是很少见。正常情况下,当发送 fin 报文后,按理来说是应该先收到(或同时收到)对方的ack报文,再收到对方的 fin 报文 。但是 closing 状态表示你发送 fin 报文后,并没有收到对方的 ack 文,反而收到了对方的 fin 报文。
如果双方几乎在同时关闭一个 socket 的话,那么就出现了双方同时发送 fin 报文的情况,就会出现 closing 状态,表示双方都正在关闭
socket 连接。
close_wait状态:表示在等待关闭。当对方关闭一个 socket 后发送 fin 报文给自己时,系统将毫无疑问地会回应 ack报文给对方,此时则进入到 close_wait 状态。
接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有,那么你也就可以关闭这个socket了,发送 fin报文给对方,即关闭连接 。close _wait 状态下,需要完成的事情是等待你去关闭连接。
last_ack状态:这个状态还是比较好理解的,它是被动关闭 方在发送 fin 报文后,最后等待对方的 ack 报文。
closed状态:当收到 ack 报文后,也即可以进入到 closed 可用状态了。
2msl 等待状态:在 fin_wait_2 发送了最后一个 ack 数据报以后,要进入 time_wait
态,这个状态是防止最后一次握手的数据报没有传送到对方那里而准备的。
由于 socket 2msl 状态,使得应用程序在 2msl 时间内无法再次使用同一个 socket ,对于客户程序还好些,但是对于服务程序(httpd),它总是要使用同一个端口来进行服务,而在 2msl 时间内,启动 httpd 就会出现错误(插口被使用)。
为了避免这个错误,服务器给出了一个平静时间的概念,这是说在 2msl的时间内,虽然可以重新启动服务器,但是这个服务器还是要平静地等待 2msl的时间才能进行下一次连接。
fin wait_2 状态:这就是著名的半关闭状态了,这是在关闭连接时,客户端和服务器两次握手之后的状态 。
在这个状态下,应用程序还有接收数据的能力。已经无法发送数据,但是也有一种可能是,客户端处于fin_wait_2 状态,而服务器则一直处于wait_close 状态,直到应用层来决定关闭这个状态。
rst 同时打开和同时关闭:rst 是另一种关闭连接的方式,应用程序应该可以判断rst 包的真实性,即是否为异常中止而同时打开和同时关闭则是两种特殊的 tcp 状态,发生的概率很小。

欧司朗推可转换LED指示灯产品打破LED产品都缺乏单一的标准
德州仪器推出四通道电源管理监控器系列
全球手机出货量暴降6% 华为、小米亮了
马达控制驱动芯片l9110引脚图及l9110引脚定义
调相机励磁限制器与调变组保护配合探讨
TCP状态流转图详解
Virtex-5FPGA设计Gbps无线通信技术设计计算
苹果M1芯片组较高通竞品大幅领先,运行Windows on ARM的速度快于微软
DS3231高精度I2C实时时钟(RTC)
三价铬在PCB电镀存在什么问题
炎热的夏天到了,我们该如何预防办公室火灾
更专业的过等保服务,华为云等保合规解决方案值得选择!
两个方面讲解电子连接器知识
宝马FIZ Nord研发中心正式运营,成为宝马集团全球研发网络的新核心
可通过VR远程操控的可穿戴四肢机械臂
华为的海思芯片的10年发展历史你了解吗
比盐粒还小,IBM 研发出世界最小电脑
反病毒软件工作原理
全新Alienware m15轻薄笔记本真正做到了颠覆人类对极限的认知
如何最好地实施精确时间和同步