即對資源的需求超過了可用的資源。若網路中許多資源同時**不足,網路的效能就要明顯變壞,整個網路的吞吐量隨之負荷地增大而下降
擁塞控制:防止過多的資料注入到網路中,這樣可用是網路中的路由器或鏈路不至過載。
擁塞控制所要做的都有乙個前提:網路能夠承受現有的網路負荷。擁塞控制是乙個全域性性的過程,設計到所有主機、路由器,以及與降低網路傳輸效能有關的所有因素
流量控制:指點對點通訊量的控制,是端到端的問題。流量控制所要做的就是抑制傳送端傳送資料的速率,以便使接收端來得及接收
擁塞控制代價:需要獲得網路內部流量分布的資訊。在實施擁塞控制之前,還需要在結點之間交換資訊和各種命令,以便選擇控制的策略和實施控制,這樣就產生了額外的開銷。
慢開始:
先探測,由小到大逐漸增大傳送視窗,也就是說,先把擁塞視窗cwnd設定為乙個最大報文段mss,收到確認後,把cwnd增多至乙個mss數值(設mss=1,則傳送過程1->2->4->8)
**為了防止擁塞視窗cwnd增長過大引起網路擁塞,還需要設定乙個慢開始門限ssthresh狀態變數(如何設定ssthresh)。慢開始門限ssthresh的用法如下:
- 當 cwnd < ssthresh 時,使用上述的慢開始演算法。
- 當 cwnd > ssthresh 時,停止使用慢開始演算法而改用擁塞避免演算法。
- 當 cwnd = ssthresh 時,既可使用慢開始演算法,也可使用擁塞控制避免演算法。
擁塞避免演算法
讓擁塞視窗緩慢地增大,即每經過乙個往返時間rtt就把傳送方的擁塞視窗cwnd+1,而不是加倍,這樣擁塞視窗按線性規律緩慢增長,比慢開始演算法緩慢很多
無論在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認),就要把慢開始門限ssthresh設定為出現擁塞時的傳送 方視窗值的一半(但不能小於2)。然後把擁塞視窗cwnd重新設定為1,執行慢開始演算法。這樣做的目的就是要迅速減少主機傳送到網路中的分組數,使得發生 擁塞的路由器有足夠時間把佇列中積壓的分組處理完畢。
1. 當tcp連線進行初始化時候,把擁塞視窗cwnd置為1。前面已說過,為了便於理解,圖中的視窗單位不使用位元組而使用報文段的個數。慢開始門限的初始值設定為16個報文段
2. 在執行慢開始演算法時,擁塞視窗 cwnd 的初始值為1。以後傳送方每收到乙個對新報文段的確認ack,就把擁塞視窗值另1,然後開始下一輪的傳輸(圖中橫座標為傳輸輪次)。因此擁塞視窗cwnd 隨著傳輸輪次按指數規律增長。當擁塞視窗cwnd增長到慢開始門限值ssthresh時(即當cwnd=16時),就改為執行擁塞控制演算法,擁塞視窗按線 性規律增長。
3. 假定擁塞視窗的數值增長到24時,網路出現超時(這很可能就是網路發生擁塞了)。更新後的ssthresh值變為12(即變為出現超時時的擁塞視窗數值 24的一半),擁塞視窗再重新設定為1,並執行慢開始演算法。當cwnd=ssthresh=12時改為執行擁塞避免演算法,擁塞視窗按線性規律增長,每經過 乙個往返時間增加乙個mss的大小。
例題:有一條tcp連線,它的最大報文段長度為4kb,tcp擁塞視窗為24kb,這時候發生超時,那麼該擁塞視窗變為了(4kb)
發生擁塞,此時如果沒有經過若干次正常的接收,則擁塞視窗從4開始增長
4->8->9->10->11…
如果經過2次正常的接收,則擁塞視窗變成了9kb,即9->10->11…
快重傳和快恢復
如果傳送方設定的超時計時器時限已到但還沒有收到確認,那麼很可能是網路出現了擁塞,致使報文段在網路中的某處被丟棄。這時,tcp馬上把擁塞視窗 cwnd 減小到1,並執行慢開始演算法,同時把慢開始門限值ssthresh減半。這是不使用快重傳的情況。
快重傳演算法首先要求接收方每收到乙個失序的報文段後就立即發出重複確認(為的是使傳送方及早知道有報文段沒有到達對方)而不要等到自己傳送資料時才進行捎帶確認。
1.接收方收到了m1和m2後發出確認,,現在假定接收方沒有收到m3但是接著收到了m4,顯然接收方不能確認m4,因為m4是收到的失序報文段,根據可靠傳輸原理,接收方可以什麼都不做,也可以在適當時機方法傳送一次對m2的確認。
2.但按照快重傳演算法的規定,接收方應及時傳送對m2的重複確認,這樣做可以讓傳送方及早知道報文段m3沒有到達接收方。傳送方接著傳送了m5和m6。
3.接收方收到這兩個報文後,也還要再次發出對m2的重複確認。這樣,傳送方共收到了 接收方的四個對m2的確認,其中後三個都是重複確認。
4.快重傳演算法還規定,傳送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段m3,而不必 繼續等待m3設定的重傳計時器到期。由於傳送方盡早重傳未被確認的報文段,因此採用快重傳後可以使整個網路吞吐量提高約20%
與快重傳配合使用的還有快恢復演算法,其過程有以下兩個要點:
當傳送方連續收到三個重複確認,就執行」乘數減小「演算法,把慢開始門限ssthresh減半,這是為了預防網路發生擁塞,接下去不執行慢開始演算法!
由於傳送方現在認為網路很可能沒有傳送擁塞,因此與慢開始不同之處是現在不執行慢開始演算法,即擁塞視窗cwnd現在不設定為1,而是把cwnd值設定為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法(「加法增大」),使擁塞視窗緩慢線性增大
下圖給出了快重傳和快恢復的示意圖,並標明了「tcp reno版本」。
區別:新的 tcp reno 版本在快重傳之後採用快恢復演算法而不是採用慢開始演算法。
也有的快重傳實現是把開始時的擁塞視窗cwnd值再增大一點,即等於 ssthresh + 3 x mss 。這樣做的理由是:既然傳送方收到三個重複的確認,就表明有三個分組已經離開了網路。這三個分組不再消耗網路 的資源而是停留在接收方的快取中。可見現在網路中並不是堆積了分組而是減少了三個分組。因此可以適當把擁塞視窗擴大了些。
在採用快恢復演算法時,慢開始演算法只是在tcp連線建立時和網路出現超時時才使用。
TCP擁塞控制
擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...
TCP擁塞控制
計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...
TCP 擁塞控制
我們都知道 tcp 是傳輸層的協議,網路請求經過傳輸層到達網路層之後是通過 ip 包進行傳輸的。如果我們傳送方大量的 ip 包的時候,有可能我們的鏈路資源有限,那麼我們的 ip 包就有可能丟失或者被丟棄,這樣我們的請求就不是絕對安全的,那接下來我們就說一下,tcp是如何處理前面的情況的。一 什麼是網...