1. 程式人生 > 其它 >TCP RTT預估值和虛假重傳超時

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虛假超時的發生應該是必然的。