TCP是一种面向连接、可靠的传输层协议。
为了保证数据的可靠传输,TCP采用数据包重传的机制来应对网络传输过程中可能出现的丢包、错包和乱序等问题。
TCP的重传包括超时重传、快速重传、带选择确认SACK的重传和重复SACK重传四种。
1、超时重传
当发送方发送数据包后,会启动一个重传计时器,等待接收方返回确认报文。
如果在超时重传时间RTO到达之前仍未收到确认报文,发送方会认为数据包丢失,触发超时重传。
超时重传的时间阈值会根据网络状况进行动态调整,应该略大于报文往返时间RTT的值。
如果超时重发的数据,再次超时又需要重传的时候,TCP 的策略是超时间隔加倍。
超时触发重传存在的问题是,超时周期可能相对较长。
2、快速重传
快速重传是一种提高TCP性能的重传策略。当接收方连续收到三个相同序号的ACK确认报文时,发送方会认为对应的数据包发生了丢失。
为了尽快补发丢失的数据包,发送方会立即进行重传,而不再等待重传计时器超时。
这种方法可以减小因数据包丢失导致的延迟。
3、带选择确认SACK的重传
选择性确认是一种TCP扩展,需要在TCP头部选项字段里加一个SACK的东西,它允许接收方通知发送方哪些数据包已经被成功接收,哪些数据包需要重传。
SACK可以提高TCP性能,因为发送方可以更精确地知道哪些数据包需要重传,从而避免不必要的全量重传。
4、重复SACK
SACK重传对于接收到重复数据段怎样运作没有明确规定,通过重复SACK重传可以让发送方知道哪些数据被重复接收了,而且明确是什么原因造成的。