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

相关推荐
赖small强39 分钟前
【Linux 网络基础】libwebsockets 技术文档
linux·网络·https·tls·lib·websockets
TT哇1 小时前
消息推送机制——WebSocket
java·网络·websocket·网络协议
wadesir3 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
胡八一3 小时前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
带土14 小时前
4. 两台win11 笔记本局域网内文件传输
网络
xixixi777775 小时前
“C2隐藏”——命令与控制服务器的隐藏技术
网络·学习·安全·代理·隐藏·合法服务·c2隐藏
名字不相符5 小时前
攻防世界WEB难度一(个人记录)
学习·php·web·萌新
在多学一点5 小时前
iptables的源地址转换和iptables的目标地址转换
网络
gadiaola5 小时前
【计算机网络面试篇】HTTP
java·后端·网络协议·计算机网络·http·面试
报错小能手6 小时前
计算机网络自顶向下方法57——网络安全 基础与密码学原理
计算机网络·安全·web安全