TCP超时重传机制

针对TCP数据包丢失的情况,TCP协议设计了重传机制进行解决,常见的重传机制有四种:

  • 超时重传(Timeout Retransmission)
  • 快速重传(Fast Retransmission)
  • SACK重传(Selective Acknowledgment Retransmission)
  • D-SACK重传(Duplicate Acknowledgment Retransmission)

一、超时重传

超时重传是指在发送数据时设置一个定时器,当超过指定的时间后,如果没有收到对方的ACK报文,就会重发该数据。

TCP会在以下两种情况发生时触发超时重传:

  • 数据包丢失
  • ACK确认应答丢失

TCP超时重传机制

超时时间设置

  • RTT:往返时延,指的是数据发送时刻到接收到确认的时刻的差值
  • RTO:超时重传时间
  • 超时重传时间RTO应略大于报文往返时延RTT

超时重传的问题

超时重传存在超时周期可能较长的问题,导致数据包丢失后需要等待较长时间才能重传,影响网络性能。

二、快速重传

快速重传是指在发送数据时,如果连续收到三个相同的ACK报文,就会立即重发该数据,而不需要等待超时。

TCP快速重传机制

快速重传只解决了超时重传中的时间问题,但是快速重传仍然面临着一个问题,那就是:重传的时候,是重传一个还是重传所有。

于是就有了SACK方法。

三、SACK重传

SACK重传是选择性确认,需要在TCP头部增加一个SACK选项,它可以将已收到的数据的信息发送给发送方,这样发送方就可以知道哪些数据收到了哪些没收到,就可以只重传丢失的数据。

TCP SACK重传机制

四、D-SACK重传

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


参考资料: