tcp 状态转移图
TIME_WAIT是TCP协议用以保证被重新分配的socket不会受到之前残留的延迟重发报文影响的机制,是必要的逻辑保证。
TCP为每条连接建立7个定时器,分别为:
1、连接建立定时器(S)
用户服务端接收到客户端的SYN连接请求,发送SYN+ACK段后,等待客户端的第三次握手ACK报文,试图建立一个新的连接时启动,超时几次后,连接建立将中止。
2、重传定时器
在TCP发送数据时设定,如果定时器超时而对端确认还未到达,则TCP将重传数据,其超时时间取决于为该连接测量的往返时间以及该段已被重传的次数。
3、延时ACK定时器(稍待确认)
在TCP收到必须被确认但无须马上发出确认的段时设定,TCP在200ms后发送确认报文,若在200ms内,有数据在该连接上需要发送,延时ACK报文就可以随数据报文一起发送到对端。
4、持续定时器
用户在有数据需要发送时,且对端通知的接收窗口为0时开启。若持续定时器超时,则向对端发送1字节的数据进行探测。
5、保活定时器(S)
保活定时器在应用进程选取了套接口SO_KEEPALIVE选项时生效,如果连接的空闲时间超过两小时,则保活定时器超时,向对端发送连接探测段,强迫对端响应。
6、FIN_WAIT_2定时器(S)
当某个连接处于FIN_WAIT_2状态时且不能再接收任何新数据时,FIN_WAIT_2定时器开启,超时时间为10min,定时器第一次超时后,将超时时间调整为75s,第二次超时后关闭连接。加入这个定时器的目的是为了避免对端一直不发FIN,而使得某个连接用于滞留在FIN_WAIT_2上。
7、TIME_WAIT定时器
又称为2MSL定时器,2MSL指两倍的MSL(最大段生存时间)。当连接转化到TIME_WAIT状态,即连接主动关闭时,TIME_WAIT定时器启动,超时时间设定为1min,超时后,TCP控制块被删除,端口号可重新使用。