TCP超时重传机制
TCP超时重传机制
针对TCP数据包丢失的情况,TCP协议设计了重传机制进行解决,常见的重传机制有四种:
- 超时重传(Timeout Retransmission)
- 快速重传(Fast Retransmission)
- SACK重传(Selective Acknowledgment Retransmission)
- D-SACK重传(Duplicate Acknowledgment Retransmission)
一、超时重传
超时重传是指在发送数据时设置一个定时器,当超过指定的时间后,如果没有收到对方的ACK报文,就会重发该数据。
TCP会在以下两种情况发生时触发超时重传:
- 数据包丢失
- ACK确认应答丢失

超时时间设置
- RTT:往返时延,指的是数据发送时刻到接收到确认的时刻的差值
- RTO:超时重传时间
- 超时重传时间RTO应略大于报文往返时延RTT
超时重传的问题
超时重传存在超时周期可能较长的问题,导致数据包丢失后需要等待较长时间才能重传,影响网络性能。
二、快速重传
快速重传是指在发送数据时,如果连续收到三个相同的ACK报文,就会立即重发该数据,而不需要等待超时。

快速重传只解决了超时重传中的时间问题,但是快速重传仍然面临着一个问题,那就是:重传的时候,是重传一个还是重传所有。
于是就有了SACK方法。
三、SACK重传
SACK重传是选择性确认,需要在TCP头部增加一个SACK选项,它可以将已收到的数据的信息发送给发送方,这样发送方就可以知道哪些数据收到了哪些没收到,就可以只重传丢失的数据。

四、D-SACK重传
D-SACK重传,即Duplicate SACK重传,主要使用了SACK来告诉发送方有哪些数据被重复接收了。
参考资料: