TCP连接过程中涉及到的状态转换

TCP连接过程中涉及到的状态转换

TCP 服务器和客户端都要有一定的数据结构来保存这个连接的信息。

在这个数据结构中其中就有一个属性叫做 "状态"

操作系统内核根据状态的不同,决定了当前应该干什么。(不会迷茫也不会混乱)

LISTEN

LISTEN状态,表示服务器这边,创建好 serverSocket 了,并且绑定端口号完成。

ESTABLISHED

ESTABLISHED已确立的。客户端和服务器连接已经建立完毕 (三次握手握完了)

谁被断开连接,谁进入 CLOSE_WAIT

CLOSE_WAIT

CLOSE_WAIT就表示,接下来代码中需要调用 close 来主动发起 fin,收到对方的 fin 之后进入这个状态的。

谁主动断开连接,谁进入 TIME_WAIT

TIME_WAIT

TIME_WAIT就是表示本端给对方发起 FIN 之后,对端也给我发 FIN,此时本端进入 TIME_WAIT,给最后一个 ACK 的重传留有一定的时间。

TIME_WAIT 存在的意义,主要是防止最后一个 ACK 丢包

在四次挥手的过程中,会涉及到确认应答和超时重传。

如果没有收到 ACK 就视为丢包。

服务器如果没有收到最后一个 ACK,就会重传 FIN。

客户端如果在这个环节把 TCP 连接释放掉,此时意味着重传的 FIN 就无法被返回 ACK 了。

(保存对端信息的数据结构存在,才能给这个连接提供各种操作,才能返回 ACK)

此处的 TIME_WAIT 等待也不是无休止的等待,最多等 2 MSL (MSL 是一个系统内核的配置项,表示客户端到服务器之间,消耗的最长时间。这个时间一般都是拍脑门出来的一个非常大的时间,比如常见的设置值是 1min)

客户端等一个很长很长的时间,这么长时间你都不复传,意思是就再不会复传了~~

用netstat -ano | findstr 9090 可以看到TCP状态

(前提是你写的端口为9090 的程序启动)

相关推荐
usrcnusrcn1 分钟前
智能建筑的 “隐形神经”:交换机如何连接安防、照明与门禁系统?
运维·服务器·网络
喵了meme31 分钟前
C语言实战2
c语言·开发语言·网络
独行soc42 分钟前
2025年渗透测试面试题总结-280(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
唯创知音1 小时前
WT2605A录音方案实现高保真音频采集本地存储云端同步!
网络·音视频·录音芯片·录音方案·录音上传
@CLoudbays_Martin111 小时前
什么是IP黑洞?
网络·网络协议·tcp/ip
qqssss121dfd1 小时前
计算机网络(第8版,谢希仁)第三章习题解答
网络·计算机网络·php
kaikaile19953 小时前
LDPC编解码与未编码信息的误码率比较
网络
老蒋新思维3 小时前
创客匠人 2025 万人峰会核心:AI 驱动知识产品变现革新
大数据·人工智能·网络协议·tcp/ip·创始人ip·创客匠人·知识变现
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
aspect实现请求校验,但是WebSocket 端点类不能被 AOP 代理解决方案
网络·websocket·网络协议
数字护盾(和中)4 小时前
从边界突破到物理破坏:APT 工控攻击链路与防御闭环
网络