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