不管是数据包丢失,还是确认应答丢失,这两种情况都会导致发送方没有收到接收方的确认应答(ACK
)报文,所以发送方要向接收方重传数据包。
RTO
)的设置RTO 的设置和往返时间(RTT
) 有关。
因此,超时重传的时间应该略大于报文往返 RTT 的值。
而 RTT 的值又是经常变化的(受限于网络环境),所以 RTO 的也应该动态计算,例如通过 RTT 的值**加权平均(平滑的往返时间)**等等。
往返时间 RTT 的测量是比较复杂的,尤其是在发生重传时
解决方案:发生超时重传的时候不将 RTT 参与 RTTs 的计算
这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。**但根据 Karn 算法,不考虑重传的报文段的往返时间样本。**这样,超时重传时间就无法更新。这会导致报文段反复被重传。