標籤:io 使用 strong 資料 問題 sp on c 工作
一、擁塞控制基本概念
在某段時間內,若對網路中某資源的需求超過了該資源所能提供的部分,網路的效能就要變壞--產生擁塞(congestion)。出現資源擁塞的條件是:
對資源需求的總和>可用資源
若網路中產生擁塞,網路的效能就要明顯變化,整個網路的輸送量將隨輸入負荷的增大而下降。
擁塞控制 vs 流量控制
1)擁塞控制索要做的事情只有一個前提,就是使網路能夠承受現有的網路負荷;
2)擁塞控制是一個全域性的過程,涉及所有的主機、所有的路由器以及與降低網路傳輸效能有關的所有因素;
3)流量控制往往指在給定的發送端和接收端之間的點對點通訊的控制;
4)流量控制所要做的就是抑制發送資料的速率,以便使接收端來得及接收;
5)擁塞控制是很難設計的,因為它是一個動態(而不是靜態)問題;
6)當前網路正朝著告訴化的方向發展,這很容易出現緩衝不夠大而造成分組的丟失。但分組的丟失是網路發生擁塞的徵兆,而不是原因;
7)在許多情況下,甚至正式擁塞控制本身成為引起網路效能惡化甚至發生死結的原因,這點應該特別引起重視。
擁塞控制又分為閉環控制與開環控制
1)開環控制就是在設計網路時事先將有關發生擁塞的因素考慮周到,力求網路在工作時不產生擁塞(感覺很難啊)
2)閉環控制是基於反饋環路的概念。屬於閉環控制的有以下幾種措施:
檢測網路系統以便檢測到擁塞在何時、何處發生;
將擁塞發生的資訊傳送到可採取行動的地方;
調整網路的運行以解決出現的問題。
二、擁塞控制的4種演算法
發送端需要維護兩個視窗:接收端視窗(由接收端將其放在TCP保溫的首部的視窗欄位通知發送端);擁塞視窗(cwnd:發送端根據自己估計的網路擁塞程度而設定的視窗值,反映了網路的當前容量)。
發送端視窗的上限值=Min(rwnd,cwnd)
note:接收方總是有足夠大的緩衝空間,因為發送視窗的大小由網路的擁塞程度來決定,也就是說可以將發送視窗等同為擁塞視窗。
慢開始演算法
步驟:
- 在主機剛剛開始發送報文段的時候可以將cwnd設定為1;
- 在每收到一個報文段確認後,將擁塞視窗加1;
- note:每收到一個隊新的報文段的確認後,將擁塞視窗加1,第二次就會收到兩個確認,第三次就會收到4個確認,所以每一個輪次的傳輸,cwnd就會翻倍。
- 用這樣的方法逐步增大發送端cwnd,可以是分總注入到網路的速率更加合理;
- 當慢開始的cwnd大小增大到規定的慢開始門限ssthresh之後,改用擁塞避免。
擁塞避免演算法
擁塞視窗改為線性增加,每次增加1。
當cwnd<ssthresh時,使用慢開始演算法;
當cwnd>ssthresh時,停止使用慢開始演算法,改用擁塞避免演算法;
當cwnd=ssthresh時,都可以;
無論是在慢開始階段,還是在擁塞避免階段,只要發送方判斷出擁塞(沒有按時收到確認),就把ssthresh設為發送視窗的一半(但不能小於2)(乘法減小),然後把cwnd設定為1,執行慢開始演算法。(這樣做的目的就是要迅速減少主機發送到網路中的分組數,是的發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完。
快重傳演算法
首先要求接收方沒收到一個時序的報文段後就立即發出重複確認,發送方只要連續收到3個重複確認後,就應當立即重傳尚未收到的報文段。
快恢複演算法
當發送單收到連續三個重複的確認時,就執行“乘法減小”演算法,把ssthresh設定為擁塞視窗的一半,但是接下去不是從頭執行慢開始演算法;
由於發送方現在認為網路很有可能沒有發生擁塞,所以現在不執行慢開始演算法,即擁塞視窗cwnd現在不設定為1,設定為新的ssthresh大小,從那個地方開始執行擁塞避免演算法。
擁塞控制基本概念