TCP共使用以下四種計時器,即重傳計時器、堅持計時器、保活計時器和時間等待計時器 。這幾個計時器的主要特點如下:
1、重傳計時器
當TCP發送報文段時,就創建該特定報文段的重傳計時器 。可能發生兩種情況:
(1)、若在計時器截止時間到( 通常是60秒 )之前收到了對此特定報文段的確認,則撤銷此計時器。
(2)、若在收到了對此特定報文段的確認之前計時器截止期到,則重傳此報文段,並將計時器復位。
2、堅持計時器
為了對付零窗口大小通知,TCP需要另一個計時器。假定接收TCP宣布了窗口大小為零。發送TCP就停止傳送報文段,直到接收TCP發送確認並宣布一個非零的窗口大小。但這個確認可能會丟失。我們知道在TCP中,對確認是不需要發送確認的。若確認丟失了,接收TCP並不知道,而是會認為它已經完成任務了,並等待着發送TCP接着會發送更多的報文段。但發送TCP由於沒有收到確認,就等待對方發送確認來通知窗口的大小。雙方的TCP都在永遠地等待着對方。
要打開這種死鎖,TCP為每一個連接使用一個堅持計時器。 當發送TCP收到一個窗口大小為零的確認時,就啟動堅持計時器 。 當堅持計時器期限到時,發送TCP就發送一個特殊的報文段, 叫做 探測報文段 。這個報文段只有一個字節的數據。它有一個序號,但它的序號永遠不需要確認;甚至在計算對其他部分的數據的確認時該序號也被忽略。探測報文段提醒對端:確認已丟失,必須重傳。
堅持計時器的值設置為重傳時間的數值。但是,若沒有收到從接收端來的響應,則需發送另一個探測報文段,並將堅持計時器的值加倍和復位。發送端繼續發送探測報文段,將堅持計時器設定的值加倍和復位,直到這個值增大到門限值( 通常是60秒 )為止。在這以后,發送端每隔60秒就發送一個探測報文段,直到窗口重新打開。
3、保活計時器
保活計時器使用在某些實現中,用來防止在兩個TCP之間的連接出現長時期的空閑。假定客戶打開了到服務器的連接,傳送了一些數據,然后就保持靜默了。也許這個客戶出故障了。在這種情況下,這個連接將永遠地處理打開狀態。
要解決這種問題,在大多數的實現中都是使服務器設置保活計時器。每當服務器收到客戶的信息,就將計時器復位。保活計時器 通常設置為2小時 。若服務器過了2小時還沒有收到客戶的信息,它就發送探測報文段。若發送了10個探測報文段(每一個相隔75秒)還沒有響應,就假定客戶出了故障,因而就終止該連接。
4、時間等待計時器
時間等待計時器是在連接終止期間使用的 。當TCP關閉一個連接時,它並不認為這個連接馬上就真正地關閉了。在時間等待期間中,連接還處於一種中間過渡狀態。這就可以使重復的FIN報文段(如果有的話)可以到達目的站因而可將其丟棄。這個計時器的值 通常設置為一個報文段的壽命期待值的兩倍 。