出現擁塞的原因無非是 對資源的需求》可用資源。
如果乙個路由器沒有足夠的快取空間,他就會丟棄一些新到的分組,導致傳送該分組的傳送方重傳這一分組,甚至還可能重傳多次,這樣會引起更多的分組流入網路中和被路由器丟棄。課件擁塞引起的重傳並不能很好地解決問題,反而使擁塞更為嚴重!
擁塞控制和流量控制的區別:
tcp使用的是端到端的擁塞控制(ip層並不會顯示提供網路擁塞反饋)。tcp採用的是讓每乙個傳送方根據所感知到的網路擁塞程度來限制其傳送速率。
tcp採用基於視窗的方法進行擁塞控制。tcp傳送方維持乙個擁塞視窗swnd。該視窗的大小取決於網路的擁塞程度,並且動態的在變化。
真正的傳送視窗值 = min{ 接收視窗 ,擁塞視窗 }控制擁塞視窗的原則:擁塞判斷:下面我們來討論關於tcp擁塞控制演算法的四個主要部分:慢啟動、擁塞避免、快速重傳、擁塞恢復。
當一條tcp連線開始時,cwnd(擁塞視窗)的值從乙個mss(maximum segment size)開始,每當乙個報文段首次被確認,cwnd就增加乙個mss。在這個過程中,每次經過乙個rtt,cwnd的長度就翻倍。因此,在慢啟動階段,傳送速度起始慢,但成指數級增長。
那麼 我們下乙個關心的問題一定是何時結束這種指數級的增長呢?
—)發生timeout事件時:tcp傳送方將cwnd的值置為1並重新開啟慢啟動過程,且將ssthresh(慢啟動閥值)設定為cwnd/2
—)發生3個冗餘的ack時:tcp執行快速重傳並進入快速恢復的狀態
—)當cwnd的值達到ssthresh時:結束慢啟動並進入到擁塞避免模式
問題又來了:為什麼面對timeout和3個重複ack事件的處理方式不一致?
—)當傳送方檢測到個重複的ack時,表示網路還能傳輸一些segment;但發生timeout事件時毫無疑問網路擁塞的程度更為嚴重
讓cwnd緩慢的增大,即當進入擁塞避免狀態時,每經過乙個rtt,cwnd的值只增加乙個mss。tcp逐漸增加傳送速率,謹慎探測可用頻寬,直到發生loss。
何時結束擁塞避免的線性增長?
發生timeout時:
收到3個冗餘ack時:ssthresh值記錄為cwnd的一半,進入快速恢復狀態
採用快速重傳演算法可以讓傳送盡早知道傳送了個別報文段的丟失
傳送方只要一連收到三個重複的ack,就立即重傳,這樣就不會出現超時,傳送方也不會誤以為出現了網路擁塞
當傳送端收到連續三個重複的ack時,認為網路很可能沒有發生擁塞,因此不執行慢啟動演算法,而是執行擁塞恢復演算法:
運輸層學習筆記六 擁塞控制原理
情況1 兩個傳送方和一台具有無窮大快取的路由器 in lambda in 位元組 秒的速率傳送資料。a和b的分組通過一台路由器,在容量為 r rr 的共享輸出鏈路上傳輸。該路由器帶有快取,假設有無限大的快取空間,分組到達速率超過該輸出鏈路的容量時儲存入分組。由於共享鏈路,分別的吞吐量上限為 r 2 ...
網路層的擁塞控制
擁塞 在乙個子網或子網的一部分出現太多的分組時,網路效能開始下降 擁塞控制分為開環控制和閉環控制,通過擁塞控制,網路不易出現擁塞和死鎖現象。開環控制 在網路系統設計時,事先就要考慮到有關發生擁塞的各種因素,力求在系統工作時不會出現擁塞。一旦整個系統啟動並執行起來,中途就不再進行更改。閉環控制 事先不...
TCP擁塞控制之擁塞避免
tcp傳送方通過慢啟動確定傳送資料的視窗閾值,一旦達到這個閾值,就意味著雖然網路中可能有更多可用的資源,但是如果占用全部的資源,將會使共享路由器佇列的其他tcp連線出現嚴重的丟包和重傳情況,從而導致整個網路效能不穩定。為了傳輸更多的資源而不至於影響其他tcp連線的傳輸,tcp實現了擁塞避免演算法。一...