TCP RTT预估值和虚假重传超时

《TCP/IP Illustrated Volume1 The Protocols》第14章的总结中提到

Karn’s algorithm removes the retransmission ambiguity problem by preventing the use of RTT measurements for segments that have been lost.

为了避免歧义,重传过的数据包的ack是不被计入RTT采样的。因为分不清这个ack对应的是原始数据包还是重传的数据包。

但这样其实RTT的统计数据缺少了一部分非常重要的数据包。那就是在网络中重传过的数据包。因为重传过,所以肯定超时,这部分超时的数据包意味着实际的RTT比预估的RTT要长。此时RTT的预估值和实际值已经不同,TCP统计时还将这部分重要的数据给丢弃,无疑会导致RTT的预估值越到后期越大概率是小于实际值的。也就是超时会经常发生。【Linux TCP的超时最小时间是200ms可能是为了解决这个问题?】

文中也花了大量的文字描述了虚假超时,也就是实际数据包已经到达对端,然而本地重新发送了一个副本过去。说明实际RTT比预估RTT要长的情况是普遍的。

回过头看, Supurious Retransmission Timeout虚假超时的发生应该是必然的。

posted @ 2022-12-03 14:26  dewxin  阅读(223)  评论(0编辑  收藏  举报