TCP中的計時器

2021-07-27 23:11:48 字數 2687 閱讀 9623

tcp共使用以下四種計時器

:重傳計時器、堅持計時器、保活計時器和時間等待計時器

。這幾個計時器的主要特點如下:

重傳計時器(

retransmission timer

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

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

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

實現:(這個是我好不容易在網上找到的,不過也只找到這乙個)

為了有效的管理計時器 ,xinu中使用了乙個稱為delta表的資料結構

,delta表中的每個表項對應乙個將來發生的

事件,它們在表中按照發生的時間順序排列,並且為了提高更新

效率,每個表項中儲存的是與前乙個表項事件的相對

時間。在一些作業系統的系統計時器的實現上,也採用了類似的方法。

在xinu中,tcp使用了乙個程序tcptimer來管理delta表。tcptimer每0.1秒檢查一次delta表。每次檢查時,它

表項的剩餘時間和兩次檢查之間的間隔時間相比較。如果表項

的剩餘時間比兩次檢查之間的間隔時間小,說明這個表

項的計時器已經超時,tcptimer將事件中包含的訊息傳送到該訊息指定的埠,由相應的程序負責處理,並從delta表

中刪除該表項;否則,

tcptimer會更新表項中的剩餘時間。

xinu中定義了重傳事件(retransmit)。當tcp傳送乙個資料報文後,它應該將乙個重傳事件插入到delta表中,如

果發生超時,tcp

會重傳報文。但是如果對於每個傳送的報

文都設定重傳計時器的話,系統的開銷就太大了。

xinu

採用了乙個十分巧妙的方法。我們

知道tcp

報文一般是成組傳送的,於是

xinu

只針對傳送的一組報文設定乙個重傳計時

器,插入到

delta

表中。在傳送下一組報文時,如果傳送上一組報文時設定的重傳計時器還沒有

超時,則不設定新的

重傳計時器。如果在重傳計時器超時之前收到應答報文,則從

delta

表中刪掉這個連線的重傳計時器,並記錄下設定

計時器與刪除計時器之間的時間間隔,作為

rtt的測量值,然後利用

jacobson

提出的演算法計算新的重傳計時器。如果

重傳計時器超時

而沒有收到應答報文,

tcptimer

處理重傳事件,由

tcp輸出程序

tcpout

來負責處理資料報文

的重傳。

持久計時器(persistence timer)

為了對付零視窗大小通知,tcp需要另乙個計時器。假定接收tcp宣布了視窗大小為零。傳送tcp就停止傳送報文

段,直到接收tcp傳送確認並宣布乙個非零的視窗大小。但這個確認可能會丟失。我們知道在tcp中,對確認是不需要

傳送確認的。若確認丟失了,接收tcp並不知道,而是會認為它已經完成任務了,並等待著傳送tcp接著會傳送更多的

報文段。但傳送tcp由於沒有收到確認,就等待對方傳送確認來通知視窗的大小。雙方的tcp都在永遠地等待著對方。

要開啟這種死鎖,tcp為每乙個連線使用乙個堅持計時器。當傳送tcp收到乙個視窗大小為零的確認時,就啟動堅持計

時器。當堅持計時器期限到時,傳送tcp就傳送乙個特殊的報文段,叫做探測報文段。這個報文段只有乙個位元組的數

據。它有乙個序號,但它的序號永遠不需要確

認;甚至在計算對其他部分的資料的確認時該序號也被忽略。探測報文

段提醒接收tcp:確認已丟失,必須重傳。

堅持計時器的值設定為重傳時間的數值。但是,若沒有收到從接收端來的響應,則需傳送另乙個探測報文段,並將堅

持計時器的值加倍和復位。傳送端繼續傳送探測報文段,將堅持計時器設定的值加倍和復位,直到這個值增大到門限

值(通常是60秒)為止。在這以後,傳送端每隔60秒就傳送乙個探測報文段,直到視窗重新開啟。

保活計時器

(keep-alive timer)

保活計時器使用在某些實現中,用來防止在兩個tcp之間的連線出現長時期的空閒。假定客戶開啟了到伺服器的連

接,傳送了一些資料,然後就保持靜默了。也許這個客戶出故障了。在這種情況下,這個連線將永遠地處理開啟態。

要解決這種問題,在大多數的實現中都是使伺服器設定保活計時器。每當伺服器收到客戶的資訊,就將計時器復位。

超時通常設定為2小時。若伺服器過了2小時還沒有收到客戶的資訊,它就傳送探測報文段。若傳送了10個探測報文段

(每乙個相隔75秒)還沒有響應,就假定客戶出了故障,因而就終止該連線。

時間等待計時器(2msl timer)

時間等待計時器是在連線終止期間使用的。當tcp關閉乙個連線時,它並不認為這個連線馬上就真正地關閉了。

在時間等待期間中,連線還處於一種中間過渡狀態。這就可以使重複的fin報文段(如果有的話)可以到達目的站因

而可將其丟棄。這個計時器的值通常設定為乙個報文段的壽命期待值的兩倍。

往返時延rtt只是對運輸層的tcp協議才很重要,因為tcp要根據平均往返時延rtt的值來設定超時計時器的超時時間。

TCP中的四種計時器

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

TCP中的四種計時器

什麼是計時器呢?我們可以理解成一塊鬧鐘,隔一段時間響一次,提醒tcp做特定的事情。tcp要正常工作,必須要有特定的計時器。那麼tcp中有哪些計時器呢?tcp中有四種計時器 timer 分別為 1.重傳計時器 retransmission timer 2.堅持計時器 persistent timer ...

TCP中的四個計時器

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