慢啟動,是傳輸控制協議使用的一種阻塞控制機制。慢啟動也叫做指數增長期。慢啟動是指每次tcp接收視窗收到確認時都會增長。增加的大小就是已確認段的數目。這種情況一直保持到要麼沒有收到一些段,要麼視窗大小到達預先定義的閾值。如果發生丟失事件,tcp就認為這是網路阻塞,就會採取措施減輕網路擁擠。一旦發生丟失事件或者到達閾值,tcp就會進入線性增長階段。這時,每經過乙個rtt視窗增長乙個段。
傳送方一開始便向網路傳送多個報文段,直至達到接收方通告的視窗大小為止。當傳送方和接收方處於同乙個區域網時,這種方式是可以的。但是如果在傳送方和接收方之間存在多個路由器和速率較慢的鏈路時,就有可能出現一些問題。
一些中間路由器必須快取分組,並有可能耗盡儲存器的空間。
現在,tcp需要支援一種被稱為「慢啟動(slow start)」的演算法。該演算法通過觀察到新分組進入網路的速率應該與另一端返回確認的速率相同而進行工作。
慢啟動為傳送方的tcp增加了另乙個視窗:擁塞視窗(congestion window),記為cwnd。當與另乙個網路的主機建立t c p連線時,擁塞視窗被初始化為 1個報文段(即另一端通告的報文
段大小)。每收到乙個ack,擁塞視窗就增加乙個報文段( c w n d以位元組為單位,但是慢啟動以報文段大小為單位進行增加)。傳送方取擁塞視窗與通告視窗中的最小值作為傳送上限。擁
塞視窗是傳送方使用的流量控制,而通告視窗則是接收方使用的流量控制。傳送方開始時傳送乙個報文段,然後等待 a c k。當收到該a c k時,擁塞視窗從1增加為2,即可以傳送兩個報文段。當收到這兩個報文段的 a c k時,擁塞視窗就增加為4。這是一種指數增加的關係。
在某些點上可能達到了網際網路的容量,於是中間路由器開始丟棄分組。這就通知傳送方它的擁塞視窗開得過大。當我們在下一章討論 t c p的超時和重傳機制時,將會看到它們是怎樣對擁塞視窗起作用的。現在,我們來觀察乙個實際中的慢啟動。
下圖表示的是將從主機sun傳送到主機vangogh.cs.berkeley.edu的資料。這些資料將通過乙個慢的slip鏈路,該鏈路是tcp連線上的瓶頸(我們已經在時間系列上去掉了連線建立的過程)。
我們觀察到傳送方傳送乙個長度為5 1 2位元組的報文段,然後等待ack。該ack在716 ms後收到。這個時間是乙個往返時間的指示。於是擁塞視窗增加了 2個報文段,且又傳送了兩個報
文段。當收到報文段5的ack後,擁塞視窗增加為3。此時儘管可傳送多達3個報文段,可是在下乙個ack收到之前,只傳送了2個報文段。
在乙個正常的網路,服務端在公網,客戶端是一台虛擬機器,通過客戶端223.226.200.34,每次傳送大小為102400大小資料到服務端223.226.200.200,迴圈次數是1000次。雙方的網路良好,最開始的時候可以達到客戶端每傳送乙個資料,服務端就傳送一次ack,如下:
17:11:42.437707 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 1:1025, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961746], length 1024大家可以看到兩個報文之間的時間差不超過50ms左右,一般是20ms。17:11:42.437721 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 1025, win 33, options [nop,nop,ts val 972961748 ecr 2003558], length 0
17:11:42.437805 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 1025:2485, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961746], length 1460
17:11:42.437816 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 2485, win 38, options [nop,nop,ts val 972961748 ecr 2003558], length 0
....
17:11:42.468767 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 24025:25461, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961753], length 1436
17:11:42.468780 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 25461, win 83, options [nop,nop,ts val 972961756 ecr 2003558], length 0
但是後來,可能是由於一些中間路由器必須快取分組,並有可能耗盡儲存器的空間。導致服務端不能及時響應,確認資料,如下:
17:11:42.468965 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [.], seq 25461:26897, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961753], length 1436可以看到這裡客戶端連續傳送資料到服務端的這些報文裡,每兩個報文之間的時間差比較大,基本都達到100ms以上的差距,所以可以確定是由於伺服器傳送ack報文過遲,傳送方才會根據擁塞視窗大小,連續傳送多個報文段。17:11:42.469200 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 26897:28333, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961753], length 1436
......
17:11:42.478755 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 52745:54181, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961756], length 1436
17:11:42.507104 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 54181, win 27, options [nop,nop,ts val 972961766 ecr 2003558], length 0
17:11:42.516476 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 54181:55617, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961766], length 1436
17:11:42.516597 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 55617:57053, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961766], length 1436
......
17:11:42.517263 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 64233:65669, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961766], length 1436
17:11:42.517437 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 65669:67105, ack 1, win 64240, options [nop,nop,ts val 2003558 ecr 972961766], length 1436
17:11:42.555104 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 67105, win 2, options [nop,nop,ts val 972961778 ecr 2003558], length 0
17:11:47.457101 ip 223.226.200.34.42567 > 223.226.200.200.6888: flags [p.], seq 67105:68129, ack 1, win 64240, options [nop,nop,ts val 2003608 ecr 972961778], length 1024
17:11:47.457116 ip 223.226.200.200.6888 > 223.226.200.34.42567: flags [.], ack 68129, win 0, options [nop,nop,ts val 972963003 ecr 2003608], length 0
另外,這裡的服務端**中是自己的程式,並沒有read資料,所以會見到win越來越小。直到最後win為0,無法接收任何資料。
TCP擁塞控制,慢啟動演算法
當乙個網路面對的負載超過了它的處理能力時,擁塞就會發生。internet也不例外。理論上,通過使用一條從物理學中套用過來的法則 分組守恆法則,擁塞現象就可以得到控制。它的基本思想是,只有當乙個老的分組離開之後才允許向網路注入乙個新的分組。tcp企圖通過動態的維護視窗的大小來實現這個目標。管理擁塞的第...
TCP 慢啟動簡介
內容絕對正確,所 以請讀者抱著懷疑的態度閱讀本部落格內的文字。如果讀 者因本部落格內的文字造成損失,本人 無力負責。如果有任何謬誤或者問題,希望讀者不吝賜教。在廣域網,tcp報文可能要經過多個路由器和速率較慢的鏈路。如果傳送方一開始就向網路 傳送多個報文段,則中間路由器的緩衝負擔會立刻加重,很可能致...
TCP協議的慢啟動
tcp協議的慢啟動 傳統的tcp協議慢啟動時的演算法是每次收到新的ack則視窗 1,即cwnd cwnd 1 而很多演算法對tcp實現改進也是從這裡入手,因為這樣的演算法,視窗值是隨著rtt時間指數增長的。為什麼說是隨著rtt時間指數增長的?這裡解釋一下。www.2cto.com 例如某一次傳送過程...