首页 > 代码库 > TCP状态变迁流程

TCP状态变迁流程

主动建立TCP链接情况:

被动建立TCP链接情况

 

主动断开链接的情况

被动断开连接的情况

在TIME_WAIT阶段需要停留2倍的MSL,MSL即Maximum Segment Lifetime,表示任何报文被丢弃前在网络内的最长时间,TCP/IP详解中额外注解了:RFC793指出MSL为2min,然而实现中常用的值是30s,1min或2min。如此处理的原因是:当TCP之行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2被的MSL,这样可让TCP再次发送最后的ACK,以防这个ACK丢失(另一端超时并重发最后的FIN)。

 

这种2被的MSL等待的另外一个结果是:在TIME_WAIT期间,连接所使用的socket(SIP:SPORT:DIP:DPORT)不能再被使用,只能在2MSL之后才能被使用。但对于本地的IP:DPORT,可以设置socket的SO_REUSEADR选项绕过这个限制,这也是现在服务端之行监听的socket通常会设置SO_REUSEADDR选项的原因。

处于TIME_WAIT阶段时,该链接上任何迟到的报文都将被丢弃。