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 亿中国男人走得累不累?奥康在乎。
浙江温州皮鞋湿,下雨进水不会胖。

TCP MIN_RTO 辩证考相关推荐

  1. TCP Delayed ACK 辩证考

    TCP Delayed ACK 的 WiKi 解释: ​ 看下红框里说的"某些劣化性能的场景": ​ 是不是很复杂?特别是跟 Nagle 算法,糊涂窗口综合症揉在一起,需要理解各种 ...

  2. 腾讯云TCP架构高级工程师认证考试大纲、考题下载及说明

    腾讯云TCP认证架构高级工程师是针对云解决方案架构师的高级技能认证,满分100分70分及格,题型包括30单选.15多选和20案例分析,考试范围包括上云迁移.云原生应用设计.高可用架构设计.业务流量高峰 ...

  3. TCP是如何传输数据的?

    做IT相关的工作,肯定都离不开网络,网络中最重要的协议是TCP.无论是实际工作还是笔试面试,你看哪里能少得了TCP?我考过RFC中与TCP相关的文档,也看过Linux中与TCP相关的源码,也看过不少框 ...

  4. 23考研零基础跨考南京大学软件工程专硕420分数学满分经验贴

    目录 前言 关于南大软件学院 关于我为什么跨考和备考前的信息搜集(可跳过) 数学 基础部分 强化部分 真题部分 re强化部分 模拟卷部分 政治 基础 强化 冲刺 肖四与背诵 今年的情况 英语 单词 真 ...

  5. 腾讯云TCP认证云架构高级工程师考试大纲内容整理、相关考题下载及说明

    腾讯云TCP认证架构高级工程师是针对云解决方案架构师的高级技能认证,满分100分70分及格,题型包括30单选.15多选和20案例分析,考试范围包括上云迁移.云原生应用设计.高可用架构设计.业务流量高峰 ...

  6. 2021 牛客网笔试总结 01

    文章目录 牛客网笔试 关于TCP/IP网络接口层的描述是错误的 TCP与UDP说法错误的 async await描述错误的 不属于Location对象的属性 BFC js错误类型 flex布局 fle ...

  7. 计算机网络基础与应用的电子教案,计算机网络基础-教案-Internet基础与应用电子教案2...

    计算机网络基础-教案-Internet基础与应用电子教案2 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 第五章Internet基础与 ...

  8. 计算机三级试题网络技术,计算机三级考试网络技术历年真题

    一.单选题 (共41题,共82分) 1. 我 国 互 联 网 界 曾 发 生 所 谓 3Q 大 战 ,根 据 你 的 了 解 它 们 发 生 在 哪 两 个 公 司之 间 ? A. 3Com 与 百 ...

  9. 万字梳理计算机网络(最全)

    目录 考试 第一章 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层 计算机网络基础 网络基础概念 计算机网络的功能 计算机网络的组成 组成部分 工作方式 功能组成 ...

  10. icmp基于tcp还是udp_面试爱考、编程必会基础!TCP/IP必知必会10大问题……

    TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协 ...

最新文章

  1. [ADO.NET] 如何 使用 OLE DB 讀寫 Excel / 建立 Excel 檔案 (一)
  2. laravel实现数据库读写分离配置或者多读写分离配置
  3. 工厂模式、构造函数入门
  4. Java实现图的深度和广度优先遍历算法
  5. Mongodb实战使用指南
  6. 2017计算机三级试卷,2017年计算机三级《网络技术》测试题及答案
  7. 用户行为变迁 行业垂直深耕——疫情下的2020年移动互联网报告
  8. form表单问题记录
  9. kotlin基本语法--kotlin官网文档学习
  10. Surface 内置原生壁纸下载
  11. 中央财经大学研究生入学考试 901C语言程序设计
  12. xp的服务器系统怎么安装系统,如何使用u盘安装xp系统,教您如何安装
  13. php猜拳,JavaScript面向对象实现猜拳游戏
  14. android /system,Android中SystemUI解析
  15. 产品经理必知的2020年手机 App 7大原型设计流行趋势
  16. pipconda 搜索包|查看可安装包版本
  17. c语言中while中的判断语句为感叹号x时是什么意思?
  18. js获取对象的父元素,子元素,兄弟元素
  19. Y7000开机出现Checking media无法开机
  20. [RK3288][Android5.1] 移植笔记 --- eDP显示屏添加

热门文章

  1. window设置oracle sid,window下改oracle_sid
  2. 开源项目(VC++,MFC)
  3. ps怎样裁剪html网页,Photoshop另类实用技巧:切网页
  4. 零电压开关(ZVS)电路原理与设计(整理)
  5. 四象限法推导lm曲线_提出研究问题的“四象限法”
  6. 计算机图形学一:变换矩阵-Transformation Matrices
  7. 计算机电子科技生产质量标准,SJT9527-1993微型数字电子计算机质量分等标准.pdf...
  8. Android 11版本号仍有甜点名称 只是不再公开:红丝绒蛋糕
  9. info.plist 隐私权限 国际化
  10. 业务流程优化设计之思想和原则