2、2MSL計時器用於連接終止時,原因見:TCP協議的狀態和連接
3、保活計時器(keepalive timer)用於防止連接出現長時間的空閒;每當服務器收到客戶消息就把該計時器復位,如果超過時間還沒有收到消息,就發送探測報文段,定時的發N個,如果還沒有收到響應,就認爲是客戶除了故障,終止連接
4、持久計時器(persistence timer),用於對付0窗口而引起的死鎖。
當發端收到窗口爲0的消息,開啓該計時器,到了一定時間,發字節爲一的報文段去試探(試探報文段只有一個字節,且無需確認),如果沒有響應,則再發,同時將該計時器加倍和復位。到這個值到達上限爲止(一般是1分鐘),然後就每隔這個上限發一次報文到窗口重新打開。
5、重傳計時器:
(1)、重傳的兩種情況,當TCP發送一個報文段時,創建這個報文段的重傳計時器。重傳超時(RTO)
a、如果在這個時間之前,收到此報文的ACK,則撤銷此計時器
b、如果時間到,將計時器復位,並重傳報文
(2)、RTT(往返時間)的測量,用RTT(M)表示測量的RTT值,注意的是,如果測量已經開始,在此測量未結束之時,不能進行另一個測量;在計算新的RTO時候不用考慮重傳的RTT
(2)、平滑RTT(S)與偏差RTT(D),使用前後的測量值加權的結果,計算方法如下(多數實現中,a取1/8,b取1/4):
第一次測量後:RTT(S) = RTT(M), RTT(D) = RTT(M)/2;
以後每次測量後:RTT(S) = (1 - a) * RTT(S) + a * RTT(M)
RTT(D)= (1 - b) * RTT(D) + b * abs( RTT(S) - RTT(M) );
(3)、重傳超時(RTO)的計算:
最初:RTO = 初始值
每次測量後:RTO = RTT(S) + 4 * RTT(D);
(4)、發生重傳時,就將RTO加倍,RTO *= 2; 這個叫做指數退避,知道一個上限爲止。