TCP協議中的定時器

2021-08-02 22:27:41 字數 2265 閱讀 5195

(1)連線建立(connection establishment)」定時器:在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。

(2)「重傳(retransmission)」定時器:在tcp傳送某個資料段時設定。在滑動視窗協議中,接受視窗會在連續收到的包序列中的最後乙個包向接收端傳送乙個ack,當網路擁堵的時候,傳送端的資料報和接收端的ack包都有可能丟失。tcp為了保證資料可靠傳輸,就規定在重傳的「時間片」到了以後,如果還沒有收到對方的ack,就重發此包,以避免陷入無限等待中。

當tcp傳送報文段時,就建立該特定報文的重傳計時器。可能發生兩種情況:

1.若在計時器截止時間到之前收到了對此特定報文段的確認,則撤銷此計時器。

2.若在收到了對此特定報文段的確認之前計時器截止時間到,則重傳此報文段,並將計時器復位。

(3)「延遲ack(delayed ack)」定時器:在tcp收到必須被確認但無需馬上發出確認的資料時設定。如果在200ms內,有資料要在該連線上傳送,延遲的ack響應就可隨著資料一起傳送回對端,稱為捎帶確認。如果200ms後,該確認未能被捎帶出去,則定時器超時,此時需要傳送乙個立即確認。

(4)「持續 (persist)」定時器:傳送端向接收端傳送資料報知道接受視窗填滿了,然後接受視窗告訴傳送方接受視窗填滿了停止傳送資料。此時的狀態稱為「零視窗」狀態,傳送端和接收端視窗大小均為0.直到接受tcp傳送確認並宣布乙個非零的視窗大小。但這個確認會丟失。我們知道tcp中,對確認是不需要傳送確認的。若確認丟失了,接受tcp並不知道,而是會認為他已經完成了任務,並等待著傳送tcp接著會傳送更多的報文段。但傳送tcp由於沒有收到確認,就等待對方傳送確認來通知視窗大小。雙方的tcp都在永遠的等待著對方。

要開啟這種死鎖,tcp為每乙個鏈結使用乙個持久計時器。當傳送tcp收到視窗大小為0的確認時,就堅持啟動計時器。當堅持計時器期限到時,傳送tcp就傳送乙個特殊的報文段,叫做探測報文。這個報文段只有乙個位元組的資料。他有乙個序號,但他的序號永遠不需要確認;甚至在計算機對其他部分的資料的確認時該序號也被忽略。探測報文段提醒接受tcp:確認已丟失,必須重傳。

持續計時器的值設定為重傳時間的數值。但是,若沒有收到從接收端來的響應,則需傳送另乙個探測報文段,並將堅持計時器的值加倍和復位。傳送端繼續傳送探測報文段,將堅持計時器設定的值加倍和復位,直到這個值增大到門限值(通常是60秒)為止。在這以後,傳送端每個60秒就傳送乙個探測報文,直到視窗重新開啟。

(5)「保活(keep alive)」定時器:保活計時器使用在某些實現中,用來防止在兩個tcp之間的連線出現長時間的空閒。假定客戶開啟了到伺服器的連線,傳送了一些資料,然後就保持靜默了。也許這個客戶出故障了。在這種情況下,這個連線將永遠的處理開啟狀態。

要解決這種問題,在大多數的實現中都是使伺服器設定保活計時器。每當伺服器收到客戶的資訊,就將計時器復位。通常設定為兩小時。若伺服器過了兩小時還沒有收到客戶的資訊,他就傳送探測報文段。若傳送了10個探測報文段(每乙個像個75秒)還沒有響應,就假定客戶除了故障,因而就終止了該連線。

這種連線的斷開當然不會使用四次揮手,而是直接硬性的中斷和客戶端的tcp連線。

(6)fin_wait_2定時器,當某個連線從fin_wait_1狀態變遷到fin_wait_2狀態並且不能再接收任何新資料時,fin_wait_2定時器啟動,設為10分鐘。定時器超時後,重新設為75秒,第二次超時後連線被關閉。加入這個定時器的目的是為了避免如果對端一直不傳送 fin,某個連線會永遠滯留在fin _ wait_ 2狀態(假設tcp不選用半開啟功能)。

(7)time_wait定時器,一般也稱為2msl定時器。時間等待計時器是在四次揮手的時候使用的。

四次揮手的簡單過程是這樣的:假設客戶端準備中斷連線,首先向伺服器端傳送乙個fin的請求關閉包(fin=final),然後由established過渡到fin-wait1狀態。伺服器收到fin包以後會傳送乙個ack,然後自己有established進入close-wait.此時通訊進入半雙工狀態,即留給伺服器乙個機會將剩餘資料傳遞給客戶端,傳遞完後伺服器傳送乙個fin+ack的包,表示我已經傳送完資料可以斷開連線了,就這便進入last_ack階段。客戶端收到以後,傳送乙個ack表示收到並同意請求,接著由fin-wait2進入time-wait階段。伺服器收到ack,結束連線。此時(即客戶端傳送完ack包之後),客戶端還要等2msl(msl=maxinum segment lifetime最長報文生存時間,2msl就是兩倍的msl)才能真正的關閉連線。

2msl的time-wait狀態的主要作用:

1.確保傳送的最後乙個ack報文段能夠到達對方,在ack報文丟失的情況下確保對方正常斷開連線。

2.防止之前與本連線有關的由於延遲等原因而導致已失效的報文在新的連線中被誤判為有效。

TCP協議中的定時器

tcp協議中的定時器 1 連線建立 connection establishment 定時器 在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。2 重傳 retransmission 定時器 在tcp傳送某個資料段時設定。在滑動視窗協議中,接受視窗會在連續收到的包序...

TCP協議中的定時器

tcp協議中的定時器 什麼是計時器呢?我們可以理解成一塊鬧鐘,隔一段時間響一次,提醒tcp做特定的事情。tcp要正常工作,必須要有特定的計時器。tcp使用四種定時器 timer,也稱為 計時器 重傳計時器 retransmission timer 堅持計時器 persistent timer 保活計...

總結TCP協議中的定時器

上回說到tcp協議保持資料傳輸可靠性的一種手段就是定時器 詳情戳小白的福音 秒懂udp協議 tcp協議。那麼本文就總結一下tcp協議中用到的定時器及其作用。tcp協議共有四種定時器 timer,也稱為 計時器 1.超時重傳計時器 retransmission timer為了控制丟失的報文段或丟棄的報...