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)进一步优化。