大历史下的 tcp:忘了 3 次重复确认的快速重传吧

这篇具有很好参考价值的文章主要介绍了大历史下的 tcp:忘了 3 次重复确认的快速重传吧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

经常看到一些公众号万字长文分析 tcp 触发快速重传的条件,公司 oncall 也经常有人纠结为什么重复确认却没有触发重传,公司招聘面试也经常会问重复确认和快速重传。

这种老掉牙机制(即 rfc3517 中被规范,如今是 rfc6675)早不时兴了,虽然我也知道某些场景下确实仍需要兼容老掉牙的东西,但每有人咨询这问题,我的回答总是 “忘了它吧,现在都用 rack 了”。

看看 linux 系统 tcp_recovery 缺省值:

tcp_recovery - INTEGER
	This value is a bitmap to enable various experimental loss recovery
	features.

	RACK: 0x1 enables the RACK loss detection for fast detection of lost
	      retransmissions and tail drops. It also subsumes and disables
	      RFC6675 recovery for SACK connections.
	RACK: 0x2 makes RACK's reordering window static (min_rtt/4).
	RACK: 0x4 disables RACK's DUPACK threshold heuristic

	Default: 0x1

既然它早就缺省 1 了,谁还在乎多少个重复确认,而你又有什么理由将其恢复成 0 呢,忘了重复确认触发快速重传这件事吧。

为什么在 sack 被引入后这么多年才有人提出 rack(它是 bbr 的必须,但却可用于任何 cc) 呢。

  • rack 需要高精度时间戳支持,这对硬件有所需,rtt 越小,要求的时钟精度越高;
  • rack 需要重传队列报文结构体多个时间戳字段,对内存有所需;
  • rack 对乱序相对严重的网络重传过于激进,对拥塞缓解不利。

历史使然,早期硬件无法支撑高频率高精度时间戳,早期网络乱序多,rack 将乱序压缩在 minrtt/4 到 srtt 之间很难覆盖频发且原因复杂的乱序检测。说白了还是 rack 在实现上依赖过多,rack 的假设是一个稳定且资源相对充足的端到端,cpu,内存,乱序都不是问题,所以它才简单。

现在的网络传输环境基本满足了稳定且资源充足,假设满足,则 rack 可大用。

但即使在当前,iot,无线弱网,卫星链路等场景,仍然是弱处理器,小内存,高乱序,低带宽,这就是 rack 不适合的场景,tcp 兼容性的意义正在此,你要知道老掉牙不时兴的东西为什么没被删去。

在大多数互联网厂商的纠结者面临的场景下,除非故意刁难,“reordering 次 dupack 触发快速重传” 确实不时兴了,若不是为了兼容,删掉这类代码 tcp 的实现就会变得非常清爽。

针对上面描述的三点理由,不必过多强调硬件支不支持高精度时间戳的问题,结构体里追加一些字段对再小的内存也不是压力,这些因素并无全局影响,早期虽不易,但你总能找到更强大的硬件和更大的内存得以支撑 rack,启不启用 rack 的关键在于第三点。

如果网络带宽低,buffer 浅,rtt 抖动大,不稳定,乱序几乎是必然(为不耽误行文,乱序分析放在最后的附录)。这种情况对于丢包和乱序的判断存在歧义,必须采用保守策略,能少发一个报文就少发一个,节约带宽。彼时 rfc3517(被 rfc6675 修订废弃) 是好的,它的名字可以看出它的态度:A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP。

相比之下,资源充盈,rack 则更 aggressive,能快一点判定为 lost 就能快一点重传,节省时间。

大多数情况下,rfc3517 的保守算法需要改进的原因是场景变了,引述 rack draft 的 overview:

Using a threshold for counting duplicate acknowledgments (i.e., DupThresh) alone is no longer reliable because of today’s prevalent reordering patterns. A common type of reordering is that the last “runt” packet of a window’s worth of packet bursts gets delivered first, then the rest arrive shortly after in order. To handle this effectively, a sender would need to constantly adjust the DupThresh to the burst size; but this would risk increasing the frequency of RTOs on real losses.

如果在非上述批判的场景中误用了 rack,本不充裕的资源被激进的重传占据,则势必挤压有效吞吐。

rack 提供了一种兼容 rfc3517/6675 的方法,虽说是兼容,但却是激进地兼容:

RACK’s approach considers a packet lost when at least one higher sequence packet is SACKed and the total number of SACKed packets is at least DupThresh. For example, suppose a connection sends 10 packets, and packets 3, 5, 7 are SACKed. [RFC6675] considers packets 1 and 2 lost. RACK considers packets 1, 2, 4, 6 lost.

老方法不解释,能把大部分人搞懵,简单解释一下 rack 的兼容方法,比较简单:传了 1 到 10,最晚收到的确认是 7(它就是 recent ack),并且 sacked 数量不小于 dupthresh(= 3),符合触发条件,那么在最晚确认 7 之前发送的所有未确认报文均 mark lost。

这岂不就是 fack 么,rack 曾废了 fack,它自己不也如此?所不同的是,fack 由 “最高序列号” 往前 mark lost,而 rack 则由 “最 recent 确认序列号” 往前 mark lost。

总之,历史向前走,曾经的假设如今可能不再成立,新的假设下总要更新新的算法,但也不要以为所有的旧场景都以不再,做 iot 仍需要小心翼翼用内存,这与 20 年前 pc 编程无异。

如果(只是如果)互联网带宽几乎无限,收敛比接近 1,随机丢包率承诺到 0.000001 以下,回退到 rto + gbn 则最优,历史是个圈,一开始的方法可能就是终极的方法。

附:乱序分析-为什么会乱序

  • 转发设备的包分类,排队算法,qos 策略粗糙或存在 bug,将同流报文排入不同队列,造成乱序;
  • 可靠或尽力可靠(如 wifi)链路层重传,导致发送 1,2,3 后 1 丢失,2,3 继续转发,1 重传,产生 2,3,1 序列;
  • 路由重收敛导致乱序;
  • 在相对大的 buffer 中堆积足够的报文指示即将发生的严重拥塞时,后面的报文才可能被调度到另一队列甚至另一条路径而优先到达。

我们要清楚随着网络技术的发展,那些问题被减轻了,而又有哪些问题恶化了:

  • 算法和 qos 越来越细化,优化,同流不同队列的问题减轻;
  • 链路层越来越可靠,链路层重传导致的乱序越来越减轻;
  • 随带宽提高以及 bgp/igp 互联度增强,拥塞及路由重收敛导致的乱序几乎会在 1 个 rtt 内确认,这为 rack 提供了依据;
  • 端到端时延由于带宽增加而减少,但对时间更敏感,轻微时间差异就会乱序,带宽越大,并行处理越要小心;
  • 多核,硬件并行处理越来越流行,其粗糙或错误实现造成的乱序不降反增。
  • iot 设备场景增多,设备性能不高,网络弱,此环境乱序不随高性能设备的发展而减轻。

虽然总体看来乱序问题有所减轻,但必须清楚乱序的原因。

浙江温州皮鞋湿,下雨进水不会胖。文章来源地址https://www.toymoban.com/news/detail-858874.html

到了这里,关于大历史下的 tcp:忘了 3 次重复确认的快速重传吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 传输层—TCP核心机制(确认应答、超时重传、三次握手&四次挥手、滑动串口等……)

    ​ 简单给大家介绍一下 TCP 的核心特性,以及报头结构。 TCP 特点: 可靠传输 ,有连接,面向字节流,全双工。(后三个特性,我们在网络编程代码中完全可以感知到) 对于可靠传输来说,是内核实现的,写代码的时候,是感知不到的。(感知成本低,其使用成本也就降低

    2024年02月04日
    浏览(34)
  • 10000字讲解TCP协议(确认应答,超时重传,三次握手,四次挥手等等众多机制)以及UDP协议(UDP报文,校验和)

    UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,因为不需要建立连接,所以可以在网络上以任何可能的路径传输,至于有没有传输到目的地,UDP是不关心的,所以,UDP它是天然支持广播的,就类似学校的广播,只需要将声音传递给每个学生即

    2024年01月21日
    浏览(53)
  • 网络之TCP中的快速重传和慢启动

    小白: 大牛你好,我是一名即将毕业的大学生,最近正在准备找工作,但是我对TCP中的快速重传和慢启动不是很了解,能否请您帮我解释一下呢? 大牛: 当然可以,TCP中的快速重传和慢启动是TCP拥塞控制算法中非常重要的部分,我可以帮你详细讲解一下。 小白: 太好了,那能

    2024年02月02日
    浏览(31)
  • 网路原理-传输层UDP,TCP/IP(确认应答,超时重传,连接管理,三次握手,四次挥手,状态转换,流量控制,滑动窗口,拥塞控制,延时应答,捎带应答,异常情况,面向字节流)-网络层(IP协议,地址管理)

    本节重点 • 理解传输层的作⽤,深⼊理解TCP的各项特性和机制 • 对整个TCP/IP协议有系统的理解 • 对TCP/IP协议体系下的其他重要协议和技术有⼀定的了解 我们之前编写完了基本的 java socket ,要知道,我们之前所写的所有代码都在应⽤层,都是为了 完成某项业务,如翻译等。

    2024年04月15日
    浏览(58)
  • 【计算机网络】 确认应答机制与超时重传

    当我们客户端发送了一个数据,seq是1 100,那么服务端在收到时就会回一个ack=101的ACK包,代表101之前的包我都收到了,下面请你从101继续发送。然后客户端就会发送101 200,服务端收到后再回一个ack=201,在书写过程中,我们一定要先把标志位置1,然后再发送数据包,否则包是

    2024年02月09日
    浏览(34)
  • 【TCP】重传与超时机制

    在网络通信的世界里,传输控制协议(TCP)扮演着一个至关重要的角色。它确保了数据的可靠传输,就像邮差确保每一封信都能准确无误地送达收件人手中一样。但是,网络环境充满了不确定性,数据包可能会因为各种原因丢失或延迟。为了应对这种情况,TCP实现了重传和超

    2024年04月13日
    浏览(36)
  • TCP 协议(四)重传与超时

    TCP 中有四种计时器(Timer),分别为: 重传计时器:Retransmission Timer 持久计时器:Persistent Timer 保活计时器:Keeplive Timer 等待计时器:Timer_Wait Timer TCP 是保证数据可靠传输的。怎么保证呢?带确认的重传机制。在滑动窗口协议中,接受窗口会在连续收到的包序列的最后一个包

    2024年02月15日
    浏览(44)
  • TCP详解之重传机制

    TCP 实现可靠传输的方式之一,是通过序列号与确认应答。 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。 但在错综复杂的网络,并不一定能如上图那么顺利能正常的数据传输,万一数据在传输过程中丢失了呢?所以TCP针

    2024年02月04日
    浏览(32)
  • TCP重传机制详解——02SACK

    Selective Acknowledgment有选择的ACK,显而易见这是在ACK的基础上的扩展。在ACK包上会携带SACK选项,表示一个接收范围,也称之为\\\"空洞\\\"。 传统的TCP在丢包时会采用超时重传的方式,即等待一段时间后重传丢失的数据段。而使用SACK机制,接收端可以选择性地向发送端反馈已经成功

    2024年04月29日
    浏览(30)
  • TCP重传, 滑动窗口, 流量控制, 拥塞控制

    1. 重传机制 TCP 实现可靠传输的方式之一,是通过 序列号与确认应答 。 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。 针对数据可能丢失的情况, 用重传机制来解决, 四种常见的重传机制: 超时重传 快速重传 SACK D-SACK 1.

    2024年01月22日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包