TCP的四種定時器
TCP使用四種定時器(Timer,也稱為“計時器”):
重傳計時器:Retransmission Timer
堅持計時器:Persistent Timer
保活計時器:Keeplive Timer
時間等待計時器:Time_Wait Timer。
(1)重傳計時器:
重傳定時器:為了控制丟失的報文段或丟棄的報文段,也就是對報文段確認的等待時間。當TCP傳送報文段時,就建立這個特定報文段的重傳計時器,可能發生兩種情況:若在計時器超時之前收到對報文段的確認,則撤銷計時器;若在收到對特定報文段的確認之前計時器超時,則重傳該報文,並把計時器復位;
重傳時間=2*RTT;
RTT的值應該動態計算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上當前RTT值的10%.
Karn演算法:對重傳報文,在計算新的RTT時,不考慮重傳報文的RTT。因為無法推理出:傳送端所收到的確認是對上一次報文段的確認還是對重傳報文段的確認。乾脆不計入。
(2)堅持計時器:persistent timer
專門為對付零視窗通知而設立的。
當傳送端收到零視窗的確認時,就啟動堅持計時器,當堅持計時器截止期到時,傳送端TCP就傳送一個特殊的報文段,叫探測報文段,這個報文段只有一個位元組的資料。探測報文段有序號,但序號永遠不需要確認,甚至在計算對其他部分資料的確認時這個序號也被忽略。探測報文段提醒接收端TCP,確認已丟失,必須重傳。
堅持計時器的截止期設定為重傳時間的值,但若沒有收到從接收端來的響應,則傳送另一個探測報文段,並將堅持計時器的值加倍和並復位,傳送端繼續傳送探測報文段,將堅持計時器的值加倍和復位,知道這個值增大到閾值為止(通常為60秒)。之後,傳送端每隔60s就傳送一個報文段,直到視窗重新開啟為止;
(3)保活計時器:keeplive timer
每當伺服器收到客戶的資訊,就將keeplive timer復位,超時通常設定2小時,若伺服器超過2小時還沒有收到來自客戶的資訊,就傳送探測報文段,若傳送了10個探測報文段(沒75秒傳送一個)還沒收到響應,則終止連線。
(4)時間等待計時器:Time_Wait Timer
在連線終止期使用,當TCP關閉連線時,並不認為這個連線就真正關閉了,在時間等待期間,連線還處於一種中間過度狀態。這樣就可以時重複的fin報文段在到達終點後被丟棄,這個計時器的值通常設定為一格報文段壽命期望值的兩倍。
參考文獻:《TCP/IP協議族》 Forouzan著,謝希仁譯;
相關文章
- 【網路協議】TCP中的四大定時器協議TCP定時器
- [iOS]各種定時器–最全的定時器使用iOS定時器
- iOS中的3種定時器iOS定時器
- java定時器的幾種用法Java定時器
- VC++ 控制檯程式中 四種定時器建立方法C++定時器
- 【JavaScript定時器小案例】常見的幾種定時器實現的案例JavaScript定時器
- .NET中有多少種定時器定時器
- linux下使用TCP存活(keepalive)定時器LinuxTCP定時器
- Go定時器的三種實現方式Go定時器
- Spring定時器的兩種實現方式Spring定時器
- TCP對往返時延RTT的定義?TCP
- tomcat 設定session過期時間(四種方式)TomcatSession
- 定時器以及定時器的幾個案例定時器
- js實現0ms延時定時器的幾種方式JS定時器
- 四種過濾器過濾器
- JMeter定時器種類+詳細教程舉例JMeter定時器
- Go 的定時器Go定時器
- 【GMT43智慧液晶模組】例程四:SYSTICK定時器——定時讀取觸控值定時器
- 定時器定時器
- java定時器的使用Java定時器
- 定類,定序,定距,定比四種資料型別資料型別
- 保障爬蟲穩定執行的四種方法爬蟲
- python中定義引數的四種方式Python
- iOS定時器iOS定時器
- JavaScript定時器JavaScript定時器
- js定時器JS定時器
- JavaScript 定時器JavaScript定時器
- 核心定時器定時器
- netty系列之:HashedWheelTimer一種定時器的高效實現Netty定時器
- lua定時器與定時任務的介面設計定時器
- 定時器引發的思考定時器
- iOS cell上的定時器iOS定時器
- VC中定時器的使用定時器
- Windows控制檯的定時器Windows定時器
- C++定時器的使用C++定時器
- Golang當中的定時器Golang定時器
- STM32延時函式的四種方法函式
- LOGO設計時的四種思路——資訊圖Go