大历史下的 tcp:rto 和 f-rto

前面说过 tcp 协议由碎点构成,因此拧巴,这些碎点拧巴之处的控诉,今天继续安排。

tcp 最初对可靠性的设计非常简单:如果一个报文在一段合理的时间内没有得到应答,就重传它,即原始 rto 机制。

“合理的时间” 是多久?这个问题最终由范雅各布森给出了标准,即 tcp rto 的计算,原则也简单,既要过滤掉噪声,又要考虑到波动,因此 rto 的计算由平滑 rtt 和 rtt 方差共同决定。

tcp 是前向兼容的,即使日后引入 fr,sack,tlp,er 等碎点 ,tcp rto 仍作为兜底策略保持不变,在 tcp 引入这一系列碎点同时,rto 本身也在不断迭代(但我认为并无必要),以提高 tcp 传输性能,虽说这些过程及其令人眼花缭乱,但这正是 tcp 生命力强大的体现:tcp 以 afap(as fast as possible) 为原则被设计,此外再无约束。

归根结底,rack 之前的一切碎点都在 tcp 序列号空间比划,时间序直到 2010 年代中期才被考虑,背景可参见 大历史下的 pacing 之一 和 大历史下的 pacing 之二。

rfc 将这个供算法比划的序列号空间称作 scoreboard,fr,sack,tlp,er,rto,f-rto 全依赖这 scoreboard。

tcp 在时间序中发送和应答,而序列号空间却没有时间信息,这是 tcp 传输歧义的根源,tcp 无法从应答序列反推传输序列,这导致 scoreboard 上的操作及其复杂并富含把戏,误判在所难免,接下来的问题是处理误判。你看,scoreboard 上拙劣的比划引发误判问题,而处理误判又需要新的比划,tcp 终成这类比划的好把式。

捡拾一个碎点来讲,比如 f-rto。

路由重收敛,无线环境都可能导致链路 rtt 突然正常变大,在 tcp 尚未感知到 rtt 变大时,就是超时重传,显然这个重传并无必要,但最大的误伤是 rto 后 tcp 被认为发生了拥塞,它会从非常低的起点重新开始探测网络容量。有三种方案可检测到不必要的超时重传,以避免跌入低效的起点:

  • dsack:重传 1 次,收到 2 次应答;
  • eifel 算法:应答时间戳比重传更早;
  • f-rto:传个新报文,观察应答序列。

都是小成本把戏。 其中 f-rto 能效最高。

发送一个新报文,如果回来的 sack 覆盖了 rto 时的 high 却没有更新 una,它一定为新报文触发并且实锤丢包,如果更新了 una,则可能是确认来迟了,继续发送新数据继续观察。

是不是和 tlp 有点像,tlp 也是优先发送一个新数据,观察应答携带的 ack/sack,如果应答只是迟到,发送新数据什么也不耽误,如果确实丢包,新数据的应答则带回足够的 sack 触发 fr。

你看,f-rto 和 tlp 采用相似方式在 scoreboard 上比划,重点在用新数据触发 scoreboard 更新并试图从这更新上获得新知,可谓水清能濯缨,水浑可洗脚,啥也不耽误。

当 rack 将时间序引入 scoreboard,一维变二维,参见 tcp rack 如何干掉 fack,很多碎点都可重新评估:

  • tlp 并入 rack,参见 The RACK-TLP Loss Detection Algorithm for TCP;
  • rto 并入 tlp;

大历史决定了发送必须在时间序 pacing,而 rate-based cc 配合 pacing 需要设计拥塞控制算法的新视角,它事实上更简单而不是更复杂了:

  • 测量实际 delivery rate 并估算 pacing rate

不同 rate-based cc 的区别在于如何 “估算 pacing rate”,但不管哪种 cc,都要 “测量”,因此传输不能停下来,而停不下来的传输又会导致拥塞,新 cc 和经典 aimd cc 的拥塞避免加性增 cwnd 完全一个意思,都是 capacity-searching,有注定的代价。

拥塞成因由 “太多” 变成了 “太快”,而快慢仅由 pacing rate 控制,序列号空间小心翼翼比划的保守算法将不再必要。曾经的 fr 只有一次机会,rack 后的 fr 将不再受限,换句话说,时间序不认识序列号。

由于 rate-based 收敛性在数学上不完备,tcp 仍需要非时间序算法兜底,除非设计一个全新的时间序传输协议。

再看 rto 的其它方面。

我的观点,已有多种 probe 方案触发 rack-based fr 后,原始的 rto 仅做兜底即可,大可不必继续折腾。应该尽量避免跌入 rto。

昨天同事给发了一个链接 Making TCP More Robust to Long Connectivity Disruptions (TCP-LCD),说的是如果链路断开又恢复,rto backoff 期间的 tcp 连接可能已经退避多次,无法及时探测到链路恢复而耽误了时间。于是折腾出一套基于带外 icmp 信号的 rto 修正算法。

rto backoff 现在对拥塞控制的意义已大大降低,反而影响了链路状态更新的即时性,特别在无线移动环境,无线链路有自己的重试机制,链路冲突导致的传输失败并没有想象的多,相当多传输失败是信号原因导致,比如终端位置改变,进入死角,信号被屏蔽等,这些随机因素并非 backoff 能解决。

有证据支撑这想法:tcp: make the first N SYN RTO backoffs linear。(这种线性重试早就被各公司 cdn 团队纳入魔改手段了,可它直到最近才合入 linux kernel)

linux tcp 建连都要线性 probe 了,rto probe 和建连在链路看来又有什么区别呢?

即使原始的 rto 实现,在获得有效 rtt 样本后,backoff 都要重置,而在链路失败又恢复情形下,显然是因果倒置了。

昨天跟同事聊这个话题,我说 tcp 传输僵死时,直接传一个新报文并用 una 短间隔线性 probe 反而最有效,就是简单的 f-rto/tlp 的 probe 思路,别的花活儿反而没用。骨干网带宽从来不是问题,瓶颈带宽几乎都在 lastmile 甚至公司 wifi。

如果只在边缘枝端拥塞,枝端数量多就足够散列,越散开的枝端拥塞越异步,大量重传报文被足够久的时间平摊,1s 重传 10000000 个报文如果影响到了骨干,但 1000s 重传这么多就无所谓,只要不影响运营商网络拥塞状态,问题就出在计费。比如在一条车流量足够大的高速公路,只要没有实际发生拥堵,就不应该收拥堵税。

今天的故事就讲到这里。

浙江温州皮鞋湿,下雨进水不会胖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaWeb项目-学生考勤管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JAVA技术 JavaSc…

蓝桥杯省赛刷题——题目 2656:刷题统计

刷题统计OJ链接:蓝桥杯2022年第十三届省赛真题-刷题统计 - C语言网 (dotcpp.com) 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几…

Java 从字节码层面看Java对象

目录 组成对象头实例数据对齐填充字节 实例化流程 组成 JAVA对象由三部分组成:对象头、实例数据、对齐填充字节。 对象头 对象头里面包含3部分主要内容:markword、klass、数组长度(只有数组对象才有)。 markword: m…

MS Edge浏览器坏了?网页播放视频的速度不对

前言 小白是MS Edge浏览器的重度用户。电脑上必须有的两个浏览器:Google Chrome和Microsoft Edge。 前段时间小白在使用MS Edge的时候出了问题:播放视频或者音频的时候总是被莫名其妙加速或者减速,类似于播放视频时候的0.5x或者2.0x。 当时…

关于 UnityEditorWindow

想要使用UnityEditorWindow作为调试窗口吗? 这样做可以很方便的针对游戏中的重要对象做调试。 但是有一个很不方便的地方,OnGUI 的刷新频率不高,或者说需要鼠标点击之后才会重绘,如何解决这一问题? 可以如下操作&am…

用动态内存管理实现通用栈

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步&#xff01; #include <assert.h> #include <stdio.h> #include <stdlib.h>#include "stack.h"void **array;int ma…

C++入门知识详细讲解

C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…

python distribute是什么

Python的包管理工具常见的有easy_install, setuptools, 还有pip, distribute&#xff0c;那麽这几个工具有什么关系呢&#xff0c;看一下下面这个图就明白了&#xff1a; 可以看到distribute是setuptools的替代方案&#xff0c;pip是easy_install的替代方案。 Distribute提供一…

【QT学习】2.补充:connect中的lambda表达式

一.简单实例&#xff1a; 1.实例要求 点击按钮&#xff0c;实现 >o<与#-#的转换。 2.步骤 补充&#xff1a;​​​​​​​ 1.如果我想在lambda中修改数据&#xff0c;怎么办&#xff1f; 写上mutable就行。

vue基础教程(5)——构建项目级登录页

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、创建首页二、登录页代码讲解三、对应的vue知识点&#xff1a;四、附件-各文件代码总结 前言 前面我们已经把vue自带的页面删除&#xff0c;也搭建了最简单的router路由&#xff0c;下面就可以真正开发我们自己的项目…

TemperatureTop-kTop-p

一、温度 在语言模型中使用温度&#xff08;temperature&#xff09;这个参数是为了控制文本生成过程中的随机性和可预测性。这个概念来自于统计力学中的温度概念&#xff0c;在那里它用来描述系统的熵&#xff08;或随机性&#xff09;水平。在语言模型中&#xff0c;输出概率…

Python 基础教程:面向对象

类(Class): 用来描述具有相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。 类变量&#xff1a;在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外&#xff0c;通常不作为实例变量使用。 数据成员&#xff1a;类变量或者实例变量, 用于…

【独立开发前线】Vol.29 专注于电子邮件签名,也可以依靠SEO年入70万美元

今天要给大家分享的案例是MySignature&#xff0c;一个专注于电子邮件签名的产品&#xff1b; 它的官网是&#xff1a;MySignature: Free Email Signature Generator 提到电子邮件签名&#xff0c;很多人想到的肯定是“那不是电子邮件结尾的几行图文介绍吗&#xff0c;这也能做…

nginx.conf相关

nginx.conf相关 精确匹配路径&#xff0c;用于不含正则表达式的 uri 前&#xff0c;如果匹配成功&#xff0c;不再进行后续的查找&#xff1b; ^~ 用于不含正则表达式的 uri 前&#xff0c;表示如果该符号后面的字符是最佳匹配&#xff0c;采用该规则&#xff0c;不再进行后续…

数组逆序(以字符串逆序为例)

#include <iostream> #include <cstring> using namespace std; void my_reverse(char* p) //第一种 {int len strlen(p); //获取字符串长度for (int i 0; i < len / 2; i) //无论长度是奇数还是偶数&#xff0c;该for循环都能解决{char t p[i];p[i]…

ZNC3罗德与施瓦茨ZNC3网络分析仪

181/2461/8938产品概述&#xff1a; 罗德与施瓦茨 ZNC3 网络分析仪的工作频率范围为 9 kHz 至 3 GHz&#xff0c;面向移动无线电和电子产品行业的应用。它具有双向测试装置&#xff0c;用于测量有源和无源 DUT 的所有四个 S 参数。此外&#xff0c;它还提供适合开发和生产中各…

最新2024年增强现实(AR)营销指南(完整版)

AR营销是新的最好的东西&#xff0c;就像元宇宙和VR营销一样。利用AR技术开展营销活动可以带来广泛的利润优势。更不用说&#xff0c;客户也喜欢AR营销&#xff01; 如果企业使用AR&#xff0c;71%的买家会更多地购物。40%的购物者准备在他们可以在AR定制的产品上花更多的钱。…

【Linux】详解文件系统以及周边知识

一、磁盘的基本知识 磁盘中可以被划分成一个一个的环&#xff0c;每个环都是一个磁道。每个磁道又可以被均分成一个一个的扇区&#xff0c;扇区是磁盘IO的基本单位&#xff08;想要修改扇区中的一个比特位就必须把该扇区的全部比特位都加载到内存中&#xff09;。磁盘中的盘面&…

【Linux】详解软硬链接

一、软硬链接的建立方法 1.1软链接的建立 假设在当前目录下有一个test.txt文件&#xff0c;要对其建立软链接&#xff0c;做法如下&#xff1a; ln就是link的意思&#xff0c;-s表示软链接&#xff0c;test.txt要建立软链接的文件名&#xff0c;后面跟上要建立的软链接文件名…