-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
安卓tcp擁塞算法哪個(gè)好(tcp擁塞算法cubic reno)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于安卓tcp擁塞算法哪個(gè)好的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、tcp擁塞控制算法包括
擁塞控制的算法有:慢開(kāi)始、擁塞避免、快重傳、快恢復(fù)。
慢開(kāi)始和擁塞避免發(fā)送方維持一個(gè)擁塞窗口的狀態(tài)變量,其大小取決于網(wǎng)絡(luò)的擁塞程度,動(dòng)態(tài)地變化,而發(fā)送窗口一般取擁塞窗口和對(duì)方給出的接收窗口之間的最小值。慢開(kāi)始算法的核心是從小到大逐漸增大擁塞窗口的數(shù)值。
二、計(jì)算機(jī)網(wǎng)絡(luò)與通信中常見(jiàn)的tcp擁塞算法有幾種
介紹TCP協(xié)議的擁塞控制算法:慢啟動(dòng)、擁塞避免、快重傳和快恢復(fù)等。給出了使用OPNET仿真建模的方法,直觀地演示了擁塞控制算法的運(yùn)行過(guò)程,對(duì)結(jié)果進(jìn)行分析。從方法學(xué)的角度看,這些對(duì)于研究、開(kāi)發(fā)和教學(xué)均有一定的指導(dǎo)意義和參考價(jià)值。
0引言在某段時(shí)間內(nèi),網(wǎng)絡(luò)中要求傳輸過(guò)多的分組時(shí),網(wǎng)絡(luò)的性能開(kāi)始下降,這種情況即稱為擁塞。簡(jiǎn)單的說(shuō)就是當(dāng)用戶對(duì)網(wǎng)絡(luò)資源的需求超過(guò)了網(wǎng)絡(luò)能提供的可用資源時(shí)的一種狀態(tài),即對(duì)資源的需求的總和在于系統(tǒng)可用資源。單純地增加網(wǎng)絡(luò)資源并不能解決擁塞問(wèn)題,是這因?yàn)閾砣旧硎且?
三、TCP Congestion Control
rfc5681 詳細(xì)說(shuō)明了TCP的四個(gè)擁塞控制算法:慢啟動(dòng)、擁塞避免、快速重傳和快速恢復(fù)。
或者,利用選擇性確認(rèn) (SACK) 的 TCP 可以利用 SACK 信息來(lái)確定何時(shí)傳入的ACK是“重復(fù)”。
慢啟動(dòng)和擁塞避免算法在TCP發(fā)送端使用,用于控制進(jìn)入網(wǎng)絡(luò)的數(shù)據(jù)量。
為了實(shí)現(xiàn)這兩個(gè)算法,在TCP的per-connection階段引入了兩個(gè)變量:
開(kāi)始向未知情況的網(wǎng)絡(luò)進(jìn)行傳輸時(shí)要求TCP 緩慢探測(cè)網(wǎng)絡(luò)以確定可用帶寬 ,從而避免不適當(dāng)?shù)谋l(fā)數(shù)據(jù)造成網(wǎng)絡(luò)擁塞。慢啟動(dòng)算法的目標(biāo):在 傳輸開(kāi)始階段(采用慢啟動(dòng)算法) 和 重傳定時(shí)器檢測(cè)到丟包之后(重啟慢啟動(dòng)算法) 避免網(wǎng)絡(luò)擁塞。另外,慢啟動(dòng)使用"ACK clock"。"ACK clock"在TCP發(fā)送端使用,被用于 慢啟動(dòng)、擁塞避免 以及 丟包恢復(fù)算法。
cwnd 的初始值 IW 根據(jù) SMSS 的大小而設(shè)置 :
ssthresh 可以設(shè)置為任意高度 ,但 ssthresh 在遇到擁塞時(shí)必須降低。將 ssthresh 設(shè)置盡可能高可以自適應(yīng)網(wǎng)絡(luò)條件,而不是一些采用任意的主機(jī)限制來(lái)決定發(fā)送速率。在某些 cases 下,例如系統(tǒng)對(duì)網(wǎng)絡(luò)路徑有充分的了解,那么更謹(jǐn)慎地設(shè)置 ssthresh 初始值可能有好處。
何時(shí)使用慢啟動(dòng)算法、擁塞避免算法
在慢啟動(dòng)期間,TCP的cwnd在每接收到一個(gè)新數(shù)據(jù)的遞增確認(rèn)的ACK后至少增長(zhǎng)SMSS個(gè)字節(jié)。當(dāng)cwnd的大小超過(guò)ssthresh后或當(dāng)觀察到擁塞后 慢啟動(dòng)結(jié)束。雖然傳統(tǒng)的 TCP 實(shí)現(xiàn)會(huì)在收到覆蓋新數(shù)據(jù)的 ACK 后精確地通過(guò) SMSS 字節(jié)增加 cwnd,但我們建議 TCP 實(shí)現(xiàn)增加 cwnd:
其中 N 是在到來(lái)的 ACK 中確認(rèn)的先前未確認(rèn)的字節(jié)數(shù)(接收端會(huì)采用累積確認(rèn)、延遲確認(rèn)等算法,因此存在先前未確認(rèn)的字節(jié)數(shù))。并且不能每個(gè)ACK都增加cwnd的大小,畢竟會(huì)存在重復(fù)的ACK。
在擁塞避免期間,TCP的cwnd在每個(gè)往返時(shí)間(RTT)增加一個(gè) full-sized segment。擁塞避免算法持續(xù)到發(fā)生擁塞。在擁塞避免期間增加 cwnd 的基本準(zhǔn)則是:
在擁塞避免期間增加 cwnd 的推薦方法是計(jì)算新數(shù)據(jù)的 ACK 已確認(rèn)的字節(jié)數(shù) (同 slow start),但不能每個(gè) RTT 觸發(fā)的 cwnd 的增長(zhǎng)不能超過(guò) SMSS bytes。當(dāng)確認(rèn)的字節(jié)數(shù)達(dá)到 cwnd,可以增長(zhǎng) SMSS bytes 。
在擁塞避免期間,TCP可以使用的另一個(gè)通用的公式是:
在每個(gè)確認(rèn)新數(shù)據(jù)的 ACK 到來(lái)時(shí)執(zhí)行此調(diào)整。該公式為每個(gè) RTT 將 cwnd 增加 1 個(gè) full-sized segment 的基本原理提供了可接受的近似值。
實(shí)現(xiàn)說(shuō)明:
同:
異:
當(dāng)TCP發(fā)送端通過(guò)重傳定時(shí)器檢測(cè)到 segment loss 且該 segment 尚未通過(guò)重傳定時(shí)器重新發(fā)送時(shí), 此時(shí) ssthresh 的值必須重新設(shè)置為不超過(guò)下列等式中給出的值:
其中,F(xiàn)lightSize 是網(wǎng)絡(luò)中未完成數(shù)據(jù)的數(shù)量。
另一方面,當(dāng)TCP發(fā)送端通過(guò)重傳定時(shí)器檢測(cè)到 segment loss 且該 segment 已經(jīng)通過(guò)重傳定時(shí)器重新發(fā)送至少一次時(shí),此時(shí) ssthresh 的值保持不變。
實(shí)現(xiàn)說(shuō)明:
此外,在超時(shí)(Retransimission Timer)時(shí),cwnd 必須設(shè)置為不超過(guò)丟失窗口 LW,LW 等于 1 個(gè) full-sized segment(無(wú)論 IW 的值如何)。 因此,在重傳 loss segment 后,TCP 發(fā)送方使用慢啟動(dòng)算法將窗口從1 個(gè) full-sized segment 增加到新的 ssthresh 值,此后再次使用擁塞避免算法。
超時(shí)后基于慢啟動(dòng)的丟失恢復(fù)(loss recovery)可能會(huì)導(dǎo)致虛假重傳,從而觸發(fā)重復(fù)確認(rèn)。 在 TCP 實(shí)現(xiàn)中,對(duì)這些重復(fù) ACK 到達(dá)的反應(yīng)差異很大。 本文檔沒(méi)有具體說(shuō)明如何處理此類確認(rèn),但可以指出這是一個(gè)可以從額外關(guān)注、實(shí)驗(yàn)和規(guī)范中受益的領(lǐng)域。
當(dāng)一個(gè)亂序的 segment 到達(dá)時(shí),TCP的接收端立即發(fā)送一個(gè)重復(fù)的 ACK 。這個(gè) ACK 的目的是通知 發(fā)送端:接收端接收到了一個(gè)亂序的 segment 以及接收端目前期待收到的序列號(hào)。從發(fā)送端的視角來(lái)看,重復(fù)的 ACK 可能會(huì)引起一些網(wǎng)絡(luò)問(wèn)題。
另外,當(dāng)TCP 的接收端接收到的 segment 填充空間中全部或部分間隙時(shí),TCP接收端應(yīng)該立即發(fā)送 ACK 。這將為發(fā)送方的超時(shí)重傳、快速重傳或高級(jí)丟失恢復(fù)算法等方法提供更及時(shí)的信息。
TCP發(fā)送端基于到來(lái)的重復(fù)ACK,使用快速重傳算法來(lái)檢測(cè)和修復(fù)丟包。
快速重傳算法 :快速重傳算法使用3個(gè)重復(fù)的ACK作為一個(gè)segment已丟失的指示,在接收到3個(gè)重復(fù)的ACK后,TCP重新傳輸看似丟失的segment,而無(wú)需等待重傳計(jì)時(shí)器的觸發(fā)。
快速恢復(fù)算法 :在快速重傳算法發(fā)送看似丟失的 segment 之后,快速恢復(fù)算法控制新數(shù)據(jù)的傳輸,直到非重復(fù)的ACK到達(dá)。
收到重復(fù)的ACK不執(zhí)行慢啟動(dòng)的原因:收到重復(fù)的ACK不能完全表明一個(gè) segment 已經(jīng)丟失,因?yàn)樵摬糠?segment 最可能已經(jīng)離開(kāi)了網(wǎng)絡(luò)(segment 在接收端的緩沖區(qū)中,不再被視作網(wǎng)絡(luò)資源)。此外,由于保留了 ACK 的時(shí)鐘(重傳定時(shí)器),TCP發(fā)送端可以繼續(xù)傳輸新的 segments 。
上面描述的 TCP 擁塞控制算法的一個(gè)已知問(wèn)題是:TCP在空閑一段相對(duì)長(zhǎng)的時(shí)間之后,TCP將被允許傳輸潛在的不適當(dāng)?shù)牧髁客话l(fā)。
[Jac88] 建議 TCP 在相對(duì)較長(zhǎng)的空閑期后使用慢啟動(dòng)來(lái)重新啟動(dòng)傳輸。 慢啟動(dòng)用于重新啟動(dòng) ACK 時(shí)鐘,就像它在傳輸開(kāi)始時(shí)所做的那樣。 該機(jī)制已以下列方式廣泛部署。 當(dāng) TCP 在超過(guò)一次重傳超時(shí)時(shí)長(zhǎng)后仍未收到一個(gè) segment 時(shí),cwnd 會(huì)在傳輸開(kāi)始前減小到重新啟動(dòng)窗口 (RW) 的值。
出于本標(biāo)準(zhǔn)的目的,我們定義RW = min(IW,cwnd)。
因此,如果 TCP 在超過(guò)重傳超時(shí)的時(shí)間間隔內(nèi)沒(méi)有發(fā)送數(shù)據(jù),則 TCP 應(yīng)該在開(kāi)始傳輸之前將 cwnd 設(shè)置為不超過(guò) RW。
[RFC112] 提出的 延遲應(yīng)答算法 可以應(yīng)用在TCP的接收端。當(dāng)然在采用 延遲應(yīng)答 時(shí),TCP的接收端不必過(guò)度延遲應(yīng)答。
延遲應(yīng)答的算法:
在某些情況下,發(fā)送方和接收方可能無(wú)法就什么構(gòu)成 full-sized segment 達(dá)成一致。 如果每次從發(fā)送方接收到 2*RMSS 字節(jié)的新數(shù)據(jù)時(shí)至少發(fā)送一個(gè) ACK,則認(rèn)為實(shí)現(xiàn)符合此要求,其中 RMSS 是接收方指定給發(fā)送方的最大段大?。ɑ蚰J(rèn)值 536 字節(jié),根據(jù) [RFC1122],如果接收方在連接建立期間未指定 MSS 選項(xiàng))。
當(dāng)檢測(cè)到數(shù)據(jù)窗口中的第一次丟失時(shí),ssthresh 必須設(shè)置為不超過(guò)等式 給出的值。 其次,在修復(fù)新的數(shù)據(jù)窗口中的所有 lost segments 之前,每個(gè) RTT 中傳輸?shù)膕egments 必須不超過(guò)檢測(cè)到丟失時(shí)未完成的segment的數(shù)量的一半。 最后,在給定的段窗口中的所有損失
最后,在給定的段窗口中的所有丟失都已成功重傳后,cwnd 必須設(shè)置為不超過(guò) ssthresh,并且必須使用擁塞避免來(lái)進(jìn)一步增加 cwnd。 在兩個(gè)連續(xù)的數(shù)據(jù)窗口中丟失,或丟失重傳,應(yīng)被視為擁塞的兩個(gè)指示,因此,在這種情況下,cwnd(和 ssthresh)必須降低兩次。
我們建議 TCP 實(shí)施者采用某種形式的高級(jí)丟失恢復(fù),可以應(yīng)對(duì)數(shù)據(jù)窗口中的多個(gè)丟失。 [RFC3782] 和 [RFC3517] 中詳述的算法符合上述一般原則。 我們注意到,雖然這不是符合上述一般原則的僅有的兩種算法,但這兩種算法已經(jīng)過(guò)社區(qū)審查,目前處于標(biāo)準(zhǔn)軌道上。
本文檔要求 TCP 在重傳超時(shí)和重復(fù)確認(rèn)到達(dá)的情況下降低其發(fā)送速率。 因此,攻擊者可以通過(guò)導(dǎo)致數(shù)據(jù)包或其確認(rèn)丟失,或者通過(guò)偽造過(guò)多的重復(fù)確認(rèn)來(lái)?yè)p害 TCP 連接的性能。
為了響應(yīng) [SCWA99] 中概述的 ACK 分割攻擊,本文檔建議根據(jù)每個(gè)到達(dá)的 ACK 中新確認(rèn)的字節(jié)數(shù)而不是每個(gè)到達(dá)的 ACK 上的特定常量來(lái)增加擁塞窗口( cwnd += min (N, SMSS) ,N 是在到來(lái)的 ACK 中確認(rèn)的先前未確認(rèn)的字節(jié)數(shù))。
互聯(lián)網(wǎng)在很大程度上依賴于這些算法的正確實(shí)施,以保持網(wǎng)絡(luò)穩(wěn)定性并避免擁塞崩潰。 攻擊者可以通過(guò)偽造過(guò)多的重復(fù)確認(rèn)或?qū)π聰?shù)據(jù)的過(guò)多確認(rèn),使 TCP 端點(diǎn)在面對(duì)擁塞時(shí)做出更積極的響應(yīng)。 可以想象,這樣的攻擊可能會(huì)使網(wǎng)絡(luò)的一部分陷入擁塞崩潰。
四、在TCP的擁塞控制中,什么是慢開(kāi)始、擁塞避免、快重傳和快恢復(fù)算法
慢開(kāi)始:在主機(jī)剛剛開(kāi)始發(fā)送報(bào)文段時(shí)可先將擁塞窗口cwnd設(shè)置為一個(gè)最大報(bào)文段MSS的數(shù)值。在每收到一個(gè)對(duì)新的報(bào)文段的確認(rèn)后,將擁塞窗口增加至多一個(gè)MSS的數(shù)值。
擁塞避免:當(dāng)擁塞窗口值大于慢開(kāi)始門限時(shí),停止使用慢開(kāi)始算法而改用擁塞避免算法。
快重傳算法:發(fā)送端只要一連收到三個(gè)重復(fù)的ACK即可斷定有分組丟失了,就應(yīng)該立即重傳丟手的報(bào)文段而不必繼續(xù)等待為該報(bào)文段設(shè)置的重傳計(jì)時(shí)器的超時(shí)。
接下來(lái)執(zhí)行的不是慢啟動(dòng)算法而是擁塞避免算法。這就是快速恢復(fù)算法。.
防止擁塞的方法
(1)在傳輸層可采用:重傳策略、亂序緩存策略、確認(rèn)策略、流控制策略和確定超時(shí)策略。
(2)在網(wǎng)絡(luò)層可采用:子網(wǎng)內(nèi)部的虛電路與數(shù)據(jù)報(bào)策略、分組排隊(duì)和服務(wù)策略、分組丟棄策略、路由算法和分組生存管理。
(3)在數(shù)據(jù)鏈路層可采用:重傳策略、亂序緩存策略、確認(rèn)策略和流控制策略。
以上就是關(guān)于安卓tcp擁塞算法哪個(gè)好相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
安卓微信恢復(fù)聊天記錄(微信恢復(fù)某個(gè)人全部聊天記錄)
暢談景觀設(shè)計(jì)的理解(暢談景觀設(shè)計(jì)的理解和看法)
品牌打造的思路與方法(品牌建設(shè)的五個(gè)要素)