知乎上关于tcp的time_wait的解释
题主的问题如下
1. 理解认为accep() 返回的socket_new, 其源端口和目的端口与 listen() 的socket 是一置的,accept() 返回并未占用服务器新的端口。
2. 如果服务器端主动关闭 socket_new, 产生的TIME_WAIT状态为什么会在服务器端占用除监听端口以外的其余端口,还是其实并没有占用?
3. 如果没有占用的话,为什么高并发的短连接生成的TIME_WAIT会导致服务器端口不够用?
赞同数最多的答主如下回答:
为什么高并发的短连接生成的TIME_WAIT会导致服务器端口不够用?
只有主动关闭的一方才会进入TIME_WAIT状态,那这种情况也就是高并发连接都是服务端主动关闭。那么端口不够用就是文件描述符不够用了,因为文件描述符只有在从TIME_WAIT状态转换到CLOSE状态后才会真正被系统收回。
TIME_WAIT状态会持续2MSL的时间才会转换到CLOSE状态,一般是1-4分钟。如果在这段时间内文件描述符都被用完了,而关闭的连接处于TIME_WAIT状态导致文件描述符并没有被真正释放,就会出现这种情况。
作者:origin
链接:https://www.zhihu.com/question/29354418/answer/44102323
来源:知乎
著作权归作者所有,转载请联系作者获得授权。