我們都知道計算機網路中的資源是有限的。某段時間內網路中對資源的需求超過了網路中的可用部分,而導致網路效能下降的情況就是擁塞。
通俗點說就是傳送的資料報太多網路中的裝置處理不過來,而導致網路效能下降的情況。
網路中的路由器會有乙個資料報處理佇列,當路由器接收到的資料報太多而一下子處理不過來時,就會導致資料報處理佇列過長。此時,路由器就會無條件的丟棄新接收到的資料封包。
這就會導致上層的tcp協議以為資料報在網路中丟失,進而重傳這些資料報,而路由器又會丟棄這些重傳的資料報,如此以往,就會導致網路效能急劇下降,引起網路癱瘓。
因此,tcp需要控制資料報傳送的數量來避免網路效能的下降。
引用書上的答案:
擁塞視窗(cwnd)是指傳送方維護的乙個根據網路狀況動態變化的視窗。一般來說,傳送方會讓自己的傳送視窗等於擁塞視窗的大小。如果考慮到流量控制的話,傳送視窗也有可能小於擁塞視窗的大小。乙個傳輸輪次是指傳送方把自己的傳送視窗內的資料全部傳送出去並收到對最後乙個位元組的確認。
例如,a將自己的傳送視窗內的資料全部連續傳送給了b,而b收到這些資料後向a傳送了對這些資料的確認,a收到這個確認後,乙個傳輸輪次就算是完成了。
慢開始演算法中的主要方法就是有小到大逐漸增大傳送視窗。
那麼,具體是怎麼增大的呢?
簡單來說就是每個傳輸輪次後將cwnd大小加倍。
舉個例子:
首先,傳送方設定cwnd=1(為方便理解,這裡用報文段的個數作為視窗大小的單位),在收到接收方發來的確認後(也就是下個傳輸輪次),設定cwnd=2,然後將傳送視窗的資料傳送出去。在一次收到接收方發來的確認後,傳送方設定cwnd=4,再講傳送視窗中的資料傳送出去。然後再重複上面的過程。
這裡就應該清楚,慢開始演算法中的慢不是說cwnd增長的慢,而是相對一下子傳送大量資料而言,這種一次先傳送少量的資料報的方式要慢許多。
當然,cwnd的大小肯定不可能一直以這種指數的方式增長下去,要不然很快就會增長到引起網路癱瘓的程度了。
所以,經過一定時間或條件,我們就要換成擁塞避免演算法來傳送資料。
像上面所說,不能任由慢開始演算法中的cwnd任意增長,所以我們引入乙個慢開始門限(ssthresh)的閾值來控制cwnd的增長。
具體作用如下:
還有乙個問題就是這個ssthresh是怎麼設定的呢?
tcp/ip中規定無論是在慢開始階段還是在擁塞避免階段,只要發現網路**現擁塞(沒有按時收到確認),就要把ssthresh設定為此時傳送視窗的一半大小(不能小於2)。
擁塞避免演算法也是逐漸的增大cwnd的大小,只是採用的是線性增長而不是像慢開始演算法那樣的指數增長。
具體來說就是每個傳輸輪次後將cwnd的大小加一(加法增大),如果發現出現網路擁塞的話就按照上面的方法重新設定ssthresh的大小(乘法減小)並從cwnd=1開始重新執行慢開始演算法。
(**於網路)
前面複習到過,tcp的可靠傳輸的原理就是超時重傳機制。配合上面的慢開始和擁塞避免使用就是傳送發傳送完資料後設定乙個定時器,如果在定時器時間內沒有收到對接收方發來的確認的話就去執行上述的乘法減小過程並重新開始慢開始演算法。
而快重傳則是允許傳送方再連續收到3個重複的確認後就可以開始執行乘法減小過程而不必再等待所設定的重傳計時器到時。
這就需要接收方沒收到乙個失序的報文段就立即發出重複確認以讓傳送發及早知道有報文段丟失,而不是等待自己傳送資料的時候進行捎帶確認。
快恢復演算法是與快重傳演算法配合使用的乙個演算法。
使用了快恢復演算法後與原來不同的一點是當發現網路出現擁塞並執行了乘法減小過程後,並不是設定cwnd=1並重新開始執行慢開始演算法,而是讓cwnd=乘法減小後的ssthresh並開始執行擁塞避免演算法。
因為此時傳送發能連續接收到三個重複的確認就可以認為此時網路很可能沒有發生擁塞。
使用了快重傳和快恢復的擁塞避免過程如下:
(**於網路)
傳送視窗的上限值 = min
rwnd:接收方接收視窗
cwnd:傳送方擁塞視窗
談談TCP IP 擁塞控制
最近在看 tcp ip詳解 記錄一下我對擁塞控制的理解吧。當傳送方向網路中注入大量的報文段時,容易發生擁塞,從而造成網路的效能和吞吐量的下降,這時就需要擁塞控制。在擁塞控制最主要由傳送方的擁塞視窗 cwnd 來控制 當然也得考慮對端接收視窗 rwnd 的大小 這個視窗值的大小就代表能夠傳送出去的但還...
TCP IP基礎04 擁塞控制
2 擁塞處理 q ss閾值怎麼設定?擁塞是一種持續過載的網路狀態,此時使用者對網路資源 包括鏈路頻寬 儲存空間和處理器處理能力等 的需求超過了固有的容量。一句話說就是,接收方一口氣收到了太多的資料,處理不了了。限制傳送方的傳送視窗。而傳送方的傳送視窗是由兩方面決定的。1 接收方的接受視窗。2 網路影...
TCP IP 流量控制和擁塞控制
如果傳送方把資料傳送得過快,接收方可能會來不及接收,這就會造成資料的丟失。所謂流量控制就是讓傳送方的傳送速率不要太快,要讓接收方來得及接收。所以可以說,流量控制是傳送方被動地調整流量。利用滑動視窗機制可以很方便地在tcp連線上實現對傳送方的流量控制。設a向b傳送資料。在連線建立時,b告訴了a 我的接...