2007年11月21日星期三

Several timers in TCP

对于每个连接,TCP管理4个不同的定时器:
  1. 超时定时器使用于当希望收到另一端的确认
  2. 坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
  3. 保活定时器可检测到一个空闲连接的另一端何时崩溃或重启
  4. 2MSL定时器测量一个连接处于TIME_WAIT状态的时间

超时定时器


超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。

超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难。要求精确的原因有两个:(1)定时长久会造成网络利用率不高。(2)定时太短会造成多次重传,使得网络阻塞。

有了超时就要有重传,但是就算是重传也是有策略的,而不是将数据简单的发送。

关于相关算法和策略的具体内容在TCPv121中有详细叙述。(慢启动,拥塞避免算法,快速重传与快速恢复算法)


坚持定时器

坚持定时器用于防止通告窗口为0以后双方互相等待死锁的情况。

坚持定时器的原理是简单的,当TCP服务器收到了客户端的0滑动窗口报文的时候,就启动一个定时器来计时,并在定时器溢出的时候向向客户端查询窗口是否已 经增大,如果得到非零的窗口就重新开始发送数据,如果得到0窗口就再开一个新的定时器准备下一次查询。通过观察可以得知,TCP的坚持定时器使用1,2, 4,8,16……64秒这样的普通指数退避序列来作为每一次的溢出时间。

有关此定时器的内容在TCPv122中有详细叙述。(糊涂窗口综合症)


保活定时器

保活定时器更加的简单,还记得FTP或者Http服务器都有Sesstion Time机制么?因为TCP是面向连接的,所以就会出现只连接不传送数据的“半开放连接”,服务器当然要检测到这种连接并且在某些情况下释放这种连接,这 就是保活定时器的作用。另外要提到的是,当其中一端如果崩溃并重新启动的情况下,如果收到该端“前生”的保活探察,则 要发送一个RST数据报文帮助另一端结束连接。

有关此定时器的内容在TCPv1的23有详细叙述。


2MSL定时器

TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifttime)。它是任何报文段被丢弃前在网络内的最长时间。

对于一个具体实现所给定的MSL值,处理的原则是:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防这个ACK丢失(另一端超时并重发最后的FIN)

这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用。这个连接只能在2MSL结束之后才能再被使用。

没有评论:

World Clocks

Endless Space Headline Animator

Mobile Ads