內容
關鍵字流量控制
視窗大小,視窗擴大因子m,機理,視窗探測資料段
擁塞控制
擁塞視窗,慢啟動,閾值
流量控制概念
接收端處理資料的速度是有限的,如果傳送方的速度太快,就會把緩衝區u打滿。這個時候如果繼續傳送資料,就會導致丟包等一系列連鎖反應。
所以tcp支援根據接收端能力來決定傳送端的傳送速度。這個機制叫做流控制。
視窗大小
(接收端向傳送端主機通知自己可以接受資料的大小,這個大小限制就叫做視窗大小)
視窗擴大因子m
接收端如何把視窗大小告訴傳送端呢? 回憶我們的tcp首部中, 有乙個16位視窗字段, 就是存放了視窗大小資訊;那麼問題來了, 16位數字最大表示65535, 那麼tcp視窗最大就是65535位元組麼?實際上, tcp首部40位元組選項中還包含了乙個視窗擴大因子m,
實際視窗大小是 視窗欄位的值左移 m 位;
機理
接收端將自己可以接收的緩衝區大小放入 tcp 首部中的 「視窗大小」 字段, 通過ack端通知傳送端;視窗大小欄位越大, 說明網路的吞吐量越高;
接收端一旦發現自己的緩衝區快滿了, 就會將視窗大小設定成乙個更小的值通知給傳送端;傳送端接受到這個視窗之後, 就會減慢自己的傳送速度;
如果接收端緩衝區滿了, 就會將視窗置為0; 這時傳送方不再傳送資料, 但是需要定期傳送乙個視窗探測資料段, 使接收端把視窗大小告訴傳送端
如圖
當接收端收到從3001號開始的資料段後其緩衝區擠滿。不得不暫時停止傳送資料,之後視窗收到更新通知後才得以繼續進行。如果這個通知在途中丟失了,可能導致無法繼續通訊。所以傳送方會是不是傳送乙個視窗探測的資料段。此資料端僅含乙個位元組來獲取最新的視窗大小。
擁塞控制
雖然tcp有了滑動視窗這個大殺器, 能夠高效可靠的傳送大量的資料. 但是如果在剛開始階段就傳送大量的資料, 仍然可能引發問題.因為網路上有很多的計算機, 可能當前的網路狀態就已經比較擁堵. 在不清楚當前網路狀態下, 貿然傳送大量的資料, 是很有可能引起雪上加霜的.tcp引入 慢啟動 機制, 先發少量的資料, 探探路, 摸清當前的網路擁堵狀態, 再決定按照多大的速度傳輸。
此處引入乙個概念程為擁塞視窗,擁塞視窗傳送開始的時候, 定義擁塞視窗大小為1;每次收到乙個ack應答, 擁塞視窗加1;
每次傳送資料報的時候, 將擁塞視窗和接收端主機反饋的視窗大小做比較, 取較小的值作為實際傳送的視窗;像上面這樣的擁塞視窗增長速度, 是指數級別的. 「慢啟動」 只是指初使時慢, 但是增長速度非常快.為了不增長的那麼快, 因此不能使擁塞視窗單純的加倍.此處引入乙個叫做慢啟動的閾值。
當擁塞視窗超過這個閾值的時候, 不再按照指數方式增長, 而是按照線性方式增長
當tcp開始啟動的時候, 慢啟動閾值等於視窗最大值;在每次超時重發的時候, 慢啟動閾值會變成原來的一半, 同時擁塞視窗置回1;少量的丟包, 我們僅僅是觸發超時重傳; 大量的丟包, 我們就認為網路擁塞;
當tcp通訊開始後, 網路吞吐量會逐漸上公升; 隨著網路發生擁堵, 吞吐量會立刻下降;擁塞控制, 歸根結底是tcp協議想盡可能快的把資料傳輸給對方, 但是又要避免給網路造成太大壓力的折中方案.
運輸層 TCP的流量控制
a向b傳送資料,在連線建立的時候,b就會首先告訴a 我的接收視窗rwnd receiver window 是400,同時我們要注意的是tcp的視窗單位是位元組,而不是報文段,預設每個報文段都是100位元組大小。我們從圖中可以分析到 a向b傳送了序號1到100的報文段,seq表示序號,接著傳送101到...
(運輸層)TCP的流量控制
流量控制 讓傳送方的傳送速率不要太快,要讓接收方來得及接收。注意 傳送方的傳送視窗不能超過接收方給出的接收視窗的數值。tcp的視窗單位是位元組,不是報文段。如圖所示,說明了利用可變視窗大小進行流量控制。設主機a向主機b傳送資料。雙方確定的視窗值是400.再設每乙個報文段為100位元組長,序號的初始值...
TCP流量控制
一般來說,我們總是希望資料傳輸的更快一些,但如果傳送方把資料傳送的很快,而接收方來不及接收,這就可能造成資料的丟失。流量控制就是讓傳送方的傳送速率不要太快,讓接收方來得及接收。對於成塊資料流,tcp利用滑動視窗機制來實現流量的控制,對於互動資料流,tcp利用捎帶ack和nagle演算法來實現流量的控...