TCP在鏈接過程的三次握手完成後,開始傳數據,並非一開始向網絡通道中發送大量的數據包,這樣很容易致使網絡中路由器緩存空間耗盡,從而發生擁塞;而是根據初始的cwnd大小逐步增長髮送的數據量,cwnd初始化爲1個最大報文段(MSS)大小(這個值可配置不必定是1個MSS);每當有一個報文段被確認,cwnd大小指數增加。
開始 —> cwnd = 1
1個RTT後 —> cwnd = 2*1 = 2
2個RTT後 —> cwnd = 2*2= 4
3個RTT後 —> cwnd = 4*2 = 8緩存
cwnd不能一直這樣無限增加下去,必定須要某個限制。TCP使用了一個叫慢啓動門限(ssthresh)的變量,一旦cwnd>=ssthresh(大多數TCP的實現,一般大小都是65536),慢啓動過程結束,擁塞避免階段開始;
擁塞避免:cwnd的值再也不指數級往上升,開始加法增長。此時當窗口中全部的報文段都被確認時,cwnd的大小加1,cwnd的值就隨着RTT開始線性增長,這樣就能夠避免增加過快致使網絡擁塞,慢慢的增長調整到網絡的最佳值。
非ECN環境下的擁塞判斷,發送方RTO超時,重傳了一個報文段;網絡
快速重傳,TCP在收到重複的3次ACK時,會認爲重傳隊列中的第一個報文段被網絡丟棄,但因爲收到的重複的3次ACK,則認爲該報文段以後的三個報文已經被接收端收到,則不等待重傳定時器超時,直接重發重傳隊列中的第一個報文段。tcp
快速恢復的數據包守恆原則,即同一個時刻在網絡中的數據包數量恆定,「老」數據包離開後,才能向網絡中發送「新」的數據包。若是發送方收到一個重複的ACK,TCP的ACK機制就代表有一個數據包離開,此時cwnd加1。性能
非ECN環境下,在網絡中間路由器丟包時,TCP協議經過RTO超時來重傳丟失的包,保證數據可靠性。
對於網絡鏈路中的路由器來講,當中間路由器隊列過載致使丟包後,各主機之間的TCP鏈接並不感知中間路由器的轉發隊列的忙閒狀態。而是在RTO定時器超時以後,因爲沒有收到ACK,開始重傳報文。而這個定時器的時間相對較長,一般從幾秒到幾十秒不等。報文丟棄致使多路TCP開始下降發送速率,甚至在一個窗口發送完畢以後,TCP的重傳定時器沒有超時以前,整個發送過程會偶爾停滯。在全部TCP下降性能以後,路由器的轉發隊列擁塞獲得緩解,再也不丟棄報文,全部TCP又會同時提升發送速率,到達必定程度以後,路由器又開始丟棄報文,並重復剛纔TCP的重傳過程。該現象的問題有:spa
路由器的轉發隊列一般實現了RED功能,即路由器會根據當前隊列的平均長度來作丟包決策,並隨機丟棄一些TCP報文段,而不是等到隊列滿載,很好地避免了全部TCP同時超時的問題。.net
經過在TCP和IP首部的修改,能解決如下問題:設計
IP首部的修改code
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| DS FIELD, DSCP | ECN FIELD |
+-----+-----+-----+-----+-----+-----+-----+-----+
DSCP: differentiated services codepoint
ECN: Explicit Congestion Notification
The Differentiated Services and ECN Fields in IP.
+-----+-----+
| ECN FIELD |
+-----+-----+
ECT CE [Obsolete] RFC 2481 names for the ECN bits.
0 0 Not-ECT
0 1 ECT(1)
1 0 ECT(0)
1 1 CE
The ECN Field in IP.
IP首部的TOS字段中的第7和8bit的res字段被從新定義爲ECN字段,其中有四個取值,在RFC3168中描述,00表明該報文並不支持ECN,因此路由器的將該報文按照原始非ECN報文處理便可,即,過載丟包。01和10這兩個值針對路由器來講是同樣的,都代表該報文支持ECN功能,若是發生擁塞,則ECN字段的這兩個將修改成11來表示報文通過了擁塞,並繼續被路由器轉發。針對01和10的具體區別請參考RFC3168。
因此路由器轉發側要支持ECN,須要有如下新增功能:blog
TCP首部的修改隊列
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| | | C | E | U | A | P | R | S | F |
| Header Length | Reserved | W | C | R | C | S | S | Y | I |
| | | R | E | G | K | H | T | N | N |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
CWR: Congestion Window Reduce
ECE: ECN-Echo
The new definition of bytes 13 and 14 of the TCP Header.
針對主機側的修改,首部將bit8和bit9的res字段修改成CWR和ECE。在RFC3168中的設計以下:
記錄和轉載別人的博客,加深記憶。