您好,登錄后才能下訂單哦!
TCP四種定時器
重傳計時器、堅持計時器、保活計時器、時間等待計時器
重傳計時器:
在TCP發送報文時創建,用來確認報文是否成功發送,超過預定時間,則重新發送,設置重傳計時器之后,通常有兩種情況:
1、在計時器截止時間到達之前收到了對以發送報文的確認信號,則撤銷此計數器;
2、計時器時間到達仍未收到確認信號,則重新發送該報文,并將計時器復位。
堅持計時器:
這種計時器通常是和窗口大小有關的。
先考慮這樣一種場景:發送端由于發送速度太快,接收端的窗口大小為零,這是接收段就會發送信號告訴發送端,我現在窗口大小為零,先不要發送數據了,接收端接收到之后,暫停發送數據;一段時間之后,接收端有了新的窗口大小,這時會再向發送段發送確認信號,我現在緩沖區有空間了,并告訴了自己的窗口大小【在前面三次握手和四次揮手中可以看到,我們是不需要對確認信號再次進行確認的】。但是這里可能會出現問題的是,接收端發送的這個確認數據包可能會丟失,一旦丟失,接收端在等待著發送端發送數據,發送端在等待著接收段發來確認信號,以繼續發送數據,這就造成了死鎖。
很明顯,這種情況是由于接收端窗口大小為零之后可能導致的問題。為了避免這種情況,就有了堅持計數器的產生。當發送端收到窗口大小為0的確認信號時,就啟動了堅持計數器,如果堅持計數器的時間到達之后,還沒有收到接收端發來的確認信號,就會主動發送一個特殊的報文端,叫做探測報文。探測報文只有一個字節的數據,它有一個序號,和普通報文不同,它的序號不需要被確認。探測報文是為了提醒接收端,剛剛給我發送的窗口大小已經丟了,要重新想我發送ACK確認信號,如果接收端沒有回應,則需要重新發送一個探測報文,并將堅持計數器的時間加倍,直到增大到60s。在這之后,每隔60s就發送一個探測報文,直到窗口重新打開。
TCP規定,即使窗口大小為0,也必須接收的三種報文: 零窗口探測報文段、確認報文段和攜帶緊急數據的報文段。
保活計時器:
用來防止兩個TCP之間的連接出現長時期的空閑。
當client打開了server的連接,傳送了很短時間的數據之后,就保持靜默,可能會因為各種原因導致,但現在它確實處于了空閑狀態。如果由于client出現故障,那么這個連接就一直處于打開狀態。
為了避免這種情況,引入了保活計時器。每當server收到了client發來的信息,就將計時器清零。如果server超過了保活計時器的時間仍沒有收到任何消息,就會向client發送探測報文段,若發送了10個探測報文段之后仍沒有反應,則認為client故障,server主動斷開連接。
時間等待計時器:
連接終止期間使用【TIME_WAIT】。
首先認識一個概念,MSL,報文最大生存時間。任何報文在網絡上超過MSL之后,將被直接丟棄。
在TCP第三次揮手期間,客戶端收到了服務器發來的FIN報文,之后客戶端啟動了TIME_WAIT計時器,時間設置為2MSL,并發送最后一個ACK。保證了2MSL時間內server可以收到最后一個ACK確認信號,同時保證了在之前發送的報文不會在連接關閉之后再次騷擾server,因為網絡中的數據包到達目的地的時間是不確定的。
重傳計時器 通常設置為 60s
堅持計時器 門限值60s
保活計時器 通常設置為2小時
時間等待計時器 通常設置為2MSL
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。