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