在網路實際的傳輸過程中,會出現擁塞的現象,網路上充斥著非常多的資料報,但是卻不能按時被傳送,形成網路擁塞,其實就是和平時的堵車乙個性質了。tcp設計中也考慮到這一點,使用了一些演算法來檢測網路擁塞現象,如果擁塞產生,就會調整傳送策略,減少資料報的傳送來緩解網路的壓力
解決方法:
慢啟動擁塞避免
擁塞發生時,快速重傳
快速恢復
之前介紹的滑動視窗能夠讓協議棧同時傳送多個報文段,這樣可以提高網路通訊的效率,對於一些處理能力不佳的中間路由器,很可能會導致儲存被耗盡的狀況,從而嚴重降低了tcp連線的吞吐量,不斷的重傳. 非常的可怕, 介於此,引入了慢啟動這個演算法。
慢啟動為傳送方的tcp增加了乙個視窗:擁塞視窗,記為cwnd,,初始化之後慢慢增加這個cwnd的值來提公升速度。同時也引入了ssthresh門限值,如果cwnd達到這個值會讓cwnd的增長變得平滑,演算法如下
連線建好的開始先初始化cwnd = 1,表明可以傳乙個mss大小的資料
每當收到乙個ack,cwnd++; 呈線性上公升
每當過了乙個rtt(從傳送端傳送資料開始,到傳送端收到來自接收端的確認),cwnd = cwnd*2; 呈指數讓公升
當cwnd >= ssthresh時,就會進入「擁塞避免演算法」
注意:真正傳送視窗大小是 擁塞視窗 和 接收端發過來的視窗取較小值
從慢啟動可以看到,cwnd可以比較快的增長,但是不能一直無限增長,需要某個限制,tcp使用了ssthresh的變數,當cwnd超過這個值後,慢啟動過程結束,進入擁塞避免階段。擁塞避免的主要思想是加法增大,也就是讓cwnd的值線性增加, 此時當視窗中所有的報文段都被確認是,cwnd的大小才加1,cwnd的值隨著rtt線性增加,這樣就可以避免增長過快導致網路擁塞,慢慢的增加到網路的最佳值。
演算法:1)收到乙個ack時,cwnd = cwnd + 1/cwnd
2)當每過乙個rtt時,cwnd = cwnd + 1
擁塞控制 慢啟動 快恢復 擁塞避免
1.慢開始和擁塞避免 擁塞視窗 傳送方維持乙個擁塞視窗 cwnd congestion window 的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞。慢開始演算法 在剛剛開始傳送報文段時,先把擁塞視窗 cwnd 設定為1個最大報文段mss的數值,而後...
TCP擁塞控制,慢啟動演算法
當乙個網路面對的負載超過了它的處理能力時,擁塞就會發生。internet也不例外。理論上,通過使用一條從物理學中套用過來的法則 分組守恆法則,擁塞現象就可以得到控制。它的基本思想是,只有當乙個老的分組離開之後才允許向網路注入乙個新的分組。tcp企圖通過動態的維護視窗的大小來實現這個目標。管理擁塞的第...
TCP擁塞控制 慢啟動 擁塞避免 快重傳 快啟動
一般原理 發生擁塞控制的原因 資源 頻寬 交換節點的快取 處理機 的需求 可用資源。作用 擁塞控制就是為了防止過多的資料注入到網路中,這樣可以使網路中的路由器或者鏈路不至於過載。擁塞控制要做的都有乙個前提 就是網路能夠承受現有的網路負荷。對比流量控制 擁塞控制是乙個全域性的過程,涉及到所有的主機 路...