TCP FACK 与 RACK

news2024/11/17 19:42:46

3 个 dupacks 触发 fast retransmit 是一个经典启发算法,但在引入 SACK 之后仍然计数 SACKed 数量 >= 3 触发 fast retransmit 似乎就没理由了。即使把 reordering 算进去,一个距离 una 很远的 seg 被 SACKed,也足以判定丢包了,为什么非要数到 3 呢?(我数到 3,再不说我就开枪了!)

于是 FACK(Forward Acknowledgment) 被引入:Forward Acknowledgment: Rening TCP Congestion Control

FACK 大意是,被 SACKed 的 seq 最高的 seg 前面的 seg 都丢失了。这是因为 seq 越高的 seg 越晚发送,晚发送的都被 SACKed 了,早发送的有理由被判定为丢失:
在这里插入图片描述

FACK 是一个 TCP recovery 状态下的一种试图精确计算 inflight 的策略,说 “试图” 是因为它只是努力精确但实际并不精确。

如果存在乱序,FACK 与 GBN 无异,所以一旦检测到乱序,FACK 即刻被禁用。同时,FACK 的假设 “seq 越高的 seg 越晚发送” 只能起一次作用,FACK 只能确保原始那次按照 seq 发送,因此,una 到 snd_nxt 之间被 mark lost 的 seg 只有一次 fast retransmit 机会,若不成功,只能超时,不过这不单单是 FACK 的问题,这是所有 SACK-based 启发策略共同的问题。

RACK 似乎本就是来替换 FACK 的,但 RACK 基于时间序列。

虽然 FACK 只能确保原始的那次按照 seq 顺序发送,但 RACK 却可以每次发送都登记新的 tx_time:
在这里插入图片描述

mark lost 的 seg 理论上可拥有无数次 retransmit 机会,即使滑动窗口憋死,只要 ACK 时钟不断,连接将永不超时。
RACK 这件事意义重大,这意味着不必为 recovery 状态实施不同的 cc,而可用同一 cc 控制 TCP 连接的所有拥塞状态。cc 走上了正途。

本来 TCP 的 mark lost,retransmit,滑动窗口,保序等协议相关机制就不应对 cc 可见,cc 只负责控制发送配额以及 pacing rate,一个正常的 seg 和一个重传的 seg 在 cc 看来应该没有区别。在 RACK 之前,没有足够的 inflight 支撑 cc 的依赖(比如测量,self-clock trigger 等),现在可以了。BBR 就是大力使用 RACK 的一个算法。

FACK 其实就是想做 RACK 的事,它的目标就是在 recovery 状态提供一种相对精确的测量手段以支撑 cc,只是做得不够好,但让人不解的是,为什么在 30 年的时间里 TCP 既然引入了 FACK 这种相似机制却没有引入 RACK,这并不是很难的事,相反它是显而易见的,RFC3517 才让人觉得奇怪。我所在的团队在 RACK 被引入之前就支撑了几乎完全意义的时间序 mark lost 算法,背后的动机正是 RFC3517 太反常了。

算是功成身退后,禁用 FACK 的 patch 如下:tcp: disable fack by default

FACK 一向被认为太激进,所以针对它何时起作用的判定就要非常谨慎,这也是没办法,还是信息量太少,总要损失些东西。标准 SACK 数到 3(reordering) 的方式容易引起突发或空窗这两种极端,而 FACK 虽激进却保证有足量的 seg 可重传,交给 cc 通过 deflate cwnd 去 pacing 吧,谁的就归谁。

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

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

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

相关文章

2022公考经验分享

一、写在前面 2017南京邮电毕业后,5年来一直就职事业单位。单位解决北京户口,也赶上了一两年的忙碌期,存款加上公积金大概40万。期间经历过几段感情,2020年通过相亲认识现在的老婆。2020年12月瑞泽家园签位排名7000多,…

本地spingboot配置Promethus+granfana监控

记录如何配置与启动 1.在搭建好的应用加上依赖 <!-- 实现对 Actuator 的自动化配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Micr…

超火爆的ChatGPT课,送ChatGPT账号啦~~

HOT! HOT! HOT! &#x1f525; &#x1f525; &#x1f525; 上周&#xff0c;ChatGPT全栈开发课程一经推出&#xff0c;就在程序员圈子中引起了广泛关注。这两天 都被挤爆了&#xff0c;纷纷表示对课程内容很是期待呢。 明天就要开班直播啦&#xff0c;还未报名的同学&…

npm 打包发布一个公用的组件包

1&#xff0c;首先创建一个需要发包发布的组件 2.3使用Vue插件模式 这一步是封装组件中的重点&#xff0c;用到了Vue提供的一个公开方法&#xff1a;install。这个方法会在你使用Vue.use(plugin)时被调用&#xff0c;这样使得我们的插件注册到了全局&#xff0c;在子组件的任何…

AI在网络安全中的应用:机器学习如何帮助我们更好地保护网络

章节一&#xff1a;引言 随着信息技术的飞速发展&#xff0c;网络攻击的手段也在不断地演变。传统的网络安全技术已经难以应对日益复杂的网络安全威胁。AI技术&#xff0c;特别是机器学习技术&#xff0c;为网络安全提供了一种新的解决方案。本文将介绍AI在网络安全中的应用&am…

打造高性能的视频和弹幕系统(一): 对象存储服务

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

一文综述:自然语言处理技术NLP

自然语言处理技术综述1-到2020年 写在最前面摘要NLP简介Preprocessing预处理Tokenization令牌化、标记化Stop Words 停用词Stemming and Lemmatization词干提取和词形还原&#xff08;英文单词&#xff09;Parts-of-Speech Tagging词性标记Bag of Words and N-Grams词袋模型、N…

Redis数据库的安装(Windows10)

Redis数据库的安装 前言安装启动命令简单的几条语句 前言 本节开始学习Redis数据库。 Redis数据库的优势如下&#xff1a; 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ord…

ubuntu22.04安装显卡驱动+cuda+cudnn

ubuntu22.04安装显卡驱动cudacudnn 1. 下载驱动和卸载、禁用自带驱动程序1.1 查看系统显卡型号1.2 从NVIDIA官网下载相应驱动1.3 卸载Ubuntu自带的驱动程序1.4 禁用自带的nouveau nvidia驱动1.5 更新1.6 重启电脑1.7 查看是否将自带的驱动屏蔽 2. 安装显卡驱动2.1 停止lightdm桌…

ChatGPT 如何促进智能客服行业发展

章节一&#xff1a;智能客服的背景及发展趋势 随着人工智能技术的快速发展&#xff0c;智能客服正逐渐成为企业服务中不可或缺的一环。相比于传统客服方式&#xff0c;智能客服能够快速地为客户提供满意的解决方案&#xff0c;大幅降低企业的客服成本&#xff0c;提高客户的满意…

24、LLVM编译流程

一、LLVM 1.1 LLVM概述 LLVM是构架编译器(compiler)的框架系统,以C编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本.LLVM计划启动于2000年,最初由美国…

MybatisPlus入门和分页和条件查询里面的条件和null值的处理方式和查询投影和查询条件设置和id生成相关

MybatisPlus 简化了mybatis之前的在springboot整合MyBatis时需要自己写sql语句在接口中&#xff0c;现在只需要让接口继承BaseMapper<实体类>&#xff0c;然后在测试类中接口.增删改查方法&#xff08;&#xff09;即可 不用像springboot整合mybatis一样勾选spring web…

【JavaScript 逆向】抖店滑块逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;相关链接做了脱敏处理&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 案例目标 接口&#xff1a; aHR0cHM6Ly93d3cuZG91eWluLmNvbS9hd2VtZS92MS93ZWIvdXNlci9wcm9maWxlL290aGVyLw 以上均做了脱敏处理&#…

某应用虚拟化系统远程代码执行

漏洞简介 微步在线漏洞团队通过“X漏洞奖励计划”获取到瑞友天翼应用虚拟化系统远程代码执行漏洞情报(0day)&#xff0c;攻击者可以通过该漏洞执行任意代码&#xff0c;导致系统被攻击与控制。瑞友天翼应用虚拟化系统是基于服务器计算架构的应用虚拟化平台&#xff0c;它将用户…

项目管理-团队管理

冲突和竞争 冲突&#xff1a;是指两个或两个以上的社会单元在目标上互不相容或互相排斥&#xff0c;从而产生心理上的或行为上的矛盾。冲突并不一定是有害的&#xff0c; “一团和气”的集体不一定是一个高效率的集体。对于有害的冲突要设法加以解决或减少&#xff1b;对有益的…

【远程工具】- WindTerm 下载、安装、使用、配置【Telnet/ssh/Serial】-免安装、解压即用

目录 一、WindTerm 概述 二、WindTerm 下载、安装 三、WindTerm 的使用  &#x1f449;3.1 使用SSH协议连接Linux开发主机  &#x1f449;3.2 使用Telnet协议连接开发板  &#x1f449;3.3 使用Serial(串口)协议连接开发板 一、WindTerm 概述 在远程终端工具中&#xff0c;s…

SCI论文自由投稿Vs专栏投稿,哪个更好中?

我们首先来看下以下几种期刊的发表方式&#xff1a; 正刊 正刊也就是自由投稿方式的发表方式&#xff0c;是期刊正常出版的期刊&#xff0c;比如一本SCI期刊是双月刊&#xff0c;一年出版6期&#xff0c;没有设定主题&#xff0c;包含多个研究方向的文章。每年按照半月/月/双…

Linux:《gzip》《bzip2》压缩解压

先准备4个文件 1.文件压缩 使用gzip和bzip进行压缩 gzip text1.txt 使用gzip对text1.txt压缩 gzip -9 text2.txt -9是高压缩 由于我使用的文件太小了&#xff0c;所以体现不出来 bzip2 text3.txt 使用bzip2对text3.txt压缩 bzip2 -9 text4.txt -9同样是bzip2的高压缩 2.解压文件…

Java版spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

【MySQL高级】——逻辑架构

一、服务器处理请求流程 连接层&#xff1a;客户端和服务器端建立连接&#xff0c;客户端发送 SQL 至服务器端&#xff1b;SQL 层&#xff08;服务层&#xff09;&#xff1a;对 SQL 语句进行查询处理&#xff1b;与数据库文件的存储方式无关&#xff1b;存储引擎层&#xff1a…