TCP中常見的定時器

TCP 是提供面向鏈接的、全雙工的、面向字節流的可靠性服務。
TCP 提供可靠的傳輸層,它使用的方法之一就是確認從另一端收到的數據。但是數據和確認都可能會丟失,TCP 通過在發送時設置一個定時器來解決這個問題。如果當定時器溢出時還沒收到確認,它就會重傳該數據。

常見的四種TCP定時器(Timer):

重傳計時器(Retransmission Timer)
爲了控制丟失的報文段或丟棄的報文段,也就是對報文段確認的等待時間。

當TCP發送報文段時,就創建這個特定報文段的重傳計時器,可能發生兩種情況:
1. 若在計時器超時之前收到對報文段的確認,則撤銷計時器;
2. 若在收到對特定報文段的確認之前計時器超時,則重傳該報文,並把計時器復位;

重傳時間=2*RTT;
RTT的值應該動態計算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上當前RTT值的10%.

堅持計時器(Persistent Timer)
專門爲對付零窗口通知而設立的。

當發送端收到零窗口的確認時,就啓動堅持計時器,當堅持計時器截止期到時,發送端TCP就發送一個特殊的報文段,叫探測報文段,這個報文段只有一個字節的數據。探測報文段有序號,但序號永遠不需要確認,甚至在計算對其他部分數據的確認時這個序號也被忽略。探測報文段提醒接收端TCP,確認已丟失,必須重傳。

堅持計時器的截止期設置爲重傳時間的值,但若沒有收到從接收端來的響應,則發送另一個探測報文段,並將堅持計時器的值加倍和並復位,發送端繼續發送探測報文段,將堅持計時器的值加倍和復位,知道這個值增大到閾值爲止(通常爲60秒)。之後,發送端每隔60s就發送一個報文段,直到窗口重新打開爲止。

保活計時器(Keeplive Timer)
每當服務器收到客戶的信息,就將keeplive timer復位,超時通常設置2小時,若服務器超過2小時還沒有收到來自客戶的信息,就發送探測報文段,若發送了10個探測報文段(沒75秒發送一個)還沒收到響應,則終止連接。

因爲TCP是面向連接的,所以就會出現只連接不傳送數據的“半開放連接”,服務器當然要檢測到這種連接並且在某些情況下釋放這種連接,這就是保活定時器的作用。其時限根據服務器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啓動的情況下,如果收到該端“前生”的保活探察,則要發送一個RST數據報文幫助另一端結束連接。
時間等待計時器(Time_Wait Timer)
在連接終止期使用,當TCP關閉連接時,並不認爲這個連接就真正關閉了,在時間等待期間,連接還處於一種中間過度狀態。這樣就可以時重複的fin報文段在到達終點後被丟棄,這個計時器的值通常設置爲一格報文段壽命期望值的兩倍。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章