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