TCP中的四種計時器

2021-07-27 23:13:59 字數 2400 閱讀 9675

什麼是計時器呢?我們可以理解成一塊鬧鐘,隔一段時間響一次,提醒tcp做特定的事情。tcp要正常工作,必須要有特定的計時器。那麼tcp中有哪些計時器呢?

tcp中有四種計時器(timer),分別為:

1.重傳計時器:retransmission timer

2.堅持計時器:persistent timer

3.保活計時器:keeplive timer

4.時間等待計時器:timer_wait timer

(1)重傳計時器

大家都知道tcp是保證資料可靠傳輸的。怎麼保證呢?帶確認的重傳機制。在滑動視窗協議中,接受視窗會在連續收到的包序列中的最後乙個包向接收端傳送乙個ack,當網路擁堵的時候,傳送端的資料報和接收端的ack包都有可能丟失。tcp為了保證資料可靠傳輸,就規定在重傳的「時間片」到了以後,如果還沒有收到對方的ack,就重發此包,以避免陷入無限等待中。

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

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

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

(2)持久計時器

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

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

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

(3)保活計時器

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

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

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

(4)時間等待計時器

時間等待計時器是在四次握手的時候使用的。四次握手的簡單過程是這樣的:假設客戶端準備中斷連線,首先向伺服器端傳送乙個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)才能真正的關閉連線。

注意:2倍的msl是什麼意思呢??為什麼是2倍的msl呢???

tcp鏈結中有乙個

2msl

的概念,也就是最大生存時間,2msl的值在一般的實現中取30s,有些實現採用2分鐘,在tcp的狀態機中的「被動關閉」:

從close_wait到last_ack中有乙個如下的規則:

當t c p執行乙個主動關閉,並發回最後乙個a ck,該連線必須在time_wait狀態停留的時間為2倍的msl。這樣可讓tcp再次傳送最後的ack以防這個ack丟失(另一端超時並重發最後的fin)。

存在這個規則導致乙個後果就是在這個2msl的時間內,該位址上的鏈結(

客戶端位址、埠和伺服器端的位址、埠)不能被使用。比如我們在建立乙個鏈結後關閉鏈結然後迅速重啟鏈結,那麼就會出現埠不可用的情況。

TCP中的四種計時器

1.重傳計時器 重傳計時器器的作用是在傳送完資料之後,就會開始計時,如果在規定時間內沒有收到傳送報文的ack就會重傳該報文。2堅持計時器 該計時器主要在擁塞控制的時候使用,就是當接收端通知傳送端視窗大小為0之後,傳送端會停止傳送資料,但是,但是當接收端有足夠快取之後,會重新通知新的視窗大小給傳送端,...

TCP中的計時器

tcp共使用以下四種計時器 重傳計時器 堅持計時器 保活計時器和時間等待計時器 這幾個計時器的主要特點如下 重傳計時器 retransmission timer 當tcp傳送報文段時,就建立該特定報文段的重傳計時器。可能發生兩種情況 1.若在計時器截止時間到之前收到了對此特定報文段的確認,則撤銷此計...

TCP中的四個計時器

當tcp傳送報文後,就對此報文設定乙個重傳計時器,此時有兩種情況 在規定時間內成功收到對方的確認,就撤銷該報文的重傳定時器 到了規定時間仍然未收到對方的確認,則認為該報文丟失,重新傳送該報文,並將計時器時間復位 我們都知道tcp中有流量控制機制,當tcp的接收端宣布接收視窗為0時,傳送端會停止傳送資...