TCP定時器

TCP爲每條連接建立七個定時器:

1、  連接建立定時器在發送SYN報文段建立一條新連接時啓動。如果沒有在75秒內收到響 應,連接建立將中止。

當TCP實例將其狀態從LISTEN更改爲SYN_RECV的時侯就會使用這一計時器.服務端的TCP實例最初會等待一個ACK三秒鐘.如果在這一段時間沒有ACK到達,則認爲該連接請求是過期的.

 

2、  重傳定時器在TCP發送數據時設定.如果定時器已超時而對端的確認還未到達,TCP將重傳數據.重傳定時器的值(即TCP等待對端確認的時間)是動態計算的,取決於TCP爲該 連接測量的往返時間和該報文段已重傳幾次.

 

3、  延遲ACK定時器在TCP收到必須被確認但無需馬上發出確認的數據時設定.TCP等 待時間200MS後發送確認響應.如果,在這200MS內,有數據要在該連接上發送,延遲的ACK響應就可隨着數據一起發送回對端,稱爲稍帶確認.

 

 

4、  持續定時器在連接對端通告接收窗口爲0,阻止TCP繼續發送數據時設定.由於連接對端發送的窗口通告不可靠,允許TCP繼續發送數據的後續窗口更新有可能丟失.因此,如果TCP有數據要發送,但對端通告接收窗口爲0,則持續定時器啓動,超時後向對端發送1字節的數據,判定對端接收窗口是否已打開.與重傳定時器類似,持續定時器的值也是動態計算的,取決於連接的往返時間,在5秒到60秒之間取值.

 

5、  保活定時器在應用進程選取了插口的SO_KEEPALIVE選項時生效.如果連接的連續空閒時間超過2小時,保活定時器超時,向對端發送連接探測報文段,強迫對端響應.如果收到了期待的響應,TCP確定對端主機工作正常,在該連接再次空閒超過2小時之前,TCP不會再進行保活測試,.如果收到的是其它響應,TCP確定對端主要已重啓.如果連紐若干次保活測試都未收到響應,TCP就假定對端主機已崩潰,儘管它無法區分是主機幫障還是連接故障.

 

 

6、  FIN_WAIT-2定時器,當某個連接從FIN_WAIT-1狀態變遷到FIN_WAIN_2狀態,並且不能再接收任何數據時,FIN_WAIT_2定時器啓動,設爲10分鐘,定時器超時後,重新設爲75秒,第二次超時後連接被關閉,加入這個定時器的目的爲了避免如果對端一直不發送FIN,某個連接會永遠滯留在FIN_WAIT_2狀態.

 

7、  TIME_WAIT定時器,一般也稱爲2MSL定時器.2MS指兩倍MSL.當連接轉移到TIME_WAIT狀態,即連接主動關閉時,定時器啓動.連接進入TIME_WAIT狀態時,定時器設定爲1分鐘,超時後,TCP控制塊和INTERNET PCB被刪除,端口號可重新使用.

TCP包含兩個定時器函數:一個函數每200MS調用一次(快速定時器);另一個函數每500MS調用一次.延遲定時器與其它6個定時器有所不同;如果某個連接上設定了延遲ACK定時器,那麼下一次200MS定時器超時後,延遲的ACK必須被髮送.其它的定時器每500MS遞減一次,計數器減爲0時,就觸發相應的動作.

發佈了43 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章