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

TCP/IP RTT算法比较的更多相关文章

  1. tcp|ip nagle算法

    在TCP传输数据流中,存在两种类型的TCP报文段,一种包含成块数据(通常是满长度的,携带一个报文段最多容纳的字节数),另一种则包含交互数据(通常只有携带几个字节数据). 对于成块数据的报文段,TCP采 ...

  2. Python Web学习笔记之图解TCP/IP协议和浅析算法

    本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1主要包括三部分:建立连接.传 ...

  3. TCP/IP详解 (转)

    TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中 ...

  4. TCP IP详解(转)

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...

  5. 《TCP/IP详解卷1:协议》第19章 TCP的交互数据流-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. TCP/IP Four Layer Protocol Format Learning

    相关学习资料 tcp-ip详解卷1:协议.pdf 目录 . 引言 . 应用层 . 传输层 . 网络层 0. 引言 协议中的网络字节序问题 在学习协议格式之前,有一点必须明白,否则我们在观察抓包数据的时 ...

  7. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  8. 计算机网络及TCP/IP知识点(全面,慢慢看)

    TCP/IP网络知识点总结 一.总述 1.定义:计算机网络是一些互相连接的.自治的计算机的集合.因特网是网络的网络. 2.分类: 根据作用范围分类: 广域网 WAN (Wide Area Networ ...

  9. TCP/IP详解之:TCP

    第17章 TCP:传输控制协议 TCP提供了一种可靠的面向连接的字节流运输层服务 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务. TCP通过下 ...

  10. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

随机推荐

  1. 棋盘覆盖(java实现)

    棋盘覆盖 问题描述 在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘.在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘 ...

  2. Android开发之线程间通信

    Android开发之线程间通信 当我们的软件启动的时候,计算机会分配进程给到我们运行的程序,在进程中包含多个线程用于提高软件运行速度. 在android网络请求中,我们知道在日常开发中不能在子线程中跟 ...

  3. Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操作

    我所在的城市昨天出了近20+的阳性案例,但这丝毫没有 "影响" 到996的工作时间,当然,也没有影响到我想继续更新文章的决心. 一.cookie常用操作入门 上一篇有写过关于coo ...

  4. 规则引擎Drools在贷后催收业务中的应用

    作者:vivo 互联网服务器团队- Feng Xiang 在日常业务开发工作中我们经常会遇到一些根据业务规则做决策的场景.为了让开发人员从大量的规则代码的开发维护中释放出来,把规则的维护和生成交由业务 ...

  5. 整理 js 日期对象的详细功能,使用 js 日期对象获取具体日期、昨天、今天、明天、每月天数、时间戳等,以及常用的日期时间处理方法

    在 javascript 中内置了一个 Date 对象,可用于实现一些日期和时间的操作. 本文整理 js 日期对象的详细功能,使用 js 日期对象获取具体日期.昨天.今天.明天.每月天数.时间戳等,以 ...

  6. day36-ThreadLocal

    ThreadLocal 线程数据共享和安全 1.什么是ThreadLocal? ThreadLocal的作用,可以实现在同一个线程数据共享,从而解决多线程数据安全问题 当http请求发送到Tomcat ...

  7. python基础re模块与正则

    正则表达式前戏 正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块,正则表达式以r引导 案例:手机号校验 基本要求:手机号必须是1 ...

  8. SQLMap入门——获取当前网站数据库的用户名称

    列出当前网站使用的数据库用户 python sqlmap.py -u http://localhost/sqli-labs-master/Less-1/?id=1 --current-user

  9. js实现n秒内只能点击一次操作

    <button @click="submit">5秒内只能点一次</button>

  10. uniapp 微信小程序自己封装头部标题栏

    一.首先要关闭原生导航栏 :在pages.json 中设置  "navigationStyle":"custom" 二.在APP.vue中 onLaunch: ...