常規的幾個概念如:慢啟動(指數增加),擁塞避免(線性增加),慢啟動閾值(sstresh)不說了,可以看下其他部落格。
快速重傳:即收到3個冗餘ack馬上重新傳送該資料報,而不是等待該資料報超時再重傳。
栗子:
傳送端傳送1,2,3,4,5,6,7。。。其中4丟包了,接收端收到1,2,3,雙方都很滿意。
然後接收端收到5,發現4沒收到,傳乙個ack4回去。
收到6,再發乙個ack4回去。
收到7,再發乙個ack4回去。
這時,傳送端收到了連續3個ack4,也就是三個冗餘ack,這時候馬上重傳4號資料報。
接收端收到了4號包,由於tcp的ack是累計確認,那麼發乙個ack8回去(因為5,6,7都快取了),繼續資料傳輸。
快速恢復:是較新的tcp版本使用的。內部包含兩步:1.快速重傳 ;2.回到擁塞避免狀態。即快速恢復並不是什麼具體操作,而是把兩個操作捏到一起,起了這麼乙個名字而已。
注意乙個區別:快速恢復只有在收到3次冗餘ack的時候才會呼叫。如果是定時器超時,那麼不論什麼版本的tcp,都會直接重新回到慢啟動階段。
注意定時器超時指示的丟包事件和3次ack指示的丟包的區別。前者說明網路狀況不好,我們必須迅速降低傳送速率!而後者可能只是某個資料報丟失了(和網路狀態無關)!這是整個擁塞控制討論的基礎。。
畫個圖:
其中不論是否執行快速恢復過程,發現3次ack後,慢啟動閾值都會變成當前擁塞視窗長度的一半,即sstresh=cwnd/2;
區別的是,如果採用快速恢復過程:執行快速重傳後,會把擁塞視窗設為sstresh+3,即之前的擁塞視窗長度除2再加3。
這個3是什麼意思:
考慮那3個ack包,由於它們被傳送方收到了,說明這三個包從網路中消失了。從網路整體的頻寬來看,少了3個包,那麼我們就可以把這3個包的頻寬也利用起來,不要浪費一點。(其實沒什麼卵用我感覺)
我個人的理解是:帶快速恢復的tcp演算法能夠較高效率的利用網路的頻寬,可以看到上面的圖呈現鋸齒形狀。傳送端傳送速率(傳送視窗長度)慢慢的增長,去探測剩餘頻寬,如果丟包了,並不像老版本的tcp演算法一樣一下回到解放前(重新開始慢啟動),而是從乙個我們認為一定不會使網路堵塞的速率繼續開始慢慢增長。
另外:我自己用wireshark抓包,都是2次冗餘ack就快速重傳了。感覺很多書上所謂的標準在現實中都並不是嚴格執行的。。
TCP擁塞控制
擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...
TCP擁塞控制
計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...
TCP 擁塞控制
我們都知道 tcp 是傳輸層的協議,網路請求經過傳輸層到達網路層之後是通過 ip 包進行傳輸的。如果我們傳送方大量的 ip 包的時候,有可能我們的鏈路資源有限,那麼我們的 ip 包就有可能丟失或者被丟棄,這樣我們的請求就不是絕對安全的,那接下來我們就說一下,tcp是如何處理前面的情況的。一 什麼是網...