做動(dòng)漫網(wǎng)站侵權(quán)嗎揚(yáng)州網(wǎng)絡(luò)優(yōu)化推廣
前言:
學(xué)習(xí)視頻:中科大鄭烇、楊堅(jiān)全套《計(jì)算機(jī)網(wǎng)絡(luò)(自頂向下方法 第7版,James F.Kurose,Keith W.Ross)》課程
該視頻是B站非常著名的計(jì)網(wǎng)學(xué)習(xí)視頻,但相信很多朋友和我一樣在聽(tīng)完前面的部分發(fā)現(xiàn)信息量過(guò)大,有太多無(wú)法理解的地方,在我第一次點(diǎn)開(kāi)的時(shí)候也有相同的感受,但經(jīng)過(guò)了一段時(shí)間項(xiàng)目的學(xué)習(xí),對(duì)計(jì)網(wǎng)有了更多的了解,所以我準(zhǔn)備在這次學(xué)習(xí)的時(shí)候做一些記錄并且加入一些我的理解,希望能夠幫助到大家。
往期筆記可以看專欄中的內(nèi)容😊😊😊
文章目錄
- 3.6 擁塞控制原理
- 3.6.1 什么是擁塞?
- 3.6.2 擁塞的原因 / 代價(jià)
- <1> 場(chǎng)景 1:理想情況 - 無(wú)限緩沖區(qū)
- <2> 場(chǎng)景二 - 有限緩沖區(qū)
- <3> 場(chǎng)景三 - 網(wǎng)絡(luò)死鎖的情況
- 3.6.3 兩種擁塞控制的方法
- 3.6.4 案例 - ATM ABR 擁塞控制
- 3.7 TCP 擁塞控制
- 3.7.1 擁塞控制要解決的幾個(gè)問(wèn)題
- 3.7.2 擁塞感知
- 3.7.3 速率控制方法
- 3.7.4 TCP 擁塞控制
- 3.7.5 總結(jié):TCP 擁塞控制
- 3.7.6 TCP 的公平性
3.6 擁塞控制原理
3.6.1 什么是擁塞?
💡 當(dāng) 網(wǎng)絡(luò)中的流量 超過(guò)了網(wǎng)絡(luò)資源的處理能力時(shí),就會(huì)發(fā)生擁塞,導(dǎo)致數(shù)據(jù)包丟失、延遲增加和帶寬利用率下降。
- 擁塞是指網(wǎng)絡(luò)中出現(xiàn)了過(guò)多的數(shù)據(jù)流量,導(dǎo)致網(wǎng)絡(luò)設(shè)備(如路由器、交換機(jī))無(wú)法及時(shí)處理所有傳入的數(shù)據(jù)包,進(jìn)而 導(dǎo)致緩沖隊(duì)列溢出,丟包等問(wèn)題。
3.6.2 擁塞的原因 / 代價(jià)
<1> 場(chǎng)景 1:理想情況 - 無(wú)限緩沖區(qū)
👉 這里探討的是理論化的情況
💡 假設(shè)有兩個(gè)發(fā)送端和兩個(gè)接收端,有一個(gè)路由器,其輸出緩沖區(qū)無(wú)限大,也就是不會(huì)存在丟失的情況,輸出鏈路的帶寬為
R
,且不考慮輸入時(shí)處理的情況。💡 且在 TCP 的情況下會(huì) 盡可能的讓 每個(gè)連接分到的帶寬相同,所以這里假設(shè)這兩個(gè)連接 平分 帶寬;也就是每個(gè)連接能夠達(dá)到的最大帶寬為
R / 2
。💡 且發(fā)送方 不會(huì)重傳。
有了這些先決條件,來(lái)看看連接的吞吐量和延遲:
💡 吞吐量(Throughput)是指在單位時(shí)間內(nèi)通過(guò)網(wǎng)絡(luò)或系統(tǒng)的數(shù)據(jù)量或信息量。
當(dāng)進(jìn)入的速率總和達(dá)到 R
的時(shí)候,排隊(duì)延遲會(huì)趨向無(wú)窮大,因?yàn)閹捠抢碚撋峡蛇_(dá)到的最大速率,但實(shí)際是不可能實(shí)現(xiàn)的,所以隊(duì)列會(huì)一直累計(jì),但因?yàn)殛?duì)列是無(wú)線大的,分組并不會(huì) 丟失 且發(fā)送方不會(huì)重傳,所以有效的泵出和輸入是相等的。
<2> 場(chǎng)景二 - 有限緩沖區(qū)
👉 這里討論的是偏向于現(xiàn)實(shí)的情況
💡 緩沖區(qū)不是無(wú)限的,分組會(huì)丟失
💡 發(fā)送方會(huì)因?yàn)槌瑫r(shí)而重發(fā)分組
當(dāng)泵入的數(shù)據(jù)量不斷的增大,由于延遲的增大會(huì)觸發(fā)重傳機(jī)制,這就導(dǎo)致有效的泵入逐漸減少,會(huì)包含很多重發(fā)的泵入,這也就導(dǎo)致了有效泵出的減少。
最終呈現(xiàn)出來(lái)的圖像是這樣的:
這也就導(dǎo)致了發(fā)送方需要大量的重發(fā)才能保證有效的泵入。比如說(shuō)為了達(dá)到 1.0
的泵出量,有可能需要 1.2
的泵入量,如果不加以控制的話會(huì)導(dǎo)致重發(fā)越來(lái)越多,擁塞的程度也越來(lái)越大,是一個(gè) 正反饋的情況。
<3> 場(chǎng)景三 - 網(wǎng)絡(luò)死鎖的情況
💡 四個(gè)發(fā)送端 且 存在超時(shí)重傳機(jī)制
💡 多重路徑
當(dāng)紅色的泵入增加的時(shí)候,藍(lán)色的泵入在最上方的路由中被拋棄了,因?yàn)樗皆撀酚啥嘁惶?#xff0c;到達(dá)的更慢;同理,其他的各個(gè)路由器都會(huì)由于這種情況而形成阻塞。最終導(dǎo)致網(wǎng)絡(luò)的整體泵出量為 0
,達(dá)到一個(gè)死鎖的情況。
3.6.3 兩種擁塞控制的方法
🍀 端到端的擁塞控制:沒(méi)有來(lái)自網(wǎng)絡(luò)的直接顯示其擁塞狀況的信息,系統(tǒng)根據(jù)延遲和丟失的時(shí)間來(lái)判斷網(wǎng)絡(luò)的擁塞程度,比如 TCP 的快速重發(fā),當(dāng) TCP 收到三個(gè)冗余 ACK 的時(shí)候就說(shuō)明分組可能丟失了,這時(shí)候就可以降低發(fā)送速率,這也是 TCP 采用的擁塞控制方法。
🍀 網(wǎng)絡(luò)輔助的擁塞控制:即發(fā)送端可以接收到網(wǎng)絡(luò)關(guān)于其擁塞程度的反饋,這樣做擁塞控制就會(huì)簡(jiǎn)單很多,比如下面提到的 ATM 網(wǎng)絡(luò)。
3.6.4 案例 - ATM ABR 擁塞控制
💡 ATM(Asynchronous Transfer Mode)異步傳輸模式,不是取款機(jī)(大悲)
💡 ABR(Available Bit Rate),可用比特率,是一種ATM(異步傳輸模式)網(wǎng)絡(luò)中的一種擁塞控制服務(wù)類型。這種服務(wù)會(huì)根據(jù)網(wǎng)絡(luò)的擁塞程度動(dòng)態(tài)調(diào)整數(shù)據(jù)傳輸速率,以確保網(wǎng)絡(luò)中的可用帶寬得到最佳利用,同時(shí)避免網(wǎng)絡(luò)擁塞和數(shù)據(jù)丟失。
在這種網(wǎng)絡(luò)結(jié)構(gòu)上傳輸?shù)臄?shù)據(jù)稱為 信元,信元中有一種特殊的信源為 RM(資源管理)信元,其由發(fā)送端發(fā)送,在數(shù)據(jù)信元中間隔插入。
當(dāng)經(jīng)過(guò)交換機(jī)時(shí),交換機(jī)會(huì)根據(jù)自己目前的狀況來(lái)調(diào)整資源管理信元的信息
- NI bit:no increase in rate 輕微擁塞的時(shí)候請(qǐng)求速率不要再增加
- CI bit:congestion indication 擁塞指示,表示該路由器出現(xiàn)擁塞,應(yīng)該減小到最小速率。
接收端接收到數(shù)據(jù)信元后將 RM 信元直接返回 不做任何改變;接收端收到后就可以知道這條通路中的擁塞情況。
3.7 TCP 擁塞控制
3.7.1 擁塞控制要解決的幾個(gè)問(wèn)題
🍀 端到端的擁塞控制機(jī)制:路由器不會(huì)向端主機(jī)提供擁塞的相關(guān)信息
- 這樣的好處是會(huì)降低路由器的負(fù)擔(dān),符合是網(wǎng)絡(luò)核心簡(jiǎn)單的 TCP/IP 架構(gòu)原則
- 端系統(tǒng)根據(jù)自己得到的信息來(lái)判斷是否發(fā)生擁塞從而采取動(dòng)作
? 擁塞控制需要解決的問(wèn)題
- 如何檢測(cè)是否出現(xiàn)擁塞和擁塞的程度如何?
- 在擁塞的時(shí)候發(fā)送應(yīng)該采取什么策略來(lái)降低?
- 在擁塞緩解的時(shí)候如何增加速率來(lái)保證信息交換的速度?
3.7.2 擁塞感知
💡 既然路由器不提供擁塞情況,那發(fā)送端如何得知是否產(chǎn)生擁塞呢?
🍀 當(dāng)某個(gè)段超時(shí)的時(shí)候,說(shuō)明網(wǎng)絡(luò)在傳輸過(guò)程中丟失了
- 原因一:由于路由器隊(duì)列已滿,出現(xiàn)丟棄的情況
- 原因二:傳輸過(guò)程中出現(xiàn)了亂序的情況,導(dǎo)致信息沒(méi)有通過(guò)校驗(yàn)而被丟失
- 由于第二種情況相較于第一種情況出現(xiàn)頻率低很多,所以對(duì)擁塞控制產(chǎn)生的影響不大
🍀 當(dāng)出現(xiàn)三個(gè)冗余的 ACK 的時(shí)候,也可以說(shuō)明分組被丟失
3.7.3 速率控制方法
💡 擁塞窗口(Congestion Window,簡(jiǎn)稱CongWin)是TCP擁塞控制算法中的一個(gè)重要概念,用于控制發(fā)送方發(fā)送數(shù)據(jù)的速率,以便避免網(wǎng)絡(luò)擁塞和提高網(wǎng)絡(luò)性能。
👉 擁塞窗口的大小是由 TCP 擁塞控制算法 動(dòng)態(tài) 調(diào)整的。
👉 超時(shí)的時(shí)候擁塞窗口變?yōu)?1MSS,進(jìn)入 SS 階段,然后倍增到擁塞窗口的一半后進(jìn)入 CA 階段
- 當(dāng)收到三個(gè)冗余的 ACK,擁塞窗口變?yōu)橐话朐俅芜M(jìn)入 CA 階段
👉 當(dāng)正常收到 ACK 沒(méi)有發(fā)生以上兩種情況的時(shí)候
- SS 階段(Slow Start,慢啟動(dòng)階段):每個(gè)往返延遲(RTT)成倍增加發(fā)送報(bào)文量
- CA 階段(Congestion Avoidance,擁塞避免階段):每個(gè) RTT 只會(huì)增加一個(gè)單位
💡 在這里有一個(gè)基本的概念即可,后面會(huì)詳細(xì)講述 TCP 擁塞控制的整個(gè)流程。
💡 TCP 流量控制和擁塞控制是一個(gè) 聯(lián)合的動(dòng)作,即發(fā)送時(shí)要同時(shí)滿足這兩個(gè)的要求
3.7.4 TCP 擁塞控制
🍀 慢啟動(dòng)(Slow Start)階段:
- 當(dāng)連接建立或者網(wǎng)絡(luò)從擁塞中恢復(fù)時(shí),擁塞窗口被初始化為一個(gè)較小的值,通常為一個(gè) MSS。
- 在慢啟動(dòng)階段,發(fā)送方逐漸增加擁塞窗口的大小。每當(dāng)收到一個(gè)確認(rèn) ACK 時(shí),擁塞窗口大小就會(huì)加倍,這樣擁塞窗口呈指數(shù)增長(zhǎng)。
💡 這樣做的目的是快速 探測(cè) 網(wǎng)絡(luò)的可用帶寬,以便盡快利用網(wǎng)絡(luò)資源。
🍀 擁塞避免階段:
- 當(dāng)擁塞窗口大小大于閾值的時(shí)候,就會(huì)進(jìn)入擁塞避免的階段,此時(shí)每一個(gè) RTT 擁塞窗口加
1
,而不是像慢啟動(dòng)一樣成倍的增加的增加 - 擁塞避免階段就是在臨界值上進(jìn)行試探直到出現(xiàn)了冗余 ACK 或者丟失的情況
🍀 快速重傳和超時(shí)重傳:
- 當(dāng)出現(xiàn)快速重傳的時(shí)可以推斷出網(wǎng)絡(luò)出現(xiàn)了輕微的擁塞,此時(shí)將擁塞窗口減半,繼續(xù)進(jìn)行 CA 階段
- 如果出現(xiàn)超時(shí)則說(shuō)明擁塞情況較差,此時(shí)將閾值設(shè)定為發(fā)生擁塞時(shí)窗口值的一半,同時(shí)擁塞窗口被設(shè)定為
1
MSS,進(jìn)行 SS 階段。 - 如上圖中的紅色部分就代表了發(fā)生超時(shí)進(jìn)行慢啟動(dòng),其余部分均為冗余 ACK 導(dǎo)致的擁塞窗口減半。
💡 在這個(gè)流程中影響的因素主要是閾值和超時(shí)以及冗余 ACK,搞清楚對(duì)于這三種情況如何處理即可梳理好整個(gè)流程:
- 閾值是慢啟動(dòng)和擁塞避免的分水嶺
- 超時(shí)會(huì)導(dǎo)致從慢啟動(dòng)開(kāi)始且會(huì)導(dǎo)致閾值的調(diào)整
- 冗余 ACK 會(huì)導(dǎo)致?lián)砣翱诘臏p少
💡 由于慢啟動(dòng)在整個(gè)流程中所占的時(shí)間較短,所以整體是呈現(xiàn)鋸齒狀的,即由于冗余 ACK 的作用導(dǎo)致的擁塞窗口減半。
3.7.5 總結(jié):TCP 擁塞控制
💡 名詞解釋:
- CongWin:Congestion Window,擁塞窗口
- Threshold:閾值
🍀 當(dāng) CongWin < CongWin
,發(fā)送端處于 慢啟動(dòng) 階段,窗口指數(shù)增長(zhǎng)
🍀 當(dāng) CongWin > CongWin
,發(fā)送端處于 擁塞避免 階段,窗口線性增長(zhǎng)
🍀 當(dāng)收到三個(gè)重復(fù) ACK的時(shí)候,Threshold
設(shè)置成 CongWin / 2
,CongWin = Threshold + 3
🍀 當(dāng)超時(shí)時(shí)間發(fā)生的時(shí)候,Threshold = CongWin / 2
,CongWin = 1 MSS
,進(jìn)入 SS 階段
💡 補(bǔ)充:TCP 的吞吐量:TCP 的平均吞吐量可以用窗口尺寸和 RTT 來(lái)近似的描述
假設(shè)發(fā)生丟失的時(shí)候窗口尺寸是固定的
平均窗口尺寸 = 1 / 2 W + W = 3 / 4 W 平均窗口尺寸 = 1 / 2 W + W = 3 / 4 W 平均窗口尺寸=1/2W+W=3/4W
吞吐量等于上述值除以 RTT
3.7.6 TCP 的公平性
💡 公平性目標(biāo):如果 K 個(gè) TCP 繪畫共享一個(gè)鏈路帶寬為 R 的瓶頸,每個(gè)會(huì)話分到的有效帶寬均為 R / K。
TCP 通過(guò)其擁塞控制可以實(shí)現(xiàn)相對(duì)的公平性
上圖中紫色的線代表帶寬,即鏈接一所占的帶寬加上鏈接二所占的帶寬等于總帶寬,也即出現(xiàn)擁塞的時(shí)候。
- 左下角的紅色線很明顯可以看出來(lái)當(dāng)?shù)竭_(dá)擁塞的時(shí)候 鏈接一 所占有的資源多
- 因?yàn)閾砣翱跒閷?duì)半減少,這樣就代表 占有資源多的一方減半時(shí)候損失的也就越多
- 這樣會(huì)逐漸靠近虛線,也就是連接一所占的帶寬等于連接二所占的帶寬的情況,這樣就達(dá)到了公平性