文章轉自:https://blog.csdn.net/weixin_43914604/article/details/105532044
學習課程:《2019王道考研計算機網絡》
學習目的:利用最省時間的方法學習考研面試中的計算機網絡。
1、什么是擁塞控制?
- 所謂擁塞控制,是指防止過多的數據注入網絡,保證網絡中的路由器或鏈路不致過載。出現擁塞時,端點並不了解到擁塞發生的細節,對通信連接的端點來說,擁塞往往表現為通信時延的增加。當然,擁塞控制和流量控制也有相似的地方,即它們都通過控制發送方發送數據的速率來達到控制效果。
2、擁塞控制與流量控制的區別
擁塞控制
是讓網絡能夠承受現有的網絡負荷,是一個全局性的過程,涉及所有的主機、所有的路由器,以及與降低網絡傳輸性能有關的所有因素。流量控制
往往是指點對點的通信量的控制,即接收端控制發送端,它所要做的是抑制發送端發送數據的速率,以便使接收端來得及接收。
例如:- 某個鏈路的傳輸速率為10Gb/s,某巨型機向一台PC以1Gb/s的速率傳送文件,顯然網絡的帶寬是足夠大的,不存在擁塞問題,但如此高的發送速率將導致PC可能來不及接收,因此必須進行
流量控制
。 - 但若有100萬台PC在此鏈路上以1Mb/s的速率傳送文件,則現在的問題就變為網絡的負載是否超過了現有網絡所能承受的范圍。就像我們上網一樣,有時候加載會很慢,提示訪問請求過多,請稍后再試,就是網絡產生了擁塞,帶寬小,一下不能支持給多個請求終端發送數據。
為了更好地對傳輸層進行擁塞控制,因特網建議標准定義了以下4種算法:慢開始、擁塞避免、快重傳、快恢復。
3、擁塞控制的4種算法
(1)慢開始和擁塞避免
①慢開始算法
- 在TCP剛剛連接好並開始發送TCP報文段時,先令擁塞窗口cwnd= 1,即一個最大報文段長度MSS。每收到一個對新報文段的確認后,將cwnd加1,即增大一個 MSS。用這樣的方法逐步增大發送方的擁塞窗口cwnd,可使分組注入網絡的速率更加合理。
例如,A向B發送數據,發送時A的擁塞窗口為2,那么A一次可以發送兩個TCP報文段,經過一個RTT后(也稱一個
傳輸輪次
),A收到B對剛才兩個報文的確認,於是把擁塞窗口調整為4,下一次發送時就可一次發送4個報文段。
- 使用慢開始算法后,每經過一個傳輸輪次(即往返時延RTT),擁塞窗口cwnd就會加倍,即cwnd的大小指數式增長。這樣,慢開始一直把擁塞窗口cwnd增大到一個規定的
慢開始門限ssthresh(閾值)
,然后改用擁塞避免算法
。
②擁塞避免算法
- 擁塞避免算法的做法如下:發送端的擁塞窗口cwnd每經過一個往返時延RTT就增加一個MSS的大小,而不是加倍,使cwnd按線性規律緩慢增長(即加法增大),而當出現一次超時(網絡擁塞)時,令慢開始門限ssthresh等於當前cwnd的一半(即乘法減小)。
- 根據cwnd的大小執行不同的算法,可歸納如下:
●當cwnd < ssthresh時,使用慢開始算法。
●當 cwnd > ssthresh時,停止使用慢開始算法而改用擁塞避免算法。
●當cwnd = ssthresh時,既可使用慢開始算法,又可使用擁塞避免算法(通常做法)。
③網絡擁塞的處理
- 網絡出現擁塞時,無論是在慢開始階段還是在擁塞避免階段,只要發送方檢測到超時事件的發生(未按時收到確認,重傳計時器超時),就要把慢開始門限ssthresh設置為出現擁塞時的發送方的cwnd值的一半(但不能小於2)。
然后把擁塞窗口cwnd重新設置為1,執行慢開始算法。這樣做的目的是迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完。 - 擁塞避免並不完全能避免擁塞。利用以上措施要完全避免網絡擁塞是不可能的。
擁塞避免是指在擁塞避免階段把擁塞窗口控制為按線性規律增長,使網絡比較不容易出現擁塞。
在慢開始和擁塞避免算法中使用了
“乘法減小”和“加法增大”方法
。
“乘法減小”
是指不論是在慢開始階段還是在擁塞避免階段,只要出現一次超時(即很可能出現了網絡擁塞),就把慢開始門限值ssthresh設置為當前擁塞窗口值的一半。網絡頻繁出現擁塞時,ssthresh 值就下降得很快,以大大減少注入網絡的分組數。“加法增大”
是指執行擁塞避免算法后,在收到對所有報文段的確認后(即經過一個 RTT),就把擁塞窗口cwnd增加一個MSS大小,使擁塞窗口緩慢增大,以防止網絡過早出現擁塞。
(2)快重傳和快恢復
快重傳和快恢復算法是對慢開始和擁塞避免算法的改進。
①快重傳
- 在TCP可靠傳輸機制中,
快重傳技術
使用了冗余ACK來檢測丟包的發生
。同樣,冗余ACK也用於網絡擁塞的檢測
(丟了包當然意味着網絡可能出現了擁塞)。快重傳並非取消重傳計時器,而是在某些情況下可更早地重傳丟失的報文段。
當發送方連續收到三個重復的ACK報文時,直接重傳對方尚未收到的報文段,而不必等待那個報文段設置的重傳計時器超時
。
②快恢復
快恢復算法
的原理如下:- 發送端收到連續三個冗余ACK (即重復確認)時,執行
“乘法減小”算法
,把慢開始門限ssthresh設置為出現擁塞時發送方cwnd的一半。 - 與慢開始(慢開始算法將擁塞窗口cwnd設置為1)的
不同之處
是,它把cwnd的值設置為慢開始門限ssthresh改變后的數值,然后開始執行擁塞避免算法(“ 加法增大”)
,使擁塞窗口緩慢地線性增大。 由於跳過了cwnd從1起始的慢開始過程,所以被稱為快恢復
。
快恢復算法的實現過程如圖所示,作為對比,虛線為慢開始的處理過程。
- 在
流量控制
中,發送方發送數據的量由接收方決定,而在擁塞控制
中,則由發送方自己通過檢測網絡狀況來決定。 - 實際上,
慢開始、擁塞避免、快重傳和快恢復
幾種算法應是同時應用在擁塞控制機制之中的 - 當發送方檢測到超時的時候,就采用慢開始和擁塞避免,
- 當發送方接收到冗余ACK時,就采用快重傳和快恢復。
注意:
發送方發送窗口的實際大小
由流量控制
和擁塞控制
共同決定。
因此,當題目中同時出現接收端窗口(rwnd) 和擁塞窗口(cwnd) 時,發送方實際的發送窗口大小是由rwnd和cwnd中較小的那一個確定的。