溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

TCP中四種定時(shí)器的示例分析

發(fā)布時(shí)間:2021-07-22 15:15:31 來(lái)源:億速云 閱讀:163 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹TCP中四種定時(shí)器的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

詳解TCP的四種定時(shí)器

在TCP協(xié)議中有的時(shí)候需要定期或者按照某個(gè)算法對(duì)某個(gè)事件進(jìn)行觸發(fā),那么這個(gè)時(shí)候,TCP協(xié)議是使用定時(shí)器進(jìn)行實(shí)現(xiàn)的。在TCP中,會(huì)有四種定時(shí)器:

(1)重傳定時(shí)器
(2)堅(jiān)持定時(shí)器
(3)?;疃〞r(shí)器
(4) 時(shí)間等待計(jì)時(shí)器

這四個(gè)定時(shí)器都有各自的具體作用。

一:重傳定時(shí)器

重傳定時(shí)器:為了控制丟失的報(bào)文段或丟棄的報(bào)文段,也就是對(duì)報(bào)文段確認(rèn)的等待時(shí)間。當(dāng)TCP發(fā)送報(bào)文段時(shí),就創(chuàng)建這個(gè)特定報(bào)文段的重傳計(jì)時(shí)器,可能發(fā)生兩種情況:若在計(jì)時(shí)器超時(shí)之前收到對(duì)報(bào)文段的確認(rèn),則撤銷計(jì)時(shí)器;若在收到對(duì)特定報(bào)文段的確認(rèn)之前計(jì)時(shí)器超時(shí),則重傳該報(bào)文,并把計(jì)時(shí)器復(fù)位;
重傳時(shí)間=2*RTT;

RTT的值應(yīng)該動(dòng)態(tài)計(jì)算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上當(dāng)前RTT值的10%.

Karn算法:對(duì)重傳報(bào)文,在計(jì)算新的RTT時(shí),不考慮重傳報(bào)文的RTT。因?yàn)闊o(wú)法推理出:發(fā)送端所收到的確認(rèn)是對(duì)上一次報(bào)文段的確認(rèn)還是對(duì)重傳報(bào)文段的確認(rèn)。干脆不計(jì)入。

二:堅(jiān)持定時(shí)器

堅(jiān)持定時(shí)器是使用在一方滑動(dòng)窗口為0之后,另外一方停止傳輸數(shù)據(jù),進(jìn)入堅(jiān)持定時(shí)器的輪詢,直到滑動(dòng)窗口不再為0了。
說(shuō)說(shuō)術(shù)語(yǔ),首先是滑動(dòng)窗口,可以簡(jiǎn)單理解為緩沖區(qū)剩余空間大小。不管是寫(xiě)緩沖還是讀緩沖,一旦一方通告了自己的滑動(dòng)窗口大小,另外一方就會(huì)根據(jù)滑動(dòng)窗口大小傳遞窗口大小的數(shù)據(jù)了。但是,當(dāng)被通告,一方的滑動(dòng)窗口大小為0的時(shí)候,另外一方就會(huì)啟動(dòng)堅(jiān)持定時(shí)器,基本也是使用TCP指數(shù)退避方法,第一次1.5秒,第二次1.5x2秒,第三次1.5x4…
其次是糊涂窗口綜合癥。這個(gè)癥狀是滑動(dòng)窗口引起的。病因是發(fā)送方和接收方在一個(gè)很小的滑動(dòng)窗口的時(shí)候就開(kāi)始數(shù)據(jù)傳輸,傳輸結(jié)束之后,讀寫(xiě)的消費(fèi)速度也并沒(méi)有那么快,導(dǎo)致下次傳輸?shù)臅r(shí)候,滑動(dòng)窗口還是那么小。然后現(xiàn)象就是每次傳輸?shù)臄?shù)據(jù)都非常小。就好比每次開(kāi)出去的火車載貨量只有一節(jié)車廂,其實(shí)我們是希望能攢夠n節(jié)車廂才開(kāi)始傳輸。
糊涂窗口綜合癥有解決辦法,還不止一種,在接收方或者發(fā)送方都可以解決。大致就是如果接收方解決,那么接收方在接收窗口小于一定大小的時(shí)候,對(duì)所有的接收請(qǐng)求都返回窗口為0的包,來(lái)觸發(fā)另外一方的堅(jiān)持定時(shí)器。同樣發(fā)送方也是,在可以發(fā)送的數(shù)據(jù)大于一定窗口的時(shí)候才發(fā)送。

三:?;疃〞r(shí)器

這個(gè)就是我們經(jīng)常說(shuō)的tcp的keepalive了。實(shí)際使用場(chǎng)景是在應(yīng)用層沒(méi)有數(shù)據(jù)進(jìn)行傳輸?shù)臅r(shí)候,一定時(shí)間(tcp_keepalive_time,默認(rèn)每2個(gè)小時(shí))發(fā)送一次保持心跳的包,如果發(fā)送成功,則繼續(xù)保持端口活躍,如果沒(méi)有正常返回,則在指定次數(shù)內(nèi)(tcp_keepalive_probes,默認(rèn)是9次),指定間隔(tcp_keepalive_intvl,默認(rèn)是17s)發(fā)送心跳包。如果最后都沒(méi)有獲得正常的ACK,那么才算連接失敗。

當(dāng)然,tcp是否需要提供keepalive機(jī)制,是有爭(zhēng)議的,我們可以為每個(gè)tcp連接設(shè)置是否啟用keepalive和啟用keepalive的各個(gè)指標(biāo)設(shè)置。

四:時(shí)間等待定時(shí)器

在連接終止期使用,當(dāng)TCP關(guān)閉連接時(shí),并不認(rèn)為這個(gè)連接就真正關(guān)閉了,在時(shí)間等待期間,連接還處于一種中間過(guò)度狀態(tài)。這樣就可以時(shí)重復(fù)的fin報(bào)文段在到達(dá)終點(diǎn)后被丟棄,這個(gè)計(jì)時(shí)器的值通常設(shè)置為一格報(bào)文段壽命期望值的兩倍。

補(bǔ)充:

2MSL定時(shí)器:MSL是報(bào)文段做大生存時(shí)間(Maximum Segment Lifetime),設(shè)置這個(gè)定時(shí)器有兩個(gè)目的:

其一是為了測(cè)量連接處于TIME_WAIT狀態(tài)的時(shí)間.這樣可以讓TCP再次發(fā)送最后的ACK以防止這個(gè)ACK丟失(如果丟失,另一端會(huì)重傳FIN)。

其二,為允許老的重復(fù)分節(jié)在網(wǎng)絡(luò)中消逝。具體可以解釋為,如果一個(gè)TCP連接在斷開(kāi)之前有迷途分節(jié)尚未消逝,在斷開(kāi)該TCP連接之后立刻重啟一個(gè)同樣的連接(雙方的IP地址和端口port相同),這時(shí)之前的迷途的老分節(jié)可能對(duì)新的新的TCP連接接收,從而造成未定義的錯(cuò)誤。為了避免這種情況,TCP規(guī)定在TIME_WAIT狀態(tài),不能啟動(dòng)一個(gè)連接的化身。既然TIME_WAIT狀態(tài)維持2MSL,這就保證了一個(gè)連接上的分組及其應(yīng)該在 2MSL內(nèi)都會(huì)消失。

以上是“TCP中四種定時(shí)器的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

tcp
AI