TCP的计时器
TCP在建立連接后會啟動四個定時器:
重傳計時器:Retransmission Timer?
堅持計時器:Persistent Timer?
保活計時器:Keeplive Timer?
2MSL定時器:Time_Wait Timer
1、重傳計時器?
TCP的發(fā)送方?jīng)]有在規(guī)定的時間內(nèi)收到確認就要重傳已發(fā)送的報文段。這種重傳概念很容易理解,但重傳時間的選擇卻不簡單。?
如果吧超時重傳的時間這是的太短,就會引起很多報文段不必要的重傳,是網(wǎng)絡(luò)負荷量增加。但若設(shè)置的太長,使網(wǎng)絡(luò)的空閑時間增大,降低了傳輸效率。?
TCP采用了一種自適應(yīng)算法,它記錄每一個報文段發(fā)出的時間,以及收到相應(yīng)的確認的時間,這兩個時間差就是豹紋的往返時間RTT。?
重傳時間 = 2*RTT;?
RTT是動態(tài)計算的:?
RTT=舊的 RTT*i + (1-i)*當前RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上當前RTT值的10%?
Kam算法:在計算加權(quán)平均RTTs時,只要報文重傳了,就不在采用其往返時間樣本。?
2、堅持計時器?
堅持定時器是使用在一方滑動窗口為0之后,另外一方停止傳輸數(shù)據(jù),進入堅持定時器的輪詢,直到滑動窗口不再為0了。?
首先是滑動窗口,可以簡單理解為緩沖區(qū)剩余空間大小。不管是寫緩沖還是讀緩沖,一旦一方通告了自己的滑動窗口大小,另外一方就會根據(jù)滑動窗口大小傳遞窗口大小的數(shù)據(jù)了。但是,當被通告,一方的滑動窗口大小為0的時候,另外一方就會啟動堅持定時器,基本也是使用TCP指數(shù)退避方法,第一次1.5秒,第二次1.5x2秒,第三次1.5x4…?
其次是糊涂窗口綜合癥。這個癥狀是滑動窗口引起的。病因是發(fā)送方和接收方在一個很小的滑動窗口的時候就開始數(shù)據(jù)傳輸,傳輸結(jié)束之后,讀寫的消費速度也并沒有那么快,導(dǎo)致下次傳輸?shù)臅r候,滑動窗口還是那么小。然后現(xiàn)象就是每次傳輸?shù)臄?shù)據(jù)都非常小。就好比每次開出去的火車載貨量只有一節(jié)車廂,其實我們是希望能攢夠n節(jié)車廂才開始傳輸。?
糊涂窗口綜合癥有解決辦法,還不止一種,在接收方或者發(fā)送方都可以解決。大致就是如果接收方解決,那么接收方在接收窗口小于一定大小的時候,對所有的接收請求都返回窗口為0的包,來觸發(fā)另外一方的堅持定時器。同樣發(fā)送方也是,在可以發(fā)送的數(shù)據(jù)大于一定窗口的時候才發(fā)送。
3、保活計時器?
每當服務(wù)器收到客戶的信息,就將keeplive timer復(fù)位,超時通常設(shè)置2小時,若服務(wù)器超過2小時還沒有收到來自客戶的信息,就發(fā)送探測報文段,若發(fā)送了10個探測報文段(每75秒發(fā)送一個)還沒收到響應(yīng),則終止連接。
4、2MSL定時器?
MSL是報文段最大生存時間(Maximum Segment Lifetime),設(shè)置這個定時器有兩個目的其一是為了測量連接處于TIME_WAIT狀態(tài)的時間.這樣可以讓TCP再次發(fā)送最后的ACK以防止這個ACK丟失(如果丟失,另一端會重傳FIN)。其二,為允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝。具體可以解釋為,如果一個TCP連接在斷開之前有迷途分節(jié)尚未消逝,在斷開該TCP連接之后立刻重啟一個同樣的連接(雙方的IP地址和端口port相同),這時之前的迷途的老分節(jié)可能對新的新的TCP連接接收,從而造成未定義的錯誤。為了避免這種情況,TCP規(guī)定在TIME_WAIT狀態(tài),不能啟動一個連接的化身。既然TIME_WAIT狀態(tài)維持2MSL,這就保證了一個連接上的分組及其應(yīng)該在2MSL內(nèi)都會消失。
總結(jié)
- 上一篇: 端口的分类
- 下一篇: URG与PSH的联系和区别