当前位置: 首页 > article >正文

TCP 重传演进:TCP RACK Timer 能替代 RTO 吗

本文的建议适用于想改变 TCP 行为的新协议设计,还是那句话,不要抄 TCP 做 yet another TCP。

RTO 一直是 TCP 传输过程所要尽量避免的,因为它会将状态带入 Loss 进而 Go-Back-N,这是一个昂贵的操作。But 在 Fast-Retransmit 被引入 TCP 前这显然是唯一的 Recovery 手段,请不要数典忘祖。

按照最初的 TCP 拥塞状态机,进入 Loss 状态后 loss_cwnd = 1,然而近年来在 RACK 被引入后,loss_cwnd = inflt + 1,那么这个 inflt 从何而来?

如下图所示,懂的不用看,不懂的单独讨论,不赘述:
在这里插入图片描述

这个多出来的 inflt 就是 “RACK 刚刚重传出去的那些报文”,为了能让 RTO “至少还能再传输一个报文(比如 UNA)”,所以 cwnd = inflt + 1,非常合理。

但是…

所以说 RTO 兜底还好吗?统一到 RACK 不行吗,用本地时钟替代 ACK Self 时钟 rearm timer 即可了,毕竟在 RTO 时代没能力对重传数据包单独计时,没法用本地时钟驱动单独数据包重传,只能 RTO。整个链条如下:

  • 最初的 TCP 没有 ACK 时钟驱动的重传,只能通过本地时钟驱动重传;
  • 引入 Fast-Retransmit 后可 ACK 时钟驱动重传,但由于无法区分 orig 和 retrans,只能使用一次;
  • 引入 RACK- Retransmit 后可对每次重传计时,可统一以 ACK 时钟和本地时钟处理重传;
  • So?…

RACK timer 完全可替代 RTO timer,而 RTO = SRTT + 4 * RTTVAR 可近似为 RTO = iRTT + ReoWIN(虽然 MDEV 和 Reorder 并不是一回事)。VJ 算法不合理的地方在于,SRTT 已经考虑了方差,再单独计算肯定就谨慎保守了,这也导致了 TCP 此后的行为一直谨慎保守,而 iRTT + ReoWIN 才更合理,或许应该为 ReoWIN 单独叫做 ReoWIN_and_Jitter,即 RTO = iRTT + ReoWIN_and_Jitter,一起合入 RACK,然后将经理扔向皮鞋👞。

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


http://www.kler.cn/a/510000.html

相关文章:

  • Android SystemUI——CarSystemBar视图解析(十一)
  • 【17】Word:林楚楠-供应链❗
  • dockerhub上一些镜像
  • LLM - 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM) 教程(2)
  • Adobe与MIT推出自回归实时视频生成技术CausVid。AI可以边生成视频边实时播放!
  • MarsCode青训营打卡Day1(2025年1月14日)|稀土掘金-16.最大矩形面积问题
  • 【触想智能】工业电脑一体机在数控机床设备上应用的注意事项以及工业电脑日常维护知识分享
  • 《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
  • Vue.js组件开发全解析
  • Excel中函数SIGN()的用法
  • Reactive StreamsReactor Core
  • ES elasticsearch安装(8.17)
  • spring-cloud-starter-gateway 使用中 KafkaAppender的问题
  • C# OpenCV机器视觉:特征匹配 “灵魂伴侣”
  • Vue.js组件开发-实现输入框与筛选逻辑
  • Nginx反向代理架构介绍
  • RabbitMQ-消息可靠性以及延迟消息
  • Python虚拟环境使用的全方位指南
  • 抖音ip属地不准是什么原因?可以改吗
  • Python Numba多流和共享内存CUDA优化技术学习记录
  • eBay账号安全攻略:巧妙应对风险
  • python如何设计矩阵
  • RPA编程实践:Electron简介
  • 国产化中间件东方通TongWeb环境安装部署(图文详解)
  • 【机器学习:二十五、处理倾斜数据集的完整指南】