摘要

  • RFC 6298 只在 ACK 确认了新数据时重启重传计时器,而不是每收到一个 ACK 就重启。
  • 发送数据时若计时器未运行则启动;所有未决数据都被确认后停止;计时器到期时重传最早的未确认段。

确认边界才是时钟的参照

计时器保护的是仍处于未确认状态的数据。发送带数据的报文时,如果计时器处于空闲状态,发送端便按当前 RTO 启动它。随后发送更多数据,并不会自动把原有期限向后推移。

规则 5.3 规定,只有 ACK 确认了新数据,计时器才重新开始一个当前 RTO 间隔。此时接收端已确认更多序列空间,发送端所面对的最早未确认段可能已经改变。

如果 ACK 只是重复原来的确认边界,它不满足这个条件。因此可以推断,重复 ACK 不能不断为尚未解决的数据购买新的期限。这一推断只针对该计时器规则,并不表示重复 ACK 在 TCP 中普遍没有作用。

当所有未决数据都已确认,计时器关闭。若计时器到期,则发送端重传最早的未确认段。

必须做什么,推荐如何做

RFC 6298 的硬性不变量是:某个段在上一次发送后,不得少于一个 RTO 就再次被重传。文中把启动、停止和重启的生命周期称为推荐算法;强制性不变量与推荐实现方式并不相同。

该 RFC 不能证明所有现有实现的行为,也不在此讨论延迟确认、RTT 采样、快速重传、SACK、拥塞控制或超时退避。

来源