1. 程式人生 > >TCP/IP協議-TCP的7個定時器

TCP/IP協議-TCP的7個定時器

1,連線建立(connection establishment)”定時器在傳送SYN報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。
2,
“重傳(retransmission)”定時器在TCP傳送某個資料段時設定。如果該定時器超時而對端的確認還未到達,TCP將重傳該資料段。重傳定時器的值 (即TCP等待對端確認的時間)是動態計算的,與RTT的估計值密切相關,且還取決於該報文段已被重傳的次數。
3,
“延遲ACK(delayed ACK)”定時器在TCP收到必須被確認但無需馬上發出確認的資料時設定。如果在200ms內,有資料要在該連線上傳送,延遲的ACK響應就可隨著資料一起傳送回對端,稱為捎帶確認。如果200ms後,該確認未能被捎帶出去,則定時器超時,此時需要傳送一個立即確認。
4,
“持續 (persist)”定時器在連線對端通告接收視窗為0,阻止TCP繼續傳送資料時設定。由於連線對端傳送的視窗通告不可靠(只有資料才會被確認,ACK不會被確認),允許TCP繼續傳送資料的後續視窗更新有可能丟失。因此,如果TCP有資料要傳送,但對端通告接收視窗為0,則持續定時器啟動,超時後向對端傳送 1位元組的資料,判定對端接收視窗是否已開啟。
5,
“保活(keep alive)”定時器在TCP控制塊的so_options 欄位設定了SOF_KEEPALIVE選項時生效。如果連線的連續空閒時間超過2小時,則保活定時器超時,此時應向對端傳送連線探測報文段,強迫對端響應。如果收到了期待的響應, TCP可確定對端主機工作正常,在該連線再次空閒超過 2小時之前,TCP不會再進行保活測試。如果收到的是RST復位響應, TCP可確定對端主機已重啟。如果連續若干次保活測試都未收到響應, TCP就假定對端主機已崩潰,但它無法區分是主機故障還是連線故障。
6,
FIN_WAIT_2定時器,當某個連線從FIN_WAIT_1狀態變遷到FIN_WAIT_2狀態並且不能再接收任何新資料時,FIN_WAIT_2定時器啟動,設為10分鐘。定時器超時後,重新設為75秒,第二次超時後連線被關閉。加入這個定時器的目的是為了避免如果對端一直不傳送 FIN,某個連線會永遠滯留在FIN _ WAIT_ 2狀態(假設TCP不選用半開啟功能)。
7,
TIME_WAIT定時器,一般也稱為2MSL定時器。2MSL指兩倍的MSL,即最大報文段生存時間。當連線轉移到TIME_WAIT狀態,即連線主動關閉時,定時器啟動。狀態轉換圖那一節中已經詳細說明了需要2MSL等待狀態的原因。連線進入TIME_WAIT狀態時,定時器設定為1分鐘,超時後,TCP控制塊被刪除,埠號可重新使用。