超时重传

不管是数据包丢失,还是确认应答丢失,这两种情况都会导致发送方没有收到接收方的确认应答(ACK)报文,所以发送方要向接收方重传数据包。

5.webp

超时时长(RTO)的设置

RTO 的设置和往返时间(RTT) 有关。

6.webp

7.webp

因此,超时重传的时间应该略大于报文往返 RTT 的值。

而 RTT 的值又是经常变化的(受限于网络环境),所以 RTO 的也应该动态计算,例如通过 RTT 的值**加权平均(平滑的往返时间)**等等。

加权平均往返时间 RTTs

image.png

通过加权平均往返时间和 RTT 偏差的加权平均时间计算 RTO

image.png

RTT 的测量

往返时间 RTT 的测量是比较复杂的,尤其是在发生重传时

image.png

解决方案:发生超时重传的时候不将 RTT 参与 RTTs 的计算

这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。**但根据 Karn 算法,不考虑重传的报文段的往返时间样本。**这样,超时重传时间就无法更新。这会导致报文段反复被重传。