概述
往返时间评估
超时间隔必须大于该连接的往返时间(RTT),即从一个报文段发出到它被确认的时间,否则会造成不必要的重传。报文段的样本RTT(表示为SampleRTT)就是从某报文段被发出(即交给IP)到对该报文段的确认被收到之间的时间量。大多数TCP的实现仅在某个时刻做一次SampleRTT测量,而不是为每个发送的报文段测量一个SampleRTT。也即是说,在任意时刻,仅为一个已发送的但目前尚未被确认的报文段估计SampleRTT,从而产生一个接近每个RTT的新SampleRTT值。
另外,TCP决不会为已被重传的报文段计算SampleRTT;它仅为传输一次的报文段测量SampleRTT。
由于路由器的拥塞和端系统负载的变化,这些报文段的SampleRTT值会随之波动,由于这种波动,任何给定的SampleRTT值也许都是非典型的。因此,为了估计一个典型的RTT,自然要采取某种对SampleRTT取平均的办法。TCP维持一个SampleRTT均值称为EstimatedRTT。一旦获得一个新的SampleRTT值,TCP会根据下面公式来更新EstimatedRTT
EstimatedRTT = (1-α) * EstimatedRTT + α * SampleRTT ( α推荐值是α=0.125)
公式变为
EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT
注意:EstimatedRTT是SampleRTT的一个加权平均值
RTT偏差值DevRTT
除了估算RTT外,测量RTT的变化也是有价值的,RFC 6298定义了RTT偏差值DevRTT,用于估算SampleRTT一般会偏离EstimatedRTT的程度:
DevRTT = (1-β) * DevRTT + β * |SampleRTT - EstimatedRTT| (β推荐值为0.25)
设置和管理重传超时间隔
超时间隔应大于EstimatedRTT,否则,将造成不必要的重传。但是超时间隔也不应该比EstimatedRTT大太多,否则当报文段丢失时,TCP不能很快地重传该报文段,导致数据传输延时大。因此要求超时间隔设置为EstimatedRTT加上一定余量。当SampleRTT值波动较大时,这个余量应该大些,当波动较小时,这个余量应该小些。因此,DevRTT值应该在这里发挥作用。
TimeoutInterval = EstimatedRTT + 4 * DevRTT
推荐初始TimeoutInterval为1秒,同时,当出现超时后,TimeoutInterval值将加倍,以免即将被确认的后续报文段过早出现超时。然而,只要收到报文段并更新EstimatedRTT,就是用以上公式再次计算TimeoutInterval
最后
以上就是唠叨小甜瓜为你收集整理的【计算机网络自顶向下方法】往返时间评估(EstimatedRTT和DevRTT)和超时间隔(TimeoutInterval )往返时间评估RTT偏差值DevRTT设置和管理重传超时间隔的全部内容,希望文章能够帮你解决【计算机网络自顶向下方法】往返时间评估(EstimatedRTT和DevRTT)和超时间隔(TimeoutInterval )往返时间评估RTT偏差值DevRTT设置和管理重传超时间隔所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复