tcp四種定時器詳解

大家都知道,定時器在TCP可靠傳輸?shù)倪^程中起著舉足輕重的作用。TCP在建立連接之后可能(?;頺eep-alive定時器是可選的)會啟動四個定時器。
TCP使用四種定時器(Timer,也稱為“計時器”):
重傳計時器:Retransmission Timer
堅持計時器:Persistent Timer
?;钣嫊r器:Keeplive Timer
時間等待計時器:Time_Wait Timer。
(1)重傳計時器:Retransmission Timer
重傳定時器:為了控制丟失的報文段或丟棄的報文段,也就是對報文段確認的等待時間。當TCP發(fā)送報文段時,就創(chuàng)建這個特定報文段的重傳計時器,可能發(fā)生兩種情況:若在計時器超時之前收到對報文段的確認,則撤銷計時器;若在收到對特定報文段的確認之前計時器超時,則重傳該報文,并把計時器復位;重傳時間=2*RTT;
RTT的值應該動態(tài)計算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上當前RTT值的10%.
Karn算法:對重傳報文,在計算新的RTT時,不考慮重傳報文的RTT。因為無法推理出:發(fā)送端所收到的確認是對上一次報文段的確認還是對重傳報文段的確認。干脆不計入。
(2)堅持計時器:persistent timer
專門為對付零窗口通知而設立的。
當發(fā)送端收到零窗口的確認時,就啟動堅持計時器,當堅持計時器截止期到時,發(fā)送端TCP就發(fā)送一個特殊的報文段,叫探測報文段,這個報文段只有一個字節(jié)的數(shù)據(jù)。探測報文段有序號,但序號永遠不需要確認,甚至在計算對其他部分數(shù)據(jù)的確認時這個序號也被忽略。探測報文段提醒接收端TCP,確認已丟失,必須重傳。
堅持計時器的截止期設置為重傳時間的值,但若沒有收到從接收端來的響應,則發(fā)送另一個探測報文段,并將堅持計時器的值加倍和并復位,發(fā)送端繼續(xù)發(fā)送探測報文段,將堅持計時器的值加倍和復位,知道這個值增大到閾值為止(通常為60秒)。之后,發(fā)送端每隔60s就發(fā)送一個報文段,直到窗口重新打開為止;補充:
堅持定時器的原理是簡單的,當TCP服務器收到了客戶端的0滑動窗口報文的時候,就啟動一個定時器來計時,并在定時器溢出的時候向向客戶端查詢窗口是否已經(jīng)增大,如果得到非零的窗口就重新開始發(fā)送數(shù)據(jù),如果得到0窗口就再開一個新的定時器準備下一次查詢。通過觀察可以得知,TCP的堅持定時器使用1,2,4,8,16……64秒這樣的普通指數(shù)退避序列來作為每一次的溢出時間。
糊涂窗口綜合癥
TCP的窗口協(xié)議,會引起一種通常叫做糊涂窗口綜合癥的問題,具體表現(xiàn)為,當客戶端通告一個小的非零窗口時,服務器立刻發(fā)送小數(shù)據(jù)給客戶端并充滿其緩沖區(qū),一來二去就會讓網(wǎng)絡中充滿小TCP數(shù)據(jù)報,從而影響網(wǎng)絡利用率。對于發(fā)送方和接收端的這種糊涂行為。
再次補充:
TCP通過讓接收方指明希望從發(fā)送方接收的數(shù)據(jù)字節(jié)數(shù)(即窗口大小)來進行流量控制。如果窗口大小為 0會發(fā)生什么情況呢?這將有效地阻止發(fā)送方傳送數(shù)據(jù),直到窗口變?yōu)榉?為止。
TCP不對ACK報文段進行確認, TCP只確認那些包含有數(shù)據(jù)的ACK報文段。
如果一個確認丟失了(這個確認是”接收方“向”發(fā)送方“發(fā)送的ACK,通知”發(fā)送方“自己的窗口已經(jīng)非0了),則雙方就有可能因為等待對方而使連接終止:接收方等待接收數(shù)據(jù)(因為它已經(jīng)向發(fā)送方通告了一個非 0的窗口),而發(fā)送方在等待允許它繼續(xù)發(fā)送數(shù)據(jù)的窗口更新。為防止這種死鎖情況的發(fā)生,發(fā)送方使用一個堅持定時器 (persist timer)來周期性地向接收方查詢,以便發(fā)現(xiàn)窗口是否已增大。這些從發(fā)送方發(fā)出的報文段稱為窗口探查 (window probe)。
(3)?;钣嫊r器:keeplive timer
每當服務器收到客戶的信息,就將keeplive timer復位,超時通常設置2小時,若服務器超過2小時還沒有收到來自客戶的信息,就發(fā)送探測報文段,若發(fā)送了10個探測報文段(沒75秒發(fā)送一個)還沒收到響應,則終止連接。
補充:
?;疃〞r器更加的簡單,還記得FTP或者Http服務器都有Sesstion Time機制么?因為TCP是面向連接的,所以就會出現(xiàn)只連接不傳送數(shù)據(jù)的“半開放連接”,服務器當然要檢測到這種連接并且在某些情況下釋放這種連接,這就是?;疃〞r器的作用。其時限根據(jù)服務器的實現(xiàn)不同而不通。另外要提到的是,當其中一端如果崩潰并重新啟動的情況下,如果收到該端“前生”的保活探察,則要發(fā)送一個RST數(shù)據(jù)報文幫助另一端結束連接。
(4)時間等待計時器:Time_Wait Timer
在連接終止期使用,當TCP關閉連接時,并不認為這個連接就真正關閉了,在時間等待期間,連接還處于一種中間過度狀態(tài)。這樣就可以時重復的fin報文段在到達終點后被丟棄,這個計時器的值通常設置為一格報文段壽命期望值的兩倍。
補充:
2MSL定時器:MSL是報文段做大生存時間(Maximum Segment Lifetime),設置這個定時器有兩個目的:
其一是為了測量連接處于TIME_WAIT狀態(tài)的時間.這樣可以讓TCP再次發(fā)送最后的ACK以防止這個ACK丟失(如果丟失,另一端會重傳FIN)。
其二,為允許老的重復分節(jié)在網(wǎng)絡中消逝。具體可以解釋為,如果一個TCP連接在斷開之前有迷途分節(jié)尚未消逝,在斷開該TCP連接之后立刻重啟一個同樣的連接(雙方的IP地址和端口port相同),這時之前的迷途的老分節(jié)可能對新的新的TCP連接接收,從而造成未定義的錯誤。為了避免這種情況,TCP規(guī)定在TIME_WAIT狀態(tài),不能啟動一個連接的化身。既然TIME_WAIT狀態(tài)維持2MSL,這就保證了一個連接上的分組及其應該在 2MSL內都會消失。
以上就是關于tcp四種定時器的全部內容,謝謝閱讀,希望能幫到大家,請繼續(xù)關注腳本之家,我們會努力分享更多優(yōu)秀的文章。
相關文章
- 本軟件小巧美觀,功能多多??梢栽O置關機、休眠、待機、重啟等時間,也可設置多個強制休息時間,每個設置提前提醒時間,以便您做必要處理,譬如保存文檔,關閉應用。 休息2009-01-08
隨心語音定時器(可以語音提醒的小工具) v2.0.403 中文綠色免費版
隨心語音報時器是一款設置倒計時報時的軟件,能夠設置24小時的倒計時,幫助用戶精準計算時間,主要用于游戲.歡迎下載使用2020-05-24君揚定時器 2.1.0 可以定時關機打開網(wǎng)頁 綠色免費版
小巧的定時器,可以關閉計算機,重啟計算機,注銷用戶,運行程序,打開網(wǎng)站等。2011-06-19- 一款非常不錯的定時器,支持定時關機,重啟,設置鬧鐘.也可以支持遠程2014-02-17
- 51定時器計算器是一款簡單實用的單片機定時器工具,能夠根據(jù)定時器方式,晶振的頻率和定時時長來計算初值,極大的方便的用戶,需要的朋友可下載收藏2013-04-09
- 蕊蕊定時器是一款免費好用的電腦桌面任務定時管理軟件。軟件功能強大,支持主題切換、定時任務、簡約界面、DIY計時界面的定時器2015-03-19
- 純真定時器是一款功能非常簡單實用的手機定時工具軟件2014-04-21
- 嘉樂定時器是一款綠色的定時器軟件,小巧免費,界面清爽友好,操作簡單方便,主要功能是定時關機、重啟、休眠、注銷等2014-05-05
- 明明筆記本進入了睡眠狀態(tài),但是卻突然自動被喚醒了,其實這是win7系統(tǒng)設置了自動喚醒定時器,這是系統(tǒng)的默認設置,只要我們關閉win7喚醒定時器,這樣的情況便不會再發(fā)生了2014-06-29
- 蕊蕊定時器是一款多任務多功能的定時軟件。軟件功能強大,界面簡潔美觀,支持主題切換、定時任務、簡約界面、DIY計時界面,本軟件適合各秘書使用,定時任務提醒老板有什么2014-07-24