一盼忌、擁塞控制的一般原理
1、產(chǎn)生擁塞的原因:在某段時(shí)間,若對網(wǎng)絡(luò)中某一資源的需求超過了該資源所能提供的可用部分目溉,網(wǎng)絡(luò)的性能就會(huì)變壞。即對資源的需求 可用資源
注意擁塞控制與流量控制的區(qū)別:擁塞控制是防止過多的數(shù)據(jù)注入網(wǎng)絡(luò)中菱农,使得網(wǎng)絡(luò)中路由器或鏈路不致過載缭付,有一個(gè)前提是,網(wǎng)絡(luò)能夠承受現(xiàn)有的網(wǎng)絡(luò)負(fù)荷循未,是一個(gè)全局性過程陷猫;流量控制是指點(diǎn)對點(diǎn)通信的控制,做的是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率的妖,便于接收端來得及接收绣檬。
2、擁塞控制是一個(gè)動(dòng)態(tài)的過程嫂粟,通常使用網(wǎng)絡(luò)負(fù)載(單位時(shí)間輸入給網(wǎng)絡(luò)的分組數(shù)量)和吞吐量(單位時(shí)間從網(wǎng)絡(luò)輸出的分組的數(shù)量)來進(jìn)行比較:
當(dāng)網(wǎng)絡(luò)負(fù)載 吞吐量娇未,網(wǎng)絡(luò)進(jìn)入擁塞,嚴(yán)重甚至?xí)a(chǎn)生死鎖星虹。
二忘蟹、TCP擁塞控制方法
主要有四種算法:慢開始飒房、擁塞避免、快重傳媚值、快恢復(fù)狠毯。
1、慢開始和擁塞避免
基于窗口的擁塞控制褥芒,在發(fā)送方維護(hù)一個(gè)擁塞窗口(cwnd)嚼松,大小等于發(fā)送窗口,通過出現(xiàn)了超時(shí)來判斷網(wǎng)絡(luò)出現(xiàn)擁塞锰扶。慢開始的思路是一開始發(fā)送方發(fā)送一個(gè)字節(jié)献酗,在收到接收方的確認(rèn),然后發(fā)送的字節(jié)數(shù)量增大一倍(也就是按照指數(shù)增長的速率)坷牛,從小到大逐步增大cwnd罕偎,直到cwnd 達(dá)到慢開始門限(ssthresh),停止慢開始算法京闰,使用擁塞避免算法颜及,擁塞避免算法思路是增長速率變?yōu)?strong>線性增長,也就是每經(jīng)過一個(gè)往返時(shí)間RTT就把發(fā)送方的cwnd加1蹂楣,所以綜上:
當(dāng)cwnd < ssthresh 俏站,使用慢開始算法;
當(dāng)cwnd = ssthresh痊土,可以使用慢開始算法肄扎,也可以使用擁塞算法;
當(dāng)cwnd > ssthresh赁酝,使用擁塞算法犯祠;
2、快重傳和快恢復(fù)
通過上面兩個(gè)算法可以使得網(wǎng)絡(luò)傳輸速率一直增大酌呆,直到出現(xiàn)超時(shí)雷则,這時(shí)候需要將cwnd重新調(diào)整到1個(gè)字節(jié)開始,使用慢開始算法肪笋,同時(shí)需要將慢開始門限ssthresh調(diào)整為cwnd(超時(shí)點(diǎn))的一半月劈,繼續(xù)執(zhí)行慢開始、擁塞避免算法藤乙。如果收到3-ACK(發(fā)送方一連接收到3個(gè)對同一個(gè)報(bào)文段的重復(fù)確認(rèn))猜揪,這種可能的情況是,并不是發(fā)生了擁塞坛梁,可能是報(bào)文丟失而姐,所以發(fā)送方不執(zhí)行慢開始算法,直接使用快重傳算法划咐,立即發(fā)送缺失的報(bào)文段拴念。同時(shí)執(zhí)行快恢復(fù)算法钧萍,將門限值(ssthresh)調(diào)整為此時(shí)cwnd的一半,并執(zhí)行擁塞避免算法政鼠。
三风瘦、總結(jié)
從宏觀上看,在連接建立開始到連接終止這個(gè)過程中公般,TCP傳輸?shù)乃俾市枰髁靠刂坪蛽砣刂仆蛏Γ餐{(diào)整發(fā)送方的窗口,所以最終發(fā)送方的發(fā)送窗口的上限值為Min(rwnd官帘,cwnd)瞬雹。而擁塞控制,主要調(diào)控發(fā)送方的網(wǎng)絡(luò)負(fù)載和吞吐量的相對大小刽虹,從慢開始(指數(shù)增長酗捌,增長率大)、擁塞避免算法(線性增長涌哲,增長率不變)一直增大速率胖缤,期間算法切換條件是慢開始門限值(ssthresh),若此增大期間出現(xiàn)超時(shí)膛虫,都需要將ssthresh = cwnd / 2, cwnd = 1(之后執(zhí)行慢開始算法);若此增大期間出現(xiàn)3-ACK钓猬,則ssthresh=cwnd / 2, cwnd = ssthresh(之后執(zhí)行擁塞避免算法)稍刀,直至到連接終止結(jié)束。
思考一個(gè)問題:ssthresh是不是從一開始設(shè)立后只會(huì)減小敞曹,不會(huì)增大账月?