首页 > 编程语言 >TCP/IP RTT算法比较

TCP/IP RTT算法比较

时间:2023-01-31 23:44:07浏览次数:54  
标签:重传 IP RTO TCP SRTT RTT 算法

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主导计算

 

标签:重传,IP,RTO,TCP,SRTT,RTT,算法
From: https://www.cnblogs.com/startimenanhai/p/17081201.html

相关文章

  • JavaScript学习笔记—DOM:事件
    事件(event)事件就是用户和页面之间发生的交互行为比如:点击按钮,鼠标移动,双击按钮,敲击键盘,松开按键...可以通过为事件绑定响应函数(回调函数),来完成和用户之间的交互绑定响......
  • ERROR: Couldn't determine iptables version
     001、ubuntu中安装ssh服务时遇到如下报错:ERROR:Couldn'tdetermineiptablesversion  002、解决方法root@DESKTOP-A31BQ38:~#update-alternatives--listip......
  • JavaScript之void
    void是什么void是JavaScript重要的关键字,该操作符指定要计算一个表达式但不返回。语法格式:voidfunc()javascript:voidfunc()或void(func())javascript:void(func......
  • 家庭宽带IPV6使用方式,终端SLAAC,DHCPV6自动配置
    使用运营商分配的ipv6地址分几种情况1运营商只给一段ipv6(一般不会)2运营商分配一段供互联使用ipv6,另外给一段PD前缀对于第一种方式没有更好的办法,地址分配......
  • [Typescript] Function Overloads vs. Union Types
    Uniontype:functionrunGenerator(generator:{run:()=>string}|(()=>string)){if(typeofgenerator==='function'){returngenerator();}r......
  • 使用Eclipse的JUnit实例
    在本节中,我们将展示使用JUnit的一个完整的例子。我们将详细了解如何创建和运行测试,我们将展示如何使用特定的注释和JUnit断言。 1.初始步骤 让我们创建一个名为 JUnitG......
  • P1020 [NOIP1999 普及组] 导弹拦截
    [NOIP1999普及组]导弹拦截题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以......
  • Eclipse JUnit简单示例
    在本节中,我们将看到一个简单的JUnit例子。先创建一个工程,名称为:CalculateTest,并在这个工程上点击右键,选择:BuildPath->AddLibrary->JUnit...,如下图所示:选择JUni......
  • 如何手动补充陈年老库(或纯 JS 代码)的 TypeScript 类型?
    目录前置知识-JavaScript的各种模块化情况前置知识2-让你写的d.ts在工程中生效1.全局模块的定义2.ES模块的定义2.1.默认导出2.2.导出类2.3.注意事项3.Common......
  • pip安装psycopg2报错Could not find a version that satisfies the requirement psyco
    pip安装psycopg2报错在使用命令(pipinstallpsycopg2)安装psycopg2时,会报错:ERROR:Couldnotfindaversionthatsatisfiestherequirementpsycopg2(fromversions:......