什么是 TCP 连接中的“TIME_WAIT”连接,它的目的是什么?

网络工程 tcp 互联网 传输协议 奥西
2022-02-24 16:55:49

我正在请求在本地服务器端口 8080 上运行的网页,并希望在服务器(端口 8080)和客户端(随机端口)之间建立一个连接。但是另外一个端口也被创建并以TIME_WAITas 状态连接到服务器。所以只是想知道这个时间等待连接是关于什么的?

在连接到网络服务器之前

netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      104965/java 

连接到立即返回结果的网页后。

netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      104965/java         
tcp6       0      0 ::1:8080                ::1:53950               ESTABLISHED 104965/java         
tcp6       0      0 ::1:53948               ::1:8080                TIME_WAIT   -                   
tcp6       0      0 ::1:53950               ::1:8080                ESTABLISHED 20656/_Postman --no 

端口53950是与服务器通信的客户端随机端口,这是可以理解的。

但是53948带有状态的端口的功能是什么TIME_WAIT

大约一分钟后,53948与服务器的端口连接关闭。但是端口54950 会变为TIME_WAIT状态。

netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      104965/java         
tcp6       0      0 ::1:8080                ::1:53950               TIME_WAIT   -

大约几分钟后 - 一个新端口 (54008) 已打开并处于TIME_WAIT状态。

netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      104965/java         
tcp6       0      0 ::1:54008               ::1:8080                TIME_WAIT   - 

大约 5 分钟后 - 所有端口都关闭

 netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      104965/java  

有人可以解释一下TIME_WAIT是什么以及为什么需要 2 个额外的端口。

1个回答
TIME-WAIT - represents waiting for enough time to pass to be sure
the remote TCP received the acknowledgment of its connection
termination request.

[RFC 792,第 22 页]

目的是等待足够长的时间,以便在可能重用端口之前处理任何未完成的流量。