一、中间状态time_wait,close_wait过多的危害?
(1)close_wait过多:建立连接会占用文件描述符;而在liunx系统中,一个进程最大可以同时打开的文件描述符是有限的,当达到上限时,服务端进程无法再创建socket来响应新的请求,导致服务不可用。
(2)time_wait过多:导致定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用,导致端口号不足,服务器无法响应。
二、如何解决?
(1)time_wait:
客户端设置keep-alive,主动释放请求;
服务端开启socket重用;
扩大端口号;
缩短time_wait时间,设置为1MSL
(2)close_wait: 主要是被动释放的一方没有主动调用closecket,可以在代码上解决。
三、为什么要等待2MSL?
(1)保证连接可靠的释放
(2)使旧的数据包在网络中过期消失,防止下一次使用同一四元组收到上一次的数据