zoukankan      html  css  js  c++  java
  • 【TCP】往返时间的估计与超时

    往返时间的估计与超时

      TCP采用超时/重传机制来处理报文段的丢失问题。尽管这在概念上面很简单,但是在实际中还
    是会产生很多微妙的问题。最明显还是超时时间间隔的设置。很显然,这个时间间隔肯定会大于RTT
    时间,但是具体为多大呢?如何估计最开始的往返时间呢?下面将介绍这些问题的一些解决办法。

    估计往返时间

      报文段的样本RTT(表示为SampleRTT)为某报文段发出到对该报文段的确认被收到之间的时间
    量大多数TCP的实现仅在某个时刻做一次SampleRTT测量,而不是为每个报文段测量一个SampleRTT。
      也就是说,在任何时刻,仅为一个已发送但是目前尚未被确认的报文段估计SampleRTT,从而产生
    一个接近每个RTT的新SampleRTT值。

      另外,TCP绝不为被重传的报文计算SampleRTT;它仅为传输一次的报文段测量SampleRTT。

      由于路由器的拥塞和端系统负载的变化,这些报文段的SampleRTT是波动的,所以给定的任何
    SampleRTT都是非典型的。因此要取得典型的RTT,就要对SampleRTT进行加权取值。

            EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT
    

      [RFC 6298]中给出α的参考值为0.125
      对于最近的样本赋予较大的权值,是因为越近的样本越能反应网络当前的拥塞状况。
      从统计学观点讲,这种平均被称为指数加权移动平均(EWMA)

      除估算RTT外,测量RTT变化也是很有用的!
      [RFC 6298]定义了RTT偏差 DevRTT,用于估算SampleRTT偏离EstimatedRTT的程度:

           DevRTT = (1-β)*DevRTT + β*|SampleRTT - EstimatedRTT|
    

      DevRTT是SampleRTT和EstimatedRTT之差的指数加权移动平均
      如果SampleRTT的波动小那么DevRTT的波动便会小,反之亦此。
      第一次的DevRTT=1/2(SampleRTT),以后按公式来计算,推荐β为0.25

    设置和管理重传超时间隔

      超时时间间隔应该大于EstimatedRTT并且不能大于太多。超时时间间隔为EstimatedRTT加
    上一些余量。并且在SampleRTT值波动大时,余量较大;当波动较小时,余量较小。因此就用
    到了DevRTT。由此得出TCP重传时间间隔计算公式:

          TimeoutInterval = EstimatedRTT + 4*DevRTT
    

      推荐的初始TimeoutInterval为1秒。
      出现超时后,TimeoutInterval直接加倍
      因为此次重传可能是报文确认ACK因为网络拥塞而延迟到达从而导致报文重传,重传报文
    后,不久,ACK到达,会导致SampleRTT变小,进而使TimeoutInterval变小,使后面的报文出
    现过早超时!

      一旦报文段收到并更新EstimatedRTT后,TimeoutInterval又使用上述公式。


      此文为《计算机网络 自顶向下方法》的学习笔记4

  • 相关阅读:
    ibatis(sqlmap)中使用in语句的方法
    eclipse断点调试基础
    mysql+ef 连接版本问题
    控制台添加log4net
    IndexOf() LastIndexOf() Contains() StartsWith() EndsWith()方法比较
    mysql读写分离笔记
    EF 相关问题:给定关键词不在字典中
    Windows中使用Mysql-Proxy实现Mysql读写分离
    windows下的mysql配置文件在哪
    分组 根据某一列进行排序,根据shopid分组,用createTime排序,返回row_number()序号 select no =row_number() over (partition by shopId order by createTime desc), * from Goods_info
  • 原文地址:https://www.cnblogs.com/myworld7/p/8372456.html
Copyright © 2011-2022 走看看