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