当前位置:网站首页>TCP MIN_RTO 辩证考
TCP MIN_RTO 辩证考
2022-06-25 06:44:00 【dog250】
TCP 在不断演进过程中有很多弄巧成拙的事,这些事无一例外都是 “我猜是X,但我不能确定” 导致。
拥塞控制中丢包判断不必多说, Nagle 算法和 Delayed ACK 也曾经说过。跟同事聊起 RTO 的事,这又是一例。
Linux TCP 实现中 MIN_RTO 为什么 200ms 如此大,对于 IDC 内部通信显然非常不合理,100us 级的 RTT 显然不需要 1000 倍时间来断定超时。
解决这个问题不难,提取一个配置参数,让 MIN_RTO 可配就行。这也是最自然的想法,我相信很多私有实现都这么做。但问题是为什么大名鼎鼎的 LInux 没有导出这个配置呢?
原来为了迎合 Delayed ACK,又是标准规定,Delayed ACK 有个延迟上界,比方说 200ms (具体数字不重要),RTO 必须考虑这个 Delay,否则就可能伪超时。
于是 MIN_RTO 配置成 Delayed ACK Delay 量级,比如 200ms 。
看起来顺利成章。但事情变复杂了:
- 对端真能 Delay 到 Delayed ACK 的上界吗?如果只 Delay 了 10ms 呢?
- Delayed ACK 的 Delay 时间是定值还是自适应值?
- 一组数据的末尾,没有足够 ACK 触发快速重传时,需要比 RTO 小的 TLP。
- 如果不是考虑到 Delayed ACK 导致 RTO 过大,TLP 几乎没必要引入。
…
然后 Google 出了个方案:draft-wang-tcpm-low-latency-opt-00
其实这一切根本没必要,兜了个圈。
为减少 ACK 数量,引出 Delayed ACK,为迎合 Delayed ACK 延时上界,MIN_RTO 明显偏大,为更高效探测尾丢,引出 TLP,为适应 IDC RTT 但又遵守 Delayed ACK 上界,Google 引出 TCP Low Latency Option。
根源就是 Delayed ACK,那就解决它好了。
看下面文章:
TCP Delayed ACK 辩证考
怎么解决 MIN_RTO 问题呢?
MIN_RTO 不再需要,不必再迎合 Delayed ACK,RTO 完全根据 RTT 计算。TLP 也不再需要,只需在 PSH 包设置 “必须立刻 ACK” 标志。有了上述保证,完全不必担心伪超时:
- 间隔的 “立刻 ACK” 标志总是会在超时之前触发快速重传。
- 如果真超时了,那几乎就是真丢包了。
特别的,如果是单向传输,明知对端不肯能捎带 ACK 的情况下,为何不直接告诉对端,而非要去自适应呢。事实上 Linux TCP 为连接维护了一个 pingpong 变量,就是自适应 TCP 超时的。现实情况还要更复杂。
你可每一个包都设置 “立刻 ACK” 标志,或者缓解一点,每 2 个,3 个 … 设置一次 “立刻 ACK”。甚至可以只在前几个包以及最后一个 PSH 包上设置 “立刻 ACK”。取决于拥塞控制算法。
是不是很清爽?
只要保证 RTT 量级内有一个 “立刻 ACK“ 数据包发出就能在 RTT 量级时间内策划 RTO,不必再设定 MIN_RTO,自己决定自己,而不靠猜测对方的行为。更不要猜链路的行为。
TCP 性能不佳,包括 QUIC 性能也有上限,其根本就是链路行为基本靠猜,这是端到端原则导致,只要你认同端到端自决,这问题就没法解决,链路行为信息你拿不到,只能靠预测,启发,说到底都是猜。
我这个 “建议” 很好,但对端不一定支持,所以说要协商?
协商也总比之前导出那么大一堆 “机制” 要好。所以说,能标准化就标准化,不能标准化就协商,但别猜。
谁在乎 7 亿中国男人走得累不累?奥康在乎。
浙江温州皮鞋湿,下雨进水不会胖。
边栏推荐
- Electronics: Lesson 012 - Experiment 13: barbecue LED
- Introduction to the main functions of the can & canfd comprehensive test and analysis software lkmaster of the new usbcan card can analyzer
- Basic use of ActiveMQ in Message Oriented Middleware
- 【补题】2021牛客暑期多校训练营4-n
- 环网冗余式CAN/光纤转换器的CAN光端机在消防火灾联网报警系统中的应用
- 【补题】2021牛客暑期多校训练营6-n
- FM signal, modulated signal and carrier
- 洛谷P5994 [PA2014]Kuglarz(异或思维+MST)
- MySQL简单权限管理
- 剑指offer刷题(中等等级)
猜你喜欢

C # set up FTP server and realize file uploading and downloading

Three Siemens fire-fighting hosts fc18 are equipped with can optical transceiver for optical fiber redundant ring network networking test

电子学:第010课——实验 9:时间与电容器

Take you through the normalization flow of GaN

Electronics: Lesson 010 - Experiment 9: time and capacitors

Ph中和过程建模

深度学习系列48:DeepFaker

Dietary intervention reduces cancer treatment-related symptoms and toxicity

PH neutralization process modeling

环网冗余式CAN/光纤转换器的CAN光端机在消防火灾联网报警系统中的应用
随机推荐
现在通过开户经理发的开户链接股票开户安全吗?
云计算考试版本1.0
Electronics: Lesson 012 - Experiment 13: barbecue LED
Can transparent cloud gateway caniot and candtu record can messages and send and receive can data remotely
洛谷P2486 [SDOI2011]染色(树链+线段树 + 树上区间合并 )
C # set up FTP server and realize file uploading and downloading
Introduction to the main functions of the can & canfd comprehensive test and analysis software lkmaster of the new usbcan card can analyzer
Modeling and fault simulation of aircraft bleed system
电子学:第010课——实验 8:继电振荡器
Neural network and deep learning-3-simple example of machine learning pytorch
Anaconda navigator启动慢的一个解决方法
c#磁盘驱动器及文件夹还有文件类的操作
Share the process requirements for single-layer flexible circuit board
剑指offer刷题(中等等级)
电子学:第013课——实验 14:可穿戴的脉冲发光体
协议和服务的区别?
MySQL interview - the response of executing SQL is relatively slow, and the troubleshooting ideas.
420-二叉树的层序遍历2(429. N 叉树的层序遍历、515.在每个树行中找最大值、116.填充每个节点的下一个右侧节点指针、104.二叉树的最大深度、111.二叉树的最小深度)
洛谷P6822 [PA2012]Tax(最短路+边变点)
唐老师讲运算放大器(第七讲)——运放的应用