计算机网络自顶向下方法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在保持相对简单的同时,在效率上达到了一个非常高的水平,完美地平衡了复杂性、效率和可靠性。

相关推荐
橘子真甜~9 小时前
C/C++ Linux网络编程15 - 网络层IP协议
linux·网络·c++·网络协议·tcp/ip·计算机网络·网络层
Allen正心正念202510 小时前
网络编程与通讯协议综合解析
网络
bing_feilong10 小时前
ubuntu中的WIFI与自身热点切换
网络
CodeByV10 小时前
【网络】UDP 协议深度解析:从五元组标识到缓冲区
网络·网络协议·udp
虹科网络安全11 小时前
艾体宝洞察 | 利用“隐形字符”的钓鱼邮件:传统防御为何失效,AI安全意识培训如何补上最后一道防线
运维·网络·安全
石像鬼₧魂石11 小时前
Kali Linux 网络端口深度扫描
linux·运维·网络
适应规律13 小时前
UNeXt-Stripe网络架构解释
网络
纸带14 小时前
USB通信的状态
网络
无敌最俊朗@15 小时前
WebSocket与Webhook:实时通信技术对比
网络·websocket·网络协议
悟空空心15 小时前
服务器长ping,traceroute
linux·服务器·网络·ssh·ip·ping++