根据TCP的四次挥手,最后一次服务端发fin包,客户端接收到这个状态之后就从fin_wait2转化为time_wait状态,并发送ack应答包,等待2WSL的时间之后再关闭连接。
WSL是最大报文生产周期,如果第四次挥手回复的ack包丢失,那么被动关闭连接的一方会重发fin,ack包和fin包工需要2MSL
那么问题就来了,一般time_wait的时间是1—4分钟,如果这时候有大量的短连接建立,因为time_wait状态,所有虽然信息传输完了但连接还没断开,客户端所在的操作系统的socket端口和句柄被用尽,系统无法再发起新的连接!
那么这个问题怎么解决呢?
(1)将短连接变成长链接
(2)修改ipv4.ip_local_port_range,变大一点,这样处理可以多一点
(3)可以设置等待时间短一点