6、擁塞控制
6.1、擁塞控制概述
擁塞:當(dāng)對網(wǎng)絡(luò)資源的需求超過了現(xiàn)有的資源的可用部分。
擁塞出現(xiàn)的原因:
1.鏈路容量不夠大,在鏈路上形成堆積,路由器一直是高負(fù)荷運(yùn)轉(zhuǎn)。
2.路由器緩存不夠大,交來的數(shù)據(jù)太多遠(yuǎn)遠(yuǎn)超過了處理的速度就會在路由器緩存形成堆積,堆不下的就丟失了。
3.處理機(jī)太慢了。
網(wǎng)絡(luò)擁塞往往是多種原因的,僅僅增加網(wǎng)絡(luò)資源有可能適得其反。比如說增大路由器的緩存但并未增加鏈路帶寬和處理機(jī)速度會導(dǎo)致排隊(duì)時(shí)間更長一旦用TCP報(bào)文傳輸那么大量的超時(shí)重傳會引發(fā)更嚴(yán)重的問題。提高處理機(jī)的速度也不行因?yàn)槟銜丫薮蟮膲毫κ┘咏o下一跳。需要耗費(fèi)大量的資源。
6.2、擁塞控制與流量控制
1.流量控制是點(diǎn)到點(diǎn)的,擁塞控制是全局性網(wǎng)絡(luò)的。
2.擁塞控制是防止過多數(shù)據(jù)注入到網(wǎng)絡(luò),控制發(fā)送速率這又與流量控制有些相似。
3.流量控制是發(fā)送緩存與接收緩存的問題,擁塞控制是網(wǎng)絡(luò)的問題。
6.3、擁塞控制的原理
1.開環(huán)控制方法:在設(shè)計(jì)網(wǎng)絡(luò)時(shí)考慮發(fā)生擁塞的因素,力求網(wǎng)絡(luò)不發(fā)生擁塞。
2.閉環(huán)控制方法:
基于反饋環(huán)路的概念:
?檢測網(wǎng)絡(luò)系統(tǒng)以便檢測到擁塞在何時(shí)何地發(fā)生;
?將擁塞發(fā)生的信息傳送到可采取行動的地方;
?調(diào)整網(wǎng)絡(luò)系統(tǒng)的運(yùn)行已解決出現(xiàn)的問題。
6.4、擁塞出現(xiàn)的指標(biāo)
1.由于緩沖區(qū)不夠而造成的分組丟失的百分?jǐn)?shù)。
2.平均隊(duì)列長度。
3.超時(shí)重傳的分組數(shù)。
4.平均分組時(shí)延。
5.平均分組時(shí)延標(biāo)準(zhǔn)差。
一旦檢測到了擁塞會向源站發(fā)送擁塞信息。
6.5、擁塞通知的傳遞
IP中tos字段00表示不支持ECN傳輸,01或10表示支持ECN傳輸,11表示產(chǎn)生擁塞。接收端知道產(chǎn)生擁塞后將TCP報(bào)文首部中的ECE置為1告訴源端減小發(fā)送速率,源端降低速率后下一次發(fā)送報(bào)文TCP中的CWR置為1降低擁塞窗口(發(fā)送窗口是受對方接收窗口和擁塞窗口控制的)。
6.6、TCP擁塞控制方法
TCP采用基于窗口的方法進(jìn)行擁塞控制,該方法屬于閉環(huán)控制方法。TCP發(fā)送方維持一個(gè)擁塞窗口,擁塞窗口根據(jù)網(wǎng)絡(luò)的擁塞程度動態(tài)的變化。發(fā)送端利用擁塞窗口根據(jù)擁塞情況調(diào)整發(fā)送的數(shù)據(jù)量若網(wǎng)絡(luò)沒有擁塞則增大窗口讓他多發(fā)數(shù)據(jù)提高網(wǎng)絡(luò)利用率。所以真正發(fā)送窗口的值為接收窗口值和擁塞窗口值的最小值。
現(xiàn)在我們假設(shè)對方接收緩存無限大僅考慮網(wǎng)絡(luò)問題探討一下TCP的擁塞控制算法。
6.6.1、慢開始算法
目的:用來探測網(wǎng)絡(luò)的負(fù)載或者承受能力。
算法思路:由小到大逐漸增大擁塞窗口,當(dāng)自己主機(jī)剛連進(jìn)網(wǎng)絡(luò)時(shí)如果一下注入太多資源可能造成網(wǎng)絡(luò)擁塞,因此循序漸進(jìn)的探測網(wǎng)絡(luò)的擁塞程度。每收到一個(gè)確認(rèn)報(bào)文擁塞窗口就增加一個(gè)報(bào)文段。
發(fā)送方每接收到一個(gè)確認(rèn)報(bào)文就將擁塞窗口增加一個(gè)報(bào)文段。如圖所示我們可以看出發(fā)送一個(gè)收到一個(gè)確認(rèn)下次發(fā)兩個(gè),收到兩個(gè)確認(rèn)下次發(fā)2+2=4個(gè)收到4個(gè)確認(rèn)下次發(fā)4+4等于8個(gè)由此可見慢開始算法并不慢。
慢開始門限ssthresh(狀態(tài)變量)防止擁塞窗口cwnd增長過大引起網(wǎng)絡(luò)擁塞。
?當(dāng)cwnd ?當(dāng)cwnd>sshresh,停止使用慢開始算法而使用擁塞避免方法。 ?當(dāng)cwnd = sshresh時(shí)既可以使用慢開始算法也可以使用擁塞避免算法。 擁塞避免算法:每經(jīng)過一個(gè)RTT,cwnd = cwnd + 1,他的增長是線性的。 當(dāng)出現(xiàn)網(wǎng)絡(luò)擁塞時(shí),ssthresh = max(cwnd/2,2);cwnd = 1;執(zhí)行慢開始算法。 目的:迅速減少網(wǎng)絡(luò)中的分組數(shù),有利于路由器將積壓的分組處理完。 6.6.2、擁塞控制流程 ?0~1執(zhí)行慢開始算法擁塞窗口呈指數(shù)級增大。 ?1~2達(dá)到慢開始門限時(shí)執(zhí)行擁塞避免算法擁塞窗口呈線性增大。 ?2~3超時(shí)重傳可能出現(xiàn)網(wǎng)絡(luò)擁塞執(zhí)行將擁塞窗口置1重新執(zhí)行慢開始算法。 ?34同12 ?4~5中間出現(xiàn)報(bào)文丟失收到3個(gè)確認(rèn)報(bào)文執(zhí)行快重傳 6.6.3、快重傳 快重傳算法要求接收方不要等待自己發(fā)送數(shù)據(jù)時(shí)才進(jìn)行捎帶確認(rèn),而是要立即發(fā)送確認(rèn),即使收到了失序的報(bào)文也要立即發(fā)出對已收到的報(bào)文段的重復(fù)確認(rèn)。發(fā)送方只需要一連收到3個(gè)重復(fù)確認(rèn)就立即重傳這樣就不會出現(xiàn)超時(shí)。 當(dāng)我發(fā)送M3時(shí)發(fā)生了報(bào)文丟失按理說我應(yīng)該等超時(shí)之后再重新發(fā)送。但是這樣做有可能導(dǎo)致誤會這時(shí)候網(wǎng)絡(luò)可能沒有發(fā)生擁塞。當(dāng)M3丟失后接收方發(fā)送已接收報(bào)文的重復(fù)確認(rèn)即M2當(dāng)M2重復(fù)確認(rèn)3次M3立即重傳。快重傳算法可以讓發(fā)送方盡早知道報(bào)文發(fā)生了丟失。這樣就不會超時(shí),就不會讓對方誤以為發(fā)生了擁塞。 6.6.4、快恢復(fù)算法 ?當(dāng)發(fā)送端收到連續(xù)3個(gè)重復(fù)確認(rèn)時(shí),發(fā)送方認(rèn)為網(wǎng)絡(luò)很可能沒有發(fā)生阻塞,因此不執(zhí)行慢開始算法,而是執(zhí)行快恢復(fù)算法; ?ssthresh = cwnd/2; ?新?lián)砣翱赾wnd = ssthresh; ?開始執(zhí)行擁塞避免算法,使擁塞窗口緩慢地線性增大。
-
緩沖區(qū)
+關(guān)注
關(guān)注
0文章
33瀏覽量
9157 -
TCP
+關(guān)注
關(guān)注
8文章
1378瀏覽量
79225 -
UDP
+關(guān)注
關(guān)注
0文章
327瀏覽量
34018
發(fā)布評論請先 登錄
相關(guān)推薦
評論