• 聊一聊tcp 拥塞控制 六 RACk


    一、RACK概述 

      RACK(Recent ACKnowledgment)是一种新的基于时间的丢包探测算法,RACK的目的是取代传统的基于dupthresh门限的各种快速重传及其变种。前面介绍的各种基于dup ACK的快速重传算法及其变种通过修改dupthresh门限等手段,有些可以迅速的探测到丢包,有些可以精确的探测丢包,但是没有能同时达到迅速和精确两个目标的算法。但是尾部丢包的问题怎么解决???

      目前RACK相比FACK/SACK  主要用于解决尾部丢包和二次重传的问题,但是它应该可以FACK,dupACK并驾齐驱,理解起来也比较直观。

      RACK基本思想:如果发送端收到的确认包中的SACK选项确认收到了一个数据包,那么在这个数据包之前发送的数据包要么是在传输过程中发生了乱序,要么是发生了丢包。RACK使用最近投递成功的数据包的发送时刻来推测在这个数据包之前传输的数据包是否已经过期(expired),RACK把这些过期的数据包标记为lost。RACK可以修复丢包而不用等一个比较长的RTO超时,RACK可以用于快速恢复也可以用于超时恢复(快速恢复和超时恢复我们会在拥塞控制阶段详细讲解),既可以利用初传的数据包探测丢包也可以利用重传的数据包探测丢包,而且可以探测初传丢包也可以探测重传丢包,因此RACK是一个适应多种场景的丢包恢复机制。

    在现今的网络环境中乱序传输是一个比较常见的场景,使用dupthresh和dup ACK来做丢包探测的可靠性越来越低。同时因为传统的基于系列号空间的乱序度来探测丢包时,如果发生报文重传,初传报文和重传报文在系列号空间就会重叠。而RACK基于时间的乱序来探测丢包的时候,重传报文和初传报文在时间线上是不重叠的,因此RACK可以同时利用初传报文和重传报文来探测丢包。

      RACK使用的需要三个条件:

    • 1、TCP连接必须使用SACK选项
    • 2、对于每个发送的数据包,发送端必须存储这个数据包的发送时间,时间精度至少要达到毫秒精度。如果连接的RTT小于1ms,那么微秒精度将会更有利于RACK探测丢包。
    • 3、对于每个发送出去的数据包,发送端必须存储这个数据包是否已经重传过。

    https://redwingz.blog.csdn.net/article/details/106062180

  • 相关阅读:
    (整理)REHL6.5_Yum安装Reids
    (整理)REHL6.5_安装本地yum
    (转)MSSQLSERVER执行计划详解
    (转)SQLServer_十步优化SQL Server中的数据访问四
    (转)SQLServer_十步优化SQL Server中的数据访问五
    (转)SQLServer_十步优化SQL Server中的数据访问 三
    (转)SQLServer_十步优化SQL Server中的数据访问 二
    (转)SQLServer_十步优化SQL Server中的数据访问一
    (转)EF5+SQLserver2012迁移到EF6+mysql5.5.47
    (整理)MySQL_REHL6.5 MySQL5.5 中文支持问题
  • 原文地址:https://www.cnblogs.com/codestack/p/15578784.html
Copyright © 2020-2023  润新知