總結什麼是擁塞控制?如果網路出現擁塞,分組將會丟失,此時傳送方會繼續重傳,從而導致網路擁塞程度更高。因此當出現擁塞時,應當控制傳送方的速率。這一點和流量控制很像,但是出發點不同。流量控制是為了讓接收方能來得及接收,而擁塞控制是為了降低整個網路的擁塞程度。
tcp 主要通過四個演算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復。
傳送方維持乙個叫做擁塞視窗cwnd(congestion window)的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗,另外考慮到接受方的接收能力,傳送視窗可能小於擁塞視窗.
顧名思義,tcp在最開始傳輸資料的時候,由於不清楚網路狀況,緩慢開始,不要一來就傳輸大量資料。先探測下網路的擁塞程度,從小到大逐漸增加擁塞視窗的大小。
這裡用報文段的個數的擁塞視窗大小舉例說明慢開始演算法,實時擁塞視窗大小是以位元組為單位的。如下圖:
經過一輪之後,擁塞視窗就加倍,在慢開始階段,擁塞視窗呈指數級增長.
為了防止擁塞視窗增長過大,還設定了乙個慢開始門限ssthresh狀態變數:
當cwndssthresh時,改用擁塞避免演算法。
當cwnd=ssthresh時,慢開始與擁塞避免演算法任意。
擁塞避免演算法讓擁塞視窗按線性規律緩慢增長,即每經過乙個往返時間rtt就把傳送方的擁塞視窗cwnd加1,而不是加倍。
無論是在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設定為出現擁塞時的傳送視窗大小的一半。然後把擁塞視窗設定為1,執行慢開始演算法。如下圖:
快重傳要求接收方在收到乙個失序的報文段後就立即發出重複確認(為的是使傳送方及早知道有報文段沒有到達對方)而不要等到自己傳送資料時捎帶確認。快重傳演算法規定,傳送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設定的重傳計時器時間到期。如下圖:
快重傳配合使用的還有快恢復演算法,有以下兩個要點:
①當傳送方連續收到三個重複確認時,就執行「乘法減小」演算法,把ssthresh門限減半。但是接下去並不執行慢開始演算法。
②考慮到如果網路出現擁塞的話就不會收到好幾個重複的確認,所以傳送方現在認為網路可能沒有出現擁塞。所以此時不執行慢開始演算法,而是將cwnd設定為ssthresh的大小,然後執行擁塞避免演算法。如下圖:
擁塞控制的演算法包括:慢啟動、擁塞避免、快重傳、快恢復.
設定乙個擁塞視窗,用來控制傳送方傳送資料的大小,在一開始由於不知道網路擁塞狀況,設定擁塞視窗大小為1,採用慢啟動演算法,在慢啟動階段,擁塞視窗指數級增長,每此增加一倍,為了避免擁塞視窗增長過快,設定乙個慢開始門限,當擁塞視窗小於慢開始門限時,採用慢開始演算法,當擁塞視窗大於慢開始門限時,採用擁塞避免演算法.在擁塞避免階段,擁塞視窗線性增長,每次+1.
無論是在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞,就把慢開始門限設定為出現擁塞時的傳送視窗大小的一半。然後把擁塞視窗設定為1,執行慢開始演算法。
快重傳的作用是要求接收方在收到乙個失序的報文段的時候,立即向傳送方傳送乙個重傳確認,當傳送方一連線收到三個重傳確認的時候,就立即重新傳送接收方沒收到的報文段,而不必等待重傳計時器結束.
發生快重傳之後,不採用慢啟動,而是採用快恢復演算法,將慢啟動門限設定為擁塞視窗的一半,然後將擁塞視窗=慢啟動門限,進入擁塞避免階段.
TCP擁塞控制
擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...
TCP擁塞控制
計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...
TCP 擁塞控制
我們都知道 tcp 是傳輸層的協議,網路請求經過傳輸層到達網路層之後是通過 ip 包進行傳輸的。如果我們傳送方大量的 ip 包的時候,有可能我們的鏈路資源有限,那麼我們的 ip 包就有可能丟失或者被丟棄,這樣我們的請求就不是絕對安全的,那接下來我們就說一下,tcp是如何處理前面的情況的。一 什麼是網...