计算机网络自顶向下方法24——运输层 可靠数据传输 超时间隔加倍 快速重传 是回退n步还是选择重传

可靠数据传输的进阶机制:超时间隔加倍与快速重传

我们之前讨论的回退N步和选择重传是基础模型,而TCP的实现是一种混合体,它汲取了多种思想的精华,以应对复杂的真实网络环境。

一、一些"有趣"的情况与基础协议的困境

1. 情况一:轻微的临时延迟 vs 严重的包丢失

  • 场景:一个数据包的ACK稍微来晚了一点,可能是因为网络中存在短暂的排队。

  • GBN/SR的困境 :如果超时间隔是固定的,这次轻微的延迟就会触发不必要的重传。在GBN中,这甚至会引发一连串不必要重传,浪费带宽。

2. 情况二:单个数据包丢失

  • 场景:在一个很长的数据流中,只有一个数据包丢失了,其后的数据包都顺利到达。

  • GBN的困境 :由于GBN接收方会丢弃所有失序的包,发送方需要回退并重传丢失包之后的所有包。一个丢包,代价巨大。

  • SR的困境:SR虽然只重传丢失的包,但它需要等待该包的超时计时器到期,这可能需要等待一个完整的超时间隔,恢复速度慢。

二、TCP的解决方案之一:超时间隔加倍

这是TCP拥塞控制的重要组成部分,但它在处理上述"情况一"时非常有效。

  • 机制 :每当TCP重传一个报文段后,它并不是使用原来的超时间隔,而是将下一次的超时间隔设置为前一次的两倍

  • 如何解决问题一?

    • 如果是因为轻微的网络波动导致超时,在重传后,网络很可能已经恢复。重传的包会很快被确认,TCP随后会将超时间隔降回正常值。

    • 如果是因为真正的网络拥塞导致连续丢包,这种指数级退避策略能迅速降低发送方的重传速率,给网络足够的时间来缓解拥塞,这是一种"利他"行为。

  • 本质 :这是一种谨慎的、自适应的策略。它承认自己无法准确判断丢包原因,于是采取一种对网络更友好的方式。

三、TCP的解决方案之二:快速重传

这是TCP为了处理"情况二"(单个包丢失)而设计的高效机制,它极大地减少了等待超时的时间

  • 机制 :如果接收方收到了一个失序的数据包 (例如,期望Seq=1000,却收到了Seq=1500),根据TCP标准,它应该立即重复发送最后一个按序包的ACK(即再次发送Ack=1000)。

  • 触发条件 :当发送方连续收到3个重复的ACK 时,它就有很强的理由认为这个被期望的报文段(Seq=1000)已经丢失了,而不是仅仅延迟了(因为如果只是延迟,不会引发后续多个包的确认)。

  • 行动 :于是,发送方无需等待该报文段的超时计时器到期,就立即重传那个被认为丢失的报文段。

四、是回退N步还是选择重传?

这是一个非常好的问题。答案是:TCP是一种混合体,但它的行为在此时更偏向于"选择性重传"

  • 它像GBN的地方

    • TCP使用累积确认,确认号表示该序号之前的所有字节都已收到。这是GBN的思想。

    • 接收方可以接受失序的报文段并缓存它们,这是对纯GBN的改进,偏向SR。

  • 它像SR的地方(尤其是在快速重传中)

    • 快速重传机制只重传那个被推断为丢失的单个报文段,而不是所有后续报文段。这正是SR的核心思想。

    • 在快速重传之后,TCP通常会进入一个名为 "快速恢复" 的阶段,而不是像GBN那样完全回退。

结论:

TCP的可靠数据传输协议不是一个教科书式的GBN或SR。它巧妙地结合了:

  1. GBN的累积确认:实现简单,节省ACK开销。

  2. SR的缓存与选择性重传思想:通过快速重传/恢复机制,高效地处理单个丢包,避免了GBN的性能悬崖。

这种混合设计使得TCP在保持相对简单的同时,在效率上达到了一个非常高的水平,完美地平衡了复杂性、效率和可靠性。

相关推荐
一起养小猫3 分钟前
Flutter for OpenHarmony 实战:数据持久化方案深度解析
网络·jvm·数据库·flutter·游戏·harmonyos
云游云记16 分钟前
PHP 汉字转拼音扩展包:overtrue/pinyin 全面指南
php·overtrue/pinyin
xu_yule20 分钟前
网络和Linux网络-13(高级IO+多路转接)五种IO模型+select编程
linux·网络·c++·select·i/o
安科士andxe43 分钟前
纤云科技 EPON OLT PX20 + 光模块:高兼容低功耗的光纤接入优选方案
网络·科技
车载testing1 小时前
SOME/IP 协议中发送 RR 报文的实践指南
网络·tcp/ip·安全
郝学胜-神的一滴1 小时前
Linux网络编程之listen函数:深入解析与应用实践
linux·服务器·开发语言·网络·c++·程序人生
物联网软硬件开发-轨物科技1 小时前
【轨物方案】告别“盲维”时代:如何不动一根电线,帮老旧电站找回消失的 5% 收益?
服务器·网络·数据库
有代理ip1 小时前
成功请求的密码:HTTP 2 开头响应码深度解析
java·大数据·python·算法·php
以太浮标2 小时前
华为eNSP模拟器综合实验之- NAT策略配置类型全景汇总
服务器·网络·华为
小oo呆2 小时前
【学习心得】CMD终端设置Proxy的几个要点
运维·服务器·网络