????超时重传时间的选择是TCP最复杂的问题之一,超时重传时间RTO在很大程度上影响了TCP的传输效率。 ????如上图所示的通信过程,A首先向B发送数据报文段0,并接收来自B的确认报文段,这中间的时间称为往返时间RTT,因此我们选择的超时重传时间RTO应当略大于往返时间RTT,如果太小了就会导致A在收到确认报文之前就进行了重传。 ????但网络是很复杂的,基于一次样本的测量是无法确定RTO的,就比如A给B发送的数据报文段1,它的往返时间很可能因为网络质量的波动,而导致往返时间大于超时重传时间。 ????因此,我们需要选择新的、更加合理的RTO计算方案。如上图所示的计算公式,考虑到了新的RTT样本给RTO带来的影响,进行了加权处理。 ????在根据RTT计算出RTO后,当又获得了新的RTT样本,那么就要综合两个RTT时间,给新老RTT赋予不同的权值,新的RTTs=(1-α)x 旧RTTs + α x 新的RTT样本值,而新的RTO由RTTs和RTTD两部分组成,RTTD的计算公式也如图上所示。 ????在对RTT样本进行采集时,也可能会出现一定的问题。如上图所示,如果A发送的报文段丢失了,在到达重传时间后进行该报文的重传,并收到了针对重传报文的确认,而如果把这个确认当做是对丢失报文的确认,就会使RTT样本过大;而如上图右侧所示,如果将对报文的确认误以为是对重传报文的确认,就会导致RTT样本过小。 ????为了解决这个问题,提出了一个方案,即报文段每重传一次,就将超时重传时间RTO增大,一般做法是取为原来的两倍。 ????如上图所示的通信过程,根据采集到的往返时间RTT和RTO的计算公式,我们可以很方便地求得具体的RTO数值。 ????而如果出现了超时重传的情况,就直接将新的RTO取为原来的两倍即可。
|