TCP中往返時間的估計與超時

往返時間的估計與超時

  TCP採用超時/重傳機制來處理報文段的丟失問題。儘管這在概念上面很簡單,可是在實際中還
是會產生不少微妙的問題。最明顯仍是超時時間間隔的設置。很顯然,這個時間間隔確定會大於RTT
時間,可是具體爲多大呢?如何估計最開始的往返時間呢?下面將介紹這些問題的一些解決辦法。網絡

估計往返時間

  報文段的樣本RTT(表示爲SampleRTT)爲某報文段發出到對該報文段的確認被收到之間的時間
量大多數TCP的實現僅在某個時刻作一次SampleRTT測量,而不是爲每一個報文段測量一個SampleRTT。
  也就是說,在任什麼時候刻,僅爲一個已發送可是目前還沒有被確認的報文段估計SampleRTT,從而產生
一個接近每一個RTT的新SampleRTT值。

  另外,TCP毫不爲被重傳的報文計算SampleRTT;它僅爲傳輸一次的報文段測量SampleRTT。學習

  因爲路由器的擁塞和端系統負載的變化,這些報文段的SampleRTT是波動的,因此給定的任何
SampleRTT都是非典型的。所以要取得典型的RTT,就要對SampleRTT進行加權取值。計算機網絡

EstimatedRTT = (1-α)*EstimatedRTT + α*SampleRTT

  [RFC 6298]中給出α的參考值爲0.125
  對於最近的樣本賦予較大的權值,是由於越近的樣本越能反應網絡當前的擁塞情況。
  從統計學觀點講,這種平均被稱爲指數加權移動平均(EWMA)code

  除估算RTT外,測量RTT變化也是頗有用的!
  [RFC 6298]定義了RTT誤差 DevRTT,用於估算SampleRTT偏離EstimatedRTT的程度:路由

DevRTT = (1-β)*DevRTT + β*|SampleRTT - EstimatedRTT|

  DevRTT是SampleRTT和EstimatedRTT之差的指數加權移動平均
  若是SampleRTT的波動小那麼DevRTT的波動便會小,反之亦此。
  第一次的DevRTT=1/2(SampleRTT),之後按公式來計算,推薦β爲0.25路由器

設置和管理重傳超時間隔

  超時時間間隔應該大於EstimatedRTT而且不能大於太多。超時時間間隔爲EstimatedRTT加
上一些餘量。而且在SampleRTT值波動大時,餘量較大;當波動較小時,餘量較小。所以就用
到了DevRTT。由此得出TCP重傳時間間隔計算公式:學習筆記

TimeoutInterval = EstimatedRTT + 4*DevRTT

  推薦的初始TimeoutInterval爲1秒。
  出現超時後,TimeoutInterval直接加倍
  由於這次重傳多是報文確認ACK由於網絡擁塞而延遲到達從而致使報文重傳,重傳報文
後,不久,ACK到達,會致使SampleRTT變小,進而使TimeoutInterval變小,使後面的報文出
現過早超時!

  一旦報文段收到並更新EstimatedRTT後,TimeoutInterval又使用上述公式。方法


  此文爲《計算機網絡 自頂向下方法》的學習筆記4im

相關文章
相關標籤/搜索