一、擁塞控制原理
1、概念
在計算機網路中的鏈路容量(即頻寬)、交換節點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會要變壞。這種情況叫做擁塞。
2、原理
擁塞控制和流量控制密切相關,所謂擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制所要做的都有乙個前提,就是網路能夠承受現有的網路負荷。擁塞控制是乙個全域性性的過程。相反,流量控制往往是指點對點通訊量的控制,是個端對端的問題。流量控制所要做的就是抑制傳送端傳送資料的速率,以便使接收端來得及接收。
我們來看看下面這幅圖,橫座標代表提供的負載,表示單位時間內輸入給網路的分組數目。因此提供的負載也稱為輸入負載或網路負載。縱座標是吞吐量,代表單位時間內從網路輸出的分組數目。
觀察上圖我們可以發現,隨著提供的負載增大,網路吞吐量的增長速率越來越小。也就是說在還沒有達到飽和的時候,就已經有一部分的輸入分組已經丟棄了。當網路的吞吐量明顯小於理想的吞吐量時,網路就進入了輕度擁塞的狀態。更值得注意的是,當提供的負載達到某乙個數值時,網路的吞吐量反而隨提供的負載的增大而下降,這時網路就進入了擁塞狀態。當提供的負載繼續增大到某乙個數值時,網路的吞吐量就下降到0,網路已無法工作,這就是所謂的死鎖。
3、解決思路
1)開環控制
這個是在設計網路時,就實現將有關發生擁塞的因素考慮到,力求網路工作時不產生擁塞。但一旦整個系統執行起來,就不再中途進行修改了。
2)閉環控制
a)監測網路系統以便檢查到擁塞在何時、何處發生。
b) 把擁塞發生的資訊傳送到可採取行動的地方。
c) 調整整個網路系統的執行以解決出現的問題。
二、擁塞控制方法
1、慢開始
傳送方維持乙個叫做擁塞視窗的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗。以後我們就知道,如果再考慮到接收方的接受能力,那麼傳送視窗還可能小於擁塞視窗。
慢開始演算法思路,當主機開始傳送資料的時候,如果立即把大量資料位元組注入到網路,那麼就有可能引起網路擁塞,因為現在並不清楚網路的符合情況。所以我們的慢開始演算法採取有小到大逐漸增大傳送視窗,也就是說,由小到大逐漸增大擁塞視窗的數值。通常我們最開始的時候將cwnd設定為乙個最大報文段
mms的生豬。而在收到每乙個報文段確認之後,把擁塞視窗增加之多乙個
mss。這樣採取逐步增大的方法增大傳送方的擁塞視窗
cwnd
,可以讓分組注入到網路的速率更加合理。注意,這裡為了方便起見,我們用報文段的個數作為視窗大小的單位。
每經過乙個傳輸輪次,我們的cwnd就加倍。什麼是傳輸輪次呢,就是我們將
cwnd
所允許傳送的報文段都發出去,所經過的往返時間,也就是
rtt。例如我們最開允許傳送乙個報文段
m1,收到
m1確認後,我們
cwnd+1
,變成2
了,我們這次發兩個,可以收到兩個對報文段的確認,所以
cwnd+=2
,變成4
了!慢開始的慢,指的是從僅僅傳送乙個報文段開始,然後收到確認加
1,並不馬上把所有報文段都一次性全部注入網路,避免引起網路擁塞。
2、擁塞避免
為了防止擁塞視窗增長過大,我們需要設定乙個慢開始門限,也就是到這個門限之後慢開始,結束,我們選擇使用擁塞避免演算法。擁塞避免的思想是降低我們擁塞視窗cwnd的增長速度。本來按照慢開始演算法,每經過乙個傳輸輪次,我們
cwnd
本來是加倍,但是我們現在每個傳輸輪次,我們將
cwnd
僅僅+1
,這樣就限制了增長速度。
我們門限值的作用如下:
cwnd時,使用上述的慢開始演算法。
cwnd>ssthresh時,停止使用慢開始演算法,而改用擁塞避免演算法。
cwnd=ssthresh時,即可使用慢開始演算法,也可使用擁塞避免演算法。
因此在擁塞避免階段就有加法增大的特點。
我們可以看一下圖,更好的理解
當ssthresh=16時,就開始擁塞避免演算法。然後我們在
ssthresh=24
,網路出現了超時,傳送方判斷為網路擁塞,於是調整門限值
ssthresh=cwnd/2=12
,同時設定擁塞視窗
cwnd=1
,進入慢開始階段。當擁塞視窗
cwnd=ssthresh=12
時,改為執行擁塞避免演算法,擁塞視窗按線性規律增大。
3、快重傳和開恢復
這個是當網路擁塞可能已經發生的時候我們採取的解決方法。
我們可以看到當我們出現超時重傳的時候立馬把門限值降為原來的一半,又執行慢開始演算法,其實這不太合理。也許我們網路並沒有擁塞,只是有乙個報文出現了丟失,但是這樣立馬把cwnd=1,然後執行慢開始,其實降低了網路的利用率。所以我們採取的方式是快重傳和快恢復的方式。
快重傳演算法原理是可以讓傳送方盡早知道發生了個別報文段的丟失,快重傳演算法首先要求接收方不要等待自己傳送資料時才進行捎帶確認,而是要立即傳送確認,即使收到失序報文也要立即發出對已收到報文段的重複確認,以便傳送方知道接收方沒有手打m3。
我們可以看到我們m3的資料丟失,我們的接收方收到失序的資料後,還是會傳送
m2的確認,這樣我們就收到了4個
m2的確認,
3個重複了,快重傳規定,只要收到了連續三個的重複確認,就立即進行重傳,這樣就不會出現超時,傳送方也不會認為是網路擁塞了。
我們現在在看乙個圖
我們看到在第13個傳輸輪次的時候,執行了快重傳演算法,我們餓知道可能只是個別報文丟失了,所以並不執行慢開始演算法,而是將我們的快恢復演算法。傳送方調整門限值
ssthresh=cwnd/2=8,
同時設定擁塞視窗
cwnd=ssthresh=8,
並開始執行擁塞避免演算法。
請注意,也有的快恢復演算法實現時把快恢復開始的擁塞視窗cwnd值再增大一點,即等於新的
ssthresh+3*mss
。這樣做的理由是:既然傳送方收到
3個重複的確認,就表明有
3個分組已經離開了網路。這
3個分組不再消耗網路資源,而是聽力在接收方的快取中。可將現在網路中並不是堆積了分組而是減少了
3個分組。因此可以適當把擁塞視窗擴大些。
我們再來看乙個圖
從接受方對傳送方的流量控制的角度考慮,傳送方的傳送視窗一定不能超過對方給出的接收方視窗值rwnd。
傳送方視窗的上限值=min[rwnd,cwnd]
當rwnd時
,是接收方的接受能力顯示傳送方視窗的最大值。
反之,當cwnd時,則網路的擁塞程度限制傳送方視窗的最小值。也就是說,
rwnd
和cwnd
中數值較小的乙個,控制了傳送方傳送資料的速率。
TCP擁塞控制
擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...
TCP擁塞控制
計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...
TCP 擁塞控制
我們都知道 tcp 是傳輸層的協議,網路請求經過傳輸層到達網路層之後是通過 ip 包進行傳輸的。如果我們傳送方大量的 ip 包的時候,有可能我們的鏈路資源有限,那麼我們的 ip 包就有可能丟失或者被丟棄,這樣我們的請求就不是絕對安全的,那接下來我們就說一下,tcp是如何處理前面的情況的。一 什麼是網...