TCP拥有两套独立机制来完成重传,一是基于时间,二是基于确认信息的构成。后者通常比前者更有效。
重传二义性:假设一个包的传输出现超时,该数据包会被重传,接着收到一个确认信息。那么该信息是对第一次还是第二次传输的确认就存在二义性。
带时间戳选项的RTT测量:TCP时间戳选项(TSOPT)作为PAWS算法的基础,还可用作RTT测量(RTTM)。它允许发送者在返回的对应确认信息中携带一个32比特的数。时间戳值(TSV)携带于初始SYN的TSOPT中,并在SYN+ACK的TSOPT的TSER部分返回,依次设定srtt、rttvar与RTO的值。
时间戳选项使得发送端即使在丢包、延时、失序的情况下也能测量RTT。
基于计时器的重传
一旦TCP发送端得到了基于时间变化的RTT测量值,就能据此设置RTO,发送报文段时应确保重传计时器设置合理。TCP将超时重传视为相当重要的事件,当发生这种情况时,它通过降低当前数据发送率来对此快速响应。两种方法实现:
1.基于拥塞控制机制减小发送窗口大小
2.每当一个重传报文段被再次重传时,则增大RTO退避因子。
快速重传
快速重传机制基于接收端的反馈信息来引发重传,而非重传计时器的超时。与超时重传相比,快速重传更能有效地修复丢包情况。当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),并且失序情况表明在后续数据到达前出现了丢段,即接收端缓存出现了空缺。发送端的工作即为尽快的、高效地填补该空缺。
当失序数据到达时,重复ACK应该立即返回,不能延时发送。原因在于使发送端尽早得知失序报文段,并告诉其空缺在哪。当采用SACK时,重复ACK通常也包含SACK信息,利用该信息可获知多个空缺。
TCP发送端在观测到至少dupthresh(通常为3)个重复ACK后,即重传可能丢失的数据分组,而不必等到重传计时器超时。
带选择确认的重传
TCP接收端可提供SACK功能,通过TCP头部的累积ACK号字段来描述其接收到的数据。ACK号与接收端缓存中的其他数据之间的间隔称为空缺。
TCP发送端的任务是通过重传丢失的数据来填补接收端
TCP在发送数据时会设置一个计时器,若至计时器超时仍未收到数据确认信息,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(RTO)。另一种方式的重传称为快速重传,通常发生在没有延时的情况下。若TCP累计确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文段时,快速重传会推断出现丢包。
设置重传超时TCP超时与重传的基础是怎样根据给定连接的RTT设置RTO。
经典方法和标准方法重传二义性:假设一个包的传输出现超时,该数据包会被重传,接着收到一个确认信息。那么该信息是对第一次还是第二次传输的确认就存在二义性。
带时间戳选项的RTT测量:TCP时间戳选项(TSOPT)作为PAWS算法的基础,还可用作RTT测量(RTTM)。它允许发送者在返回的对应确认信息中携带一个32比特的数。时间戳值(TSV)携带于初始SYN的TSOPT中,并在SYN+ACK的TSOPT的TSER部分返回,依次设定srtt、rttvar与RTO的值。
时间戳选项使得发送端即使在丢包、延时、失序的情况下也能测量RTT。
基于计时器的重传
一旦TCP发送端得到了基于时间变化的RTT测量值,就能据此设置RTO,发送报文段时应确保重传计时器设置合理。TCP将超时重传视为相当重要的事件,当发生这种情况时,它通过降低当前数据发送率来对此快速响应。两种方法实现:
1.基于拥塞控制机制减小发送窗口大小
2.每当一个重传报文段被再次重传时,则增大RTO退避因子。
快速重传
快速重传机制基于接收端的反馈信息来引发重传,而非重传计时器的超时。与超时重传相比,快速重传更能有效地修复丢包情况。当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),并且失序情况表明在后续数据到达前出现了丢段,即接收端缓存出现了空缺。发送端的工作即为尽快的、高效地填补该空缺。
当失序数据到达时,重复ACK应该立即返回,不能延时发送。原因在于使发送端尽早得知失序报文段,并告诉其空缺在哪。当采用SACK时,重复ACK通常也包含SACK信息,利用该信息可获知多个空缺。
TCP发送端在观测到至少dupthresh(通常为3)个重复ACK后,即重传可能丢失的数据分组,而不必等到重传计时器超时。
带选择确认的重传
TCP接收端可提供SACK功能,通过TCP头部的累积ACK号字段来描述其接收到的数据。ACK号与接收端缓存中的其他数据之间的间隔称为空缺。
TCP发送端的任务是通过重传丢失的数据来填补接收端