当前位置:网站首页>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 亿中国男人走得累不累?奥康在乎。
浙江温州皮鞋湿,下雨进水不会胖。
边栏推荐
- 不怕百战失利,就怕灰心丧气
- Analysis of kinsing dual platform mining family virus
- Six causes of PCB disconnection 2021-10-20
- 洛谷P3313 [SDOI2014]旅行(树链+边权转点权)
- 牛客:飞行路线(分层图+最短路)
- 57. insert interval
- 电子学:第012课——实验 13:烧烤 LED
- Force buckle 272 Closest binary search tree value II recursion
- 电子学:第011课——实验 10:晶体管开关
- Pcb|about FPC reinforcement type
猜你喜欢

年后求职找B端产品经理?差点把自己坑惨了......

Electronics: Lesson 012 - Experiment 11: light and sound

Vscode is good, but I won't use it again

Application of can optical transceiver of ring network redundant can/ optical fiber converter in fire alarm system

C disk drives, folders and file operations

Import data into Matlab

Drawing of clock dial

Basic use of ActiveMQ in Message Oriented Middleware

allgero报错:Program has encountered a problem and must exit. The design will be saved as a .SAV file

Six causes of PCB disconnection 2021-10-20
随机推荐
MySQL simple permission management
将数据导入到MATLAB
电子学:第011课——实验 10:晶体管开关
Six causes of PCB disconnection 2021-10-20
Can transparent cloud gateway caniot and candtu record can messages and send and receive can data remotely
1742. maximum number of small balls in the box
【莫比乌斯反演】
Import data into Matlab
What are the problems with traditional IO? Why is zero copy introduced?
基于Anaconda的模块安装与注意事项
將數據導入到MATLAB
洛谷P2839 [国家集训队]middle(二分 + 主席树 + 区间合并)
使用报文和波形记录分析仪RoyalScope的帧统计功能排查CAN总线偶发性故障
产品经理专业知识50篇(四)-从问题到能力提升:AMDGF模型工具
Atlas conference vulnerability analysis collection
Pychart's wonderful setting: copy immediately after canceling the comment and bring #
Force deduction 76 questions, minimum covering string
线程+线程问题记录
洛谷P2048 [NOI2010] 超级钢琴(RMQ+优先队列)
Functions should not specify operation types through variables