一---導讀
TCP超時重傳時間的選擇是計算機網絡中較復雜的問題之一,但幸好前輩們都把路鋪好了,我們只需要學習並且遵循這些規則,有能力的話去進一步改正。
二---必知的一些專業術語
A--RTT( round-trip time)往返時延。代表TCP發送方從發送報文段開始,到接收到接收方發送的確認報文段的這段時間.
B--RTO(Retransmissinon Time -out)超時重傳時間。
三---重傳時間的公式和選擇
思考這樣兩個問題,如果超時重傳時間RTO設置的比往返時間RTT還要小,那么在發送方還沒收到確認之前,該數據報文段發生了不必要的重傳。多此一舉。
如果超時重傳時間RTO設置的比往返時延RTT大很多,那么網絡空閑的時間就會較大(因為在重傳時間內,不能進行其它報文段的發送),減低了網絡傳輸的效率。
通過以上兩個問題總結我們是否可以得出這樣的結論:超時重傳時間RTO的值是不是設置的比第一次往返時間RTT0的值略大就行了呢?答案是否定的,網絡速率千變萬化,受很多因素(如路由器,帶寬)的影響,可能第一次RTT0是一個值,第二次RTT1的值又是另外一個值,那么如果把RTO的值固定寫死那就行不通。
上圖表面如果RTO固定的話會造成“TCP數據報文段1”發生不必要的重傳
第二次的RTT1要大於第一次的RTT0,於是第一次的RT0的選擇值在這里就不適合了。針對這一個復雜的問題,我們不能用某次測量的值來計算超時重傳時間RTO。這時就需要借鑒中華名族的優秀傳統-折中。利用每次測量的RTT樣本,然后取一個加權平均值RTTs。
新的加權平均往返時間RTTs = (1 - a)x 舊的RTTs + a x 新的RTT樣本。(其中0 < a < 1)
如果 a很小,趨近於0,說明新的RTT樣本作用不大。
如果 a 很大,趨近於1,則說明舊的RTTs對新的RTTs的影響很小。
現在通用的a的取值為1/8,即0.125。
顯然,新的RT0的值應該要略大於RTTs的值。
RTO = RTTs + 4 x RTTd(RTTd為RTT偏差的加權平均)
RTTd1 = RTT1 / 2
新的RTTd = (1-B) x 舊的RTTd+B x |RTTs-新的RTT樣本| 。 (其中0< B<1)
B的建議取值為1/4,即0.25
從上面可以看出,新的RTT樣本的計算正確與否特別重要。
RTT的測量容易出現下面圖示的問題
解決上面問題的辦法是:報文段每重傳一次,就增大RTO的值,典型的做法是把新的RTO的值取值為舊RTO的兩倍。
四---習題與總結
超時重傳時間的問題比較復雜,但重要的是理解並記憶兩個公式,最后,以一個練習來結束總結本文,如下圖