TCP重传机制是为了确保数据可靠传输而设计的,当传输的数据包丢失或损坏时,TCP会重新发送这些数据包。TCP重传主要有以下几种方式:
超时重传(Timeout Retransmission):
当发送方发送一个数据包后,它会启动一个定时器,如果在定时器到期前没有收到对这个数据包的确认(ACK),则认为该数据包可能丢失,发送方会重传该数据包。
这种方式依赖于定时器的设置,通常称为重传超时(Retransmission Timeout, RTO)。RTO的值通常会根据网络状况动态调整。
快速重传(Fast Retransmission):
快速重传机制利用的是冗余的ACK信息。如果接收方收到一个失序的数据包,它会立即发送一个重复的ACK。
当发送方连续收到三个相同的重复ACK时(称为“三次重复ACK”,Triple Duplicate ACK),它就会立即重传相应的数据包,而不需要等待超时定时器到期。
快速重传大大减少了等待超时的时间,加快了数据包的恢复。
选择性确认重传(Selective Acknowledgment Retransmission,SACK):
标准的TCP确认机制(基于累计ACK)只能告知发送方所有连续接收到的数据包的最后一个序号,无法处理间断的丢包。
SACK是一种扩展机制,允许接收方告诉发送方哪些具体的数据包已经收到,哪些还没有收到。
这样,发送方可以只重传那些确实丢失的数据包,而不是重传已经成功接收的数据包,从而提高了重传效率。
SACK选项需要双方在连接建立时协商支持。
总结起来,TCP重传的主要方式包括:
超时重传:基于定时器的超时机制。
快速重传:基于重复ACK的快速响应机制。
选择性确认重传(SACK):基于选择性确认的精细控制机制。
这些重传机制协同工作,确保了TCP能够可靠地传输数据,即使在存在数据包丢失的情况下。