RFC2988 計算TCP的重發定時器

RFC2988 計算TCP的重發定時器傳輸控制協議(TCP)使用一個重發定時器,在缺少任何遠端的數據接收方反饋的狀況下來保障數據的傳遞。該定時器的時間間隔被稱爲RTO(重發超時)
RFC2988定義了一種標準算法,TCP的發送方須要使用該算法來計算和維護它們的重發定時器。
在某些狀況下,對於一個TCP發送方而言,採用比RFC2988所詳述的算法更加保守一點的方法(即便用更大的RTO值)可能更有利一些。然而,一個TCP不能夠採用更爲激進的方法(即RTO不能夠小於1秒)。
基本算法
要計算當前的RTO,TCP發送方須要維護兩個狀態變量,SRTT (平滑環回時間)和RTTVAR(環回時間變量)。另外,咱們假設一個時鐘間隔G秒。
計算SRTT、RTTVAR和RTO的法則以下:
(1) 在對一個收發雙方之間所發出的一個段完成迴環時間(RTT)測量以前,發送方應該將RTO設置爲3秒。
注意到有一些設施可能採用一種「心跳式」定時器,它可以產生一個介於2.5秒和3秒之間的值。所以,在該定時器毫不會在短於2.5秒的時間內超時的狀況下,做爲一個較低的2.5秒的步進也是能夠接受的,使用間隔爲G的心跳式定時器的設施,定時器的值不低於2.5 + G秒。
(2) 當完成第一個RTT測量R時,宿主機必須設置
            SRTT <— R
            RTTVAR <—R/2
            RTO <—SRTT + max (G, K*RTTVAR)
          其中K = 4。
(3) 當完成一個併發的RTT測量R'時,宿主機必須設置
            RTTVAR <—(1 - beta) * RTTVAR + beta * |SRTT - R'|
            SRTT <— (1 - alpha) * SRTT + alpha * R'
用來更新RTTVAR的SRTT的值,就是那個使用第二次分配來更新SRTT以前的SRTT值自己。就是說,更新RTTVAR和SRTT必須按照上述的順序進行計算。
上述計算應該使用alpha=1/8和beta=1/4進行計算。
在計算以後,宿主機必須更新RTO <— SRTT + max (G, K*RTTVAR)。

(4) 一旦RTO計算好,若是它小於1秒鐘,則RTO應該補充到1秒。
傳統地,TCP設施使用粗間隔時鐘來測量RTT並觸發RTO,這使得應用於RTO上的最小值很大。研究代表,須要一個很大的最小RTO值來保持TCP的保守,以免虛假重發。所以,RFC2988要求有一個很大的最小RTO值做爲保守之需,而同時認可,在將來的某個時刻,研究可能代表一個小一些的最小RTO值是可接受的,或者,是優越的。
(5) 能夠給RTO使用最大值,若是該值至少有60秒。
相關文章
相關標籤/搜索