一,TIME_WAIT
1,来源:TCP三次握手建立连接,四次挥手断开连接,在四次挥手的过程中,发起断开请求的一方会有一段时间进入TIME_WAIT,具体时机,详见下图:

2,时长:客户端在TIME_WAIT的停留时间是固定的,被指定为2MSL,MSL是规范定义的网络报文的最大生存时间,即,如果网络中的一个报文段在MSL时间内,未被接收,就会被直接丢弃。Linux在实现中,指定MSL=30秒,因此,TIME_WAIT的时间就规定为60秒。
3,危害:客户端是发起连接的一方,通常也是主动断开连接的一方,如果客户端对TIME_WAIT处理不当,会导致其所在的服务器在高并发的情况下,TIME_WAIT状态的连接过多,将本地端口耗尽,在一段时间内,无法发起新的连接,直到TIME_WAIT被系统自动回收关闭。
4,作用:在TCP的容错设计,协议假设报文会出错,导致重传的前提下:
4.1,保证客户端正常关闭:如果服务端没有收到客户端第一次发出的ACK(n+1),会在一来一回的时间范围内(2MSL)再次发出FIN(n)的请求,客户端会重传ACK(n+1),TIME_WAIT重新计时。因此,如果在发出ACK(n+1)后的2MSL内没有收到服务端重传的FIN(n),表示服务端确认关闭成功,自己可以正式关闭。
4.2,保证服务端正常关闭:如果客户端不经过TIME_WAIT阶段,而在ACK(n+1)后直接关闭连接,如果服务端没有收到客户端的ACK,重传FIN(n),因为客户端端已经关闭,会触发服务端接收到RST分节,导致服务端认为客户端发生错误,触发自己的异常逻辑。
4.3,避免连接“化身”<