TCP重传机制Timeout特点:

  • 设长了,重发就慢,效率和性能差;
  • 设短了,重发就快,可能导致没有丢就重发,增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。

TCP协议引入2个概念:

  RTT——Round Trip Time(一个数据包从发出去到回来的时间)

  RTO---Retransmission TimeOut(重传超时时间)

1 经典算法

RFC793 经典算法:

  • 采样RTT,记下最近好几次的RTT值。
  • 做平滑计算SRTT(α 取值在0.8 到 0.9之间,α -加权移动平均),公式为:
    SRTT = ( α * SRTT ) + ((1- α) * RTT)
  • 计算RTO(β 值一般在1.3到2.0之间)。公式为:
    RTO = min [ UBOUND, max [ LBOUND, (β * SRTT) ] ]

说明:

  • UBOUND是最大的timeout时间,上限值
  • LBOUND是最小的timeout时间,下限值

优点:

  • 算法简单
  • RTT连续采样(包括正常和重传),采样简单

缺点:

  • RTT采样方案,不能反应真实网络,即正常和重传区分不开
  • 参数α是为了平滑SRTT。小的α值可以感受到 RTT 的微小变化,但可能会容易受到暂时波动的影响。大的α值更稳定,但可能不够快,无法适应真正的变化。

2 Karn / Partridge 算法

经典算法问题:

  • 情况(a)是ack没回来,计算第一次发送和重传ACK的时间,算大了。
  • 情况(b)是ack回来慢,计算重传时间和第一次ACK的时间,算小了。

Karn/Partridge算法:

  • 不采样重传RTT,即仅采样正常传输TCP。
  • TCP重传,RTO设置为当前RTO的2倍。公式为:
    RTO=2 * RTO_cur

优点:

  • 解决经典RTT采样问题

缺点:

  • 参数α是为了平滑SRTT。小的α值可以感受到 RTT 的微小变化,但可能会容易受到暂时波动的影响。大的α值更稳定,但可能不够快,无法适应真正的变化。
  • TCP重传退避算法固定。网络较差情况,RTO持续翻倍,重发就慢,效率和性能差,不能反应网络真实情况

3 Jacobson / Karels 算法

Jacobson/Karels算法:(其中的DevRTT是Deviation RTT)

  • SRTT = SRTT + α (RTT – SRTT) :计算平滑RTT;
  • DevRTT = (1-β)*DevRTT + β*(|RTT-SRTT|) :计算平滑RTT和真实的差距(加权移动平均);
  • RTO= μ * SRTT + ∂ *DevRTT : 加权平均公式。

说明:

  • 在Linux下,α=0.125,β=0.25,μ =1,∂=4

优点:

  • 解决RTT不被感知问题,考虑RTT方差。方差较小,RTO接近SRTT;方差较大,导致DevRTT主导计算

最新文章

  1. 设置nginx禁止IP直接访问,只能通过指定的域名访问
  2. GStreamer 记录
  3. 【转载】实用的Javascript获取网页屏幕可见区域高度
  4. GCC编译C代码
  5. KK录像机破解补丁
  6. Python 中对文件的输入输出
  7. MySQL CURDATE() 函数
  8. Apriori算法实例----Weka,R, Using Weka in my javacode
  9. laravel5验证码
  10. springboot的restController使用swagger遇到的问题。
  11. QFN和QFP的区别
  12. CSS3 border-radius 圆角
  13. 阿里云 Windows 2012 如果安装IIS
  14. web前端(7)—— 了解CSS样式,引入css样式的方式
  15. Java 接口 Cloneable
  16. 51nod 1101 换零钱 (完全背包)
  17. MariaDB:删除数据库报错:error: 'Error dropping database (can't rmdir './shiro', errno: 39)'
  18. 分割(partition,stable_partition)
  19. BZOJ 1874 取石子游戏 - SG函数
  20. WordPress基础:在浏览站点时顶部显示工具栏显示隐藏

热门文章

  1. maven-入门到入土
  2. Python基础之函数:5、内置函数、迭代器对象、异常的捕获和处理
  3. Golang 实现时间戳和时间的转化
  4. LAL v0.32.0发布,更好的支持纯视频流
  5. jmeter分布式压测对master、slave防火墙配置
  6. Go语言核心36讲34
  7. 基于python的数学建模---蒙特卡洛算法
  8. Git基操记录
  9. 解决win7连接蓝牙耳机播放设备找不到的问题
  10. day12 多线程1.进程与线程 & 2.线程生命周期 & 3.线程同步机制