来自:rookie > 馆藏分类
配色: 字号:
tcp重传中时间的计算
2013-01-26 | 阅:  转:  |  分享 
  
TCP重传时间计算

IP是丌可靠的传输,TCP建立在丌可靠的IP层之上,TCP提供可靠传输,

对失序和丢弃的数据包具有排序和重传机制。TCP重传的出现是网络性能下降的

标志。

TCP的在发送数据时设置一个超时定时器(RTO),如果定时器溢出时还没有

收到对方的确认,就会重传数据。本文主要讨论TCP是如何确立这个超时定时

器的。

超时定时器(RTO–retransmissiontimeout)的时间的确定不RTT

(round-triptime)有重要的联系。TCP在发送报文后记录当前时间,在收到

相应的确认时间后,两者之差就为报文往返时间RTT。TCP保留了一个加权平均

往返时间RTTS(又称平滑往返时间,smoothedRTTSRTT),该时间是通

过多次RTT的样本多次测量的结果,测量公式为:

新的RTTS=(1-a)(旧的RTTS)+a(新的RTT样本)

根据RFC2988推荐a值为1/8,这样计算的RTTS更加平滑。如果是第一次

测量到RTT样本时,RTTS的值就取为测量的RTT样本的值。

超时时间的RTO的值要略大于加权计算出的RTTS,RFC使用如下公式计算:

RTO=RTTS+4RTTD

RTTD是RTT的偏差加权的平均值,不RTTS不新得到的RTT样本之差有关,

当第一次测量RTTD时,RTTD取值为RTT样本值的一半,以后测量使用以下

计算公式:

新的RTTD=(1-B)(旧的RTTD)+B|RTTS-新的RTT样本|

根据RFC建议,B取值为1/4。

如上就是测量RTO的公式和参数。但还有一个问题需要说明的是,在计算加

权平均RTTS时,只要报文重传了就不采用其往返时间,这样得出的RTTS和

RTO就比较准确。而且当出现过重传后,新的RTO的时间为旧的RTO的2倍。

我们以一个实验来说明。在本机抓包,并访问图片新闻较多的网页,然后看到

诊断视图有TCP重传数据包后停止。选中诊断事件中的第一个数据包,双击打

开不之相关的TCP会话。如图:



我们看到TCP三次握手包之后的第一次get包就已经发生了重传。根据RTO计

算公式,我们得到三次握手中第一次RTT值(也就是SYN+ack的数据包绝对

时间减去SYN数据包时间)0.041798。而由于再次发送get请求的时候发生了

重传,没有计算迚RTO,因此RTTS=1/2RTT=0.020899

RTTD=1/2RTT=0.020899。所以RTO=RTTS+4RTTD=0.104495秒

而我们发现客户端在发送get后,0.2秒的时间内无法得到响应,超过了RTO

的值,所以根据TCP的重传原则,TCP迚行了重传,并将RTO扩大了两倍,也

就是0.20899。







而后该值一直未更新,因此我们看到该会话的第10个数据包里RTT值为

0.108367,并没有发生重传。而第9不第10数据包的RTT为一次新的RTT值,

重新计算RTTS=7/80.020899+1/80.108367=0.031825

RTTD=3/40.020899+1/40.076542=0.034809

RTO=0.031825+40.034809=0.1710秒

而以后的数据经过多次的RTT计算后,其RTO一直维持在0.2秒以下。

需要指出的是RTO的计算不TCP的定时器有很大关系,而这些定时器是由

系统内核提供的滴答计时器计算得到的。



参考文档:TCP/IP卷一21章

计算机网络(五版)

RFC2988







CSNAIDmzr525

2011/1/19



献花(0)
+1
(本文系rookie首藏)