计算机网络(5.9)运输层- 超时重传时间的选择

重传机制是TCP中最重要和最复杂的问题之一。TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认, 就要重传这一报文段。 重传时间的选择是TCP最复杂的问题之一。

由于TCP的下层是一个互联网环境,IP数据报所选择的路由变化很大。因而运输层的往返时间 (RTT) 的方差也很大。

TCP 超时重传时间设置 

如果把超时重传时间设置得太短,就会引起很多报文段的不必要的重传,使网络负荷增大。但若把超时重传时间设置得过长,则又使网络的空闲时间增大,降低了传输效率。

TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。

加权平均往返时间

TCP保留了RTT 的一个加权平均往返时间RTTS(这又称为 平滑的往返时间)。第一次测量到RTT 样本时,RTTS值就取为所测量到的RTT样本值。以后每测量到一个新的RTT 样本,就按下式重新 计算一次RTTS:

                    

式中,0 <α<1。若α很接近于零,表示RTT值更新较慢。 若选择α接近于1,则表示RTT值更新较快。RFC 2988推荐的α值为1/8,即0.125。

超时重传时间RTO 

 RTO (Retransmission Time-Out) 应略大于上面得出的加权平均往返时间RTTS。RFC 2988建议使用下式计算RTO

              

RTTD是RTT的偏差的加权平均值。RFC 2988建议这样计算RTTD。第一次测量时,RTTD值取为测量到的RTT样本值的一半。在以后的测量中,则使用下式计算加权平均的RTTD: 

               

 β是个小于1 的系数,其推荐值是1/4,即0.25。

TCP报文段1没有收到确认。重传(即报文段 2) 后,收到了确认报文段ACK。如何判定此确认报文段是对原来的报文段1的确认, 还是对重传的报文段2的确认?

Karn 算法 

在计算平均往返时间RTT时,只要报文段重传了, 就不采用其往返时间样本。

这样得出的加权平均平均往返时间 RTTS和超时重传时间RTO就较准确。 但是,这又引起新的问题。当报文段的时延突然增 大了很多时,在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据 Karn算 法,不考虑重传的报文段的往返时间样本。这样, 超时重传时间就无法更新。

报文段每重传一次,就把 RTO增大一些:

             

系数γ的典型值是2 。 当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延RTT和超时重传时间RTO 的数值。

猜你喜欢

转载自blog.csdn.net/qq_40452317/article/details/90105513
今日推荐