TCP的快速重传机制
字数 1011 2025-11-05 23:47:54

TCP的快速重传机制

TCP的快速重传机制是一种优化算法,用于在定时器超时之前快速检测和重传丢失的数据包,从而提高数据传输效率。

1. 背景与问题
在标准的TCP可靠性机制中,发送方发送数据后启动重传定时器。如果定时器超时仍未收到确认(ACK),发送方会重传该数据包。但超时时间(RTO)通常较长(例如几百毫秒),导致网络出现丢包时,发送方需要等待较长时间才能重传,降低了吞吐量。

2. 快速重传的核心思想
当接收方收到乱序的数据包时(例如先收到序列号2的包,后收到序列号1的包),它会立即重复发送最后一个已按序接收的包的ACK(称为“重复ACK”)。如果发送方连续收到3个相同的ACK(即3次重复ACK),则推断该ACK对应的下一个数据包已丢失,无需等待超时,直接重传该数据包。

3. 详细工作流程

  • 步骤1:发送方发送数据包
    假设发送方依次发送序列号为1、2、3、4、5的数据包。

  • 步骤2:数据包丢失与乱序接收
    数据包3在网络中丢失,但数据包4和5正常到达接收方。接收方预期下一个序列号应为3,但收到4和5时,发现序列号不连续,于是每收到一个乱序包,立即发送一个对最后一个按序接收数据包(即序列号2)的重复ACK。

  • 步骤3:发送方检测重复ACK
    发送方收到第一个对序列号2的ACK时,记录为正常确认。随后连续收到3个对序列号2的重复ACK(共4个ACK,但后3个为重复),触发快速重传条件。

  • 步骤4:快速重传
    发送方立即重传数据包3,而无需等待包3的重传定时器超时。

  • 步骤5:接收方确认重传包
    接收方收到重传的包3后,因已收到包4和5,此时可按序交付数据,并发送对最高按序序列号(即包5)的ACK。

4. 为什么是3次重复ACK?
选择3次(即总共收到4个相同ACK)是为了避免因网络短暂乱序(如包重新排序)误判丢包。若仅需2次重复ACK(共3个ACK),轻微乱序可能触发不必要的重传;而3次重复ACK能在丢包和乱序之间取得平衡,提高判断准确性。

5. 与超时重传的对比

  • 超时重传:依赖定时器,延迟高,对吞吐量影响大。
  • 快速重传:基于重复ACK反馈,延迟低,能更快恢复数据传输,通常与拥塞控制算法(如快速恢复)结合使用。

6. 局限性
快速重传只能检测单个数据包丢失。若连续多个包丢失或网络严重乱序,可能无法触发重复ACK,仍需依赖超时重传。此时需结合其他机制(如选择性确认SACK)进一步优化。

TCP的快速重传机制 TCP的快速重传机制是一种优化算法,用于在定时器超时之前快速检测和重传丢失的数据包,从而提高数据传输效率。 1. 背景与问题 在标准的TCP可靠性机制中,发送方发送数据后启动重传定时器。如果定时器超时仍未收到确认(ACK),发送方会重传该数据包。但超时时间(RTO)通常较长(例如几百毫秒),导致网络出现丢包时,发送方需要等待较长时间才能重传,降低了吞吐量。 2. 快速重传的核心思想 当接收方收到乱序的数据包时(例如先收到序列号2的包,后收到序列号1的包),它会立即重复发送最后一个已按序接收的包的ACK(称为“重复ACK”)。如果发送方连续收到3个相同的ACK(即3次重复ACK),则推断该ACK对应的下一个数据包已丢失,无需等待超时,直接重传该数据包。 3. 详细工作流程 步骤1:发送方发送数据包 假设发送方依次发送序列号为1、2、3、4、5的数据包。 步骤2:数据包丢失与乱序接收 数据包3在网络中丢失,但数据包4和5正常到达接收方。接收方预期下一个序列号应为3,但收到4和5时,发现序列号不连续,于是每收到一个乱序包,立即发送一个对最后一个按序接收数据包(即序列号2)的重复ACK。 步骤3:发送方检测重复ACK 发送方收到第一个对序列号2的ACK时,记录为正常确认。随后连续收到3个对序列号2的重复ACK(共4个ACK,但后3个为重复),触发快速重传条件。 步骤4:快速重传 发送方立即重传数据包3,而无需等待包3的重传定时器超时。 步骤5:接收方确认重传包 接收方收到重传的包3后,因已收到包4和5,此时可按序交付数据,并发送对最高按序序列号(即包5)的ACK。 4. 为什么是3次重复ACK? 选择3次(即总共收到4个相同ACK)是为了避免因网络短暂乱序(如包重新排序)误判丢包。若仅需2次重复ACK(共3个ACK),轻微乱序可能触发不必要的重传;而3次重复ACK能在丢包和乱序之间取得平衡,提高判断准确性。 5. 与超时重传的对比 超时重传 :依赖定时器,延迟高,对吞吐量影响大。 快速重传 :基于重复ACK反馈,延迟低,能更快恢复数据传输,通常与拥塞控制算法(如快速恢复)结合使用。 6. 局限性 快速重传只能检测单个数据包丢失。若连续多个包丢失或网络严重乱序,可能无法触发重复ACK,仍需依赖超时重传。此时需结合其他机制(如选择性确认SACK)进一步优化。