tcp 是提供面向鏈結的、全雙工的、面向位元組流的可靠性服務。
tcp 提供可靠的傳輸層,它使用的方法之一就是確認從另一端收到的資料。但是資料和確認都可能會丟失,tcp 通過在傳送時設定乙個定時器來解決這個問題。如果當定時器溢位時還沒收到確認,它就會重傳該資料。
重傳計時器(retransmission timer)
為了控制丟失的報文段或丟棄的報文段,也就是對報文段確認的等待時間。
當tcp傳送報文段時,就建立這個特定報文段的重傳計時器,可能發生兩種情況:
1. 若在計時器超時之前收到對報文段的確認,則撤銷計時器;
2. 若在收到對特定報文段的確認之前計時器超時,則重傳該報文,並把計時器復位;
重傳時間=2*rtt;
rtt的值應該動態計算。常用的公式是:rtt=previous rtt*i + (1-i)*current rtt。i的值通常取90%,即新的rtt是以前的rtt值的90%加上當前rtt值的10%.
堅持計時器(persistent timer)
專門為對付零視窗通知而設立的。
當傳送端收到零視窗的確認時,就啟動堅持計時器,當堅持計時器截止期到時,傳送端tcp就傳送乙個特殊的報文段,叫探測報文段,這個報文段只有乙個位元組的資料。探測報文段有序號,但序號永遠不需要確認,甚至在計算對其他部分資料的確認時這個序號也被忽略。探測報文段提醒接收端tcp,確認已丟失,必須重傳。
堅持計時器的截止期設定為重傳時間的值,但若沒有收到從接收端來的響應,則傳送另乙個探測報文段,並將堅持計時器的值加倍和並復位,傳送端繼續傳送探測報文段,將堅持計時器的值加倍和復位,知道這個值增大到閾值為止(通常為60秒)。之後,傳送端每隔60s就傳送乙個報文段,直到視窗重新開啟為止。
保活計時器(keeplive timer)
每當伺服器收到客戶的資訊,就將keeplive timer復位,超時通常設定2小時,若伺服器超過2小時還沒有收到來自客戶的資訊,就傳送探測報文段,若傳送了10個探測報文段(沒75秒傳送乙個)還沒收到響應,則終止連線。
因為tcp是面向連線的,所以就會出現只連線不傳送資料的「半開放連線」,伺服器當然要檢測到這種連線並且在某些情況下釋放這種連線,這就是保活定時器的作用。其時限根據伺服器的實現不同而不通。另外要提到的是,當其中一端如果崩潰並重新啟動的情況下,如果收到該端「前生」的保活探察,則要傳送乙個rst資料報文幫助另一端結束連線。
時間等待計時器(time_wait timer)
在連線終止期使用,當tcp關閉連線時,並不認為這個連線就真正關閉了,在時間等待期間,連線還處於一種中間過度狀態。這樣就可以時重複的fin報文段在到達終點後被丟棄,這個計時器的值通常設定為一格報文段壽命期望值的兩倍。
常見的TCP定時器
tcp 是提供可靠的傳輸層,它使用的方法之一就是確認從另一端收到的資料。但是資料和確認都可能會丟失,tcp 通過在傳送時設定乙個定時器來解決這個問題。如果當定時器溢位時還沒收到確認,它就會重傳該資料。常見的四種tcp定時器 timer 重傳計時器 retransmission timer 堅持計時器...
TCP的定時器
在tcp協議中有的時候需要定期或者按照某個演算法對某個事件進行觸發,那麼這個時候,tcp協議是使用定時器進行實現的。在tcp中,會有四種定時器 這四個定時器都有各自的具體作用。tcp是可靠的,因此,它對於發出去的資訊,沒有得到正常ack反饋的,都會啟動乙個重傳機制。這個重傳機制使用乙個重傳定時器,當...
TCP的定時器
建立連線定時器 connection establishment timer 重傳定時器 retransmission timer 延遲應答定時器 delayed ack timer 堅持定時器 persist timer 保活定時器 keepalive timer fin wait 2定時器 fi...