MSL(max segment lifetime) TCP进程结束 端口是否再分配

来源:互联网 发布:淘宝买家等级怎么看 编辑:程序博客网 时间:2024/06/05 09:12
TCP的MSL(max segment lifetime)
参考:http://blog.csdn.net/lile269/article/details/6406878


TCP链接中有一个MSL的概念,也就是最大生成时间,MSL的值在一般的实现中取30s,有些实现采用2分钟,在TCP的状态机中的“被动关闭”:从CLOSE_WAIT到LAST_ACK中有一个如下的规则:当T C P执行一个主动关闭,并发回最后一个A CK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)。

存在这个规则导致一个后果就是在这个2MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。

 利用TAO跳过三次握手

为了理解何以能跳过三次握手,我们需要先了解三次握手的目的。RFC793中对此只是做了一个简单的说明:“引入三次握手的主要原因是为了避免过时的重复连接在再次建连时造成的混乱。

       因此,T/TCP协议必须提供一种方法,使收到SYN报文段的一方能够不经过三次握手就保证这个SYN不是过时的重复报文段,从而使得随该SYN报文段一起传送过来的数据能立刻交付给上层的用户进程。这里的保护手段是客户发出的SYN报文段中附带的CC选项和服务器缓存的最近一次从该客户收到的合法CC值。

采用的方法就是RFC1644中所述的TAO测试:“如果某个特定客户主机的第一个SYN报文段(即只含SYN位而不含ACK位的报文段)中所携带的CC值大于缓存中的该客户CC值,CC值的单调递增特性可以确保这是一个新的SYN报文段,可以立即接收下来”。正是CC值的单调递增特性以及下面的两个假设确保了SYN报文段是新的,使得T/TCP协议能够跳过三次握手:

1)      所有的报文段都只有有限的MSL秒的生存期;

2)      tcp_ccgen计数器在2MSL的时间内的递增量不超过232次方减一。


原创粉丝点击