1. 程式人生 > >TCP/IP詳解--幾類定時器的作用(重傳 保活定時器)

TCP/IP詳解--幾類定時器的作用(重傳 保活定時器)

與資料鏈路層的ARQ協議相類似,TCP使用超時重發的重傳機制。即:TCP每傳送一個報文段,就對此報文段設定一個超時重傳計時器。此計時器設定的超時重傳時間RTO(Retransmission Time-Out)應當略大於TCP報文段的平均往返時延RTT,一般可取RTO=2RTT。但是,也可以根據具體情況人為調整RTO的值,例如可以設定此超時重傳時間RTO=90秒。當超過了規定的超時重傳時間還未收到對此TCP報文段的預期確認資訊,則必須重新傳輸此TCP報文段。注意,TCP在使用滑動視窗時,可以等效為資料鏈路層討論過的連續ARQ的情況。因此某TCP報文段超時,則只重傳此報文段。而其後已經成功傳送的報文段不在此重傳的範圍。

    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報文段(如果有的話)可以到達目的站因而可將其丟棄。這個計時器的值通常設定為一個報文段的壽命期待值的兩倍