tcp释放连接的close_wait, FIN_WAIT2, TIME_WAIT大量存在的原因

目录
  1. 存在close_wait的原因
  2. 存在FIN_WAIT2的原因
  3. 存在TIME_WAIT的原因

存在close_wait的原因

close_wait这个状态存在于服务端,当服务端发送FIN(之前客户端已经发送过fin),请求关闭连接之后进入close_wait,然而没有收到客户端的响应,可能由于客户端掉线了(如网络故障或者掉电),没有及时给予客户端回复造成问题。
或者由于客户端已经调用close(socket)退出,而服务端对其监测并断开连接,这种是服务端问题。
解决方法:一般是编程问题,可用keep_alive机制加以解决

存在FIN_WAIT2的原因

这个状态存在于主动发起断开请求的一端,如果服务器存在大量的这个状态,那么这个服务器就充当客户端的角色,如网络爬虫,出现的原因是由于客户端发起FIN请求结束连接之后,收到了服务端的应答之后进入FIN_WAIT2,之后就没收到服务端发送的FIN信号导致。
解决方法:可以配置FIN_WAIT2的时长,当超过时长后自动断开加以解决

存在TIME_WAIT的原因

TIME_WAIT状态存在有两个原因:其一是响应服务端发送的FIN报文,保证服务端断开连接;其二是保证之前请求断开连接的请求,由于网络原因滞留在网络中,后续又到达了,导致后面重新建立的连接断开。
解决方法:设置TIME_WAIT状态的等待时间规避。即设置/proc/sys/net/ipv4下的相关参数

本站总访问量