TCP擁塞控制

1擁塞

??在計算機網(wǎng)絡(luò)中的鏈路容量(即帶寬)暖庄、交換節(jié)點(如路由器)中的緩存和處理機等犯眠,都是網(wǎng)絡(luò)的資源谊娇。在某段時間內(nèi)簿晓,若對網(wǎng)絡(luò)中某一資源的需求超過了該資源所能提供的可用部分眶拉,網(wǎng)絡(luò)的性能就要變壞,從而導致吞吐量將隨著輸入負荷增大而降低憔儿。這種情況就叫做擁塞忆植。通俗來說,就跟交通擁堵性質(zhì)一樣谒臼。

??網(wǎng)絡(luò)擁塞的原因有很多朝刊,如交換節(jié)點的緩存容量太小、輸出鏈路的容量和處理機的速度蜈缤。

擁塞常常趨于惡化拾氓。如果一個路由器沒有足夠的緩存空間,它就會丟失一些新到的分組底哥,但當分組被丟失時咙鞍,發(fā)送這一分組的源點就會重傳這一分組,甚至重傳多次趾徽,這樣會引起更多的分組流入網(wǎng)絡(luò)和被網(wǎng)絡(luò)中的路由器丟失续滋。可見擁塞引起的重傳并不會緩解網(wǎng)絡(luò)的擁塞孵奶,返回會加劇網(wǎng)絡(luò)的擁塞疲酌。

2 擁塞控制

??擁塞控制就是防止過多的數(shù)據(jù)注入網(wǎng)絡(luò)中,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不致于過載了袁。擁塞控制是一個全局性的過程朗恳。涉及網(wǎng)絡(luò)中所有的主機、所有的路由器早像,以及與降低網(wǎng)絡(luò)傳輸性能有關(guān)的所有因素。

??擁塞控制和流量控制的關(guān)系密切肖爵,但是流量控制往往是指點對點的通信量控制卢鹦,是個端對端的問題。流量控制所要做的就是抑制發(fā)送方發(fā)送數(shù)據(jù)的速率劝堪,以便使接收端來得及接收冀自。

如上圖所示,對于左側(cè)圖秒啦,如果多臺主機通過鏈路上的路由器向接收方發(fā)送數(shù)據(jù)熬粗,如果主機的發(fā)送數(shù)據(jù)過快,就可能導致網(wǎng)絡(luò)擁塞余境,發(fā)送方的數(shù)據(jù)遲遲到不了接收方驻呐,那么接收端就會察覺到網(wǎng)絡(luò)發(fā)生擁塞灌诅,但是接收端不清楚是哪臺或哪些主機發(fā)送速率過快導致的擁塞。而對于右圖含末,由于是端對端的通信猜拾,如果接收方發(fā)現(xiàn)來不及接受數(shù)據(jù),它會知道是與它通信的主機發(fā)送速率過快導致的佣盒。

3 擁塞控制算法

??TCP進行擁塞控制的算法有四種挎袜,即慢開始(slow-start)、擁塞避免(congestion-avoidance)肥惭、快重傳(fast retransmit)盯仪、快恢復(fù)(fast recovery)

??為了討論問題方便蜜葱,提出以下假定:

(1) 數(shù)據(jù)是單方向傳送的全景,對方只傳送確認報文。
(2) 接收方總有足夠大的緩存空間笼沥,因而發(fā)送窗口的大小由網(wǎng)絡(luò)的擁塞程度來決定蚪燕。

??3.1 慢開始和擁塞避免

??擁塞控制也叫做基于窗口的擁塞控制帕胆。為此征峦,發(fā)送方維持一個叫作擁塞窗口cwnd(congestion window)的狀態(tài)變量。擁塞窗口的大小取決于網(wǎng)絡(luò)的用誰程度糠亩,并且動態(tài)的變化汹桦。發(fā)送方讓自己的發(fā)送窗口等于擁塞窗口鲁驶。

在流量控制一文中還提到一個接受窗口值rwnd,從接收方流量控制角度考慮舞骆,發(fā)送方窗口一定不能超過對方給出的接收方窗口值rwnd钥弯。

??本節(jié)討論擁塞控制假定了接收方有足夠大的緩存空間,所以無需考慮rwnd督禽。但是在實際中脆霎,兩者都需要考慮,并且發(fā)送方窗口的上限值應(yīng)當取接收方窗口值rwnd和擁塞窗口cwnd這兩個變量中較小的值狈惫。即發(fā)送方窗口上限值 = min { rwnd , cwnd }睛蛛。

??接收方窗口值rwnd和擁塞窗口值cwnd的區(qū)別:

接收窗口值:接收方根據(jù)緩存設(shè)置的值,并告知給發(fā)送方胧谈,反映接收方容量忆肾。
擁塞窗口值:發(fā)送方根據(jù)自己估算的網(wǎng)絡(luò)擁塞程度而設(shè)置的窗口值,反映網(wǎng)絡(luò)當前容量菱肖。

??發(fā)送方控制擁塞窗口的原則是:只要網(wǎng)絡(luò)沒有出現(xiàn)擁塞客冈,擁塞窗口就可以再擴大一些,以便讓更多的分組發(fā)送出去稳强,如果網(wǎng)絡(luò)出現(xiàn)了擁塞场仲,就必須將擁塞窗口減小一些和悦,以減少分組的發(fā)送。判斷網(wǎng)絡(luò)擁塞的依據(jù)就是出現(xiàn)了超時燎窘。

3.1.1 慢開始算法

??慢開始算法的思路:剛開始發(fā)送數(shù)據(jù)時摹闽,不一下向網(wǎng)絡(luò)中注入大量數(shù)據(jù),而是先探測一下褐健,即由小到大逐漸增大發(fā)送窗口付鹿,也就是說,由小到大逐漸增大擁塞窗口數(shù)值蚜迅。

??慢開始算法具體規(guī)定:剛開始發(fā)送數(shù)據(jù)時舵匾,先把擁塞窗口cwnd根據(jù)發(fā)送方的最大報文段SMSS(Sender Maximum Segment Size)數(shù)值的大小設(shè)置為不超過2-4個SMSS的數(shù)值。在每收到一個對新的報文段的確認后谁不,可以把擁塞窗口增加最多一個SMSS的數(shù)值坐梯。用這樣的方法逐步增大發(fā)送方的擁塞窗口rwnd,可以使分組注入到網(wǎng)絡(luò)中的速率更加合理刹帕。

??下面舉例說明一下吵血,雖然實際上TCP是用字節(jié)數(shù)作為窗口大小的單位,但為了方便描述偷溺,下面使用報文段的個數(shù)來作為窗口的大小的單位蹋辅,并且假設(shè)所有的報文段大小相等。

剛開始時發(fā)送方先將窗口大小cwnd設(shè)置為1(這里的1是指的是一個報文段的字節(jié)數(shù)挫掏,下同)侦另,發(fā)送第一個分組,接收方接收后確認分組0尉共。發(fā)送方接收到對分組0的確認后褒傅,將cwnd增加到2(即收到一個確認就把擁塞窗口增加一個報文段長度)。

發(fā)送方接著發(fā)送分組2 ~ 3袄友,接收方接收后確認分組2 ~ 3殿托,發(fā)送方收到2個確認后將cwnd從2增加到4。

發(fā)送方接著發(fā)送分組4 ~ 7剧蚣,接收方接收后確認分組4 ~ 7支竹,發(fā)送方收到4個確認后將cwnd從4增加到8。
....

??所以券敌,慢開始算法每經(jīng)過一個傳輸輪次(transmission round)唾戚,擁塞窗口cwnd就加倍柳洋。

一個傳輸輪次:發(fā)送方從發(fā)送一批分組到接收到它們的確認所經(jīng)歷的時間待诅,即往返時間RTT(RTT并非是恒定的數(shù)值)。

??注:在TCP實際運行時熊镣,發(fā)送方只有收到一個確認就可以將cwnd加1并發(fā)送新的分組卑雁,并不需要等一個輪次所有的確認都收到后再發(fā)送新的分組募书。

??從上面可以看出,慢開始算法雖然起始的窗口很小测蹲,但是每過一個輪次莹捡,窗口大小翻倍,呈指數(shù)爆炸增長扣甲,所以必須要對其進行一個限制篮赢,防止其增長過大引起網(wǎng)絡(luò)擁塞。這個限制就是慢開始門限ssthresh狀態(tài)變量琉挖。慢開始門限ssthresh的用法如下:

????當cwnd < ssthresh時启泣,使用上述慢開始算法。
????當cwnd > ssthresh時示辈,停止使用慢開始算法而改用擁塞避免算法寥茫。

3.1.2 擁塞避免算法

??擁塞避免算法的思路是讓擁塞窗口cwnd緩慢增大,即每經(jīng)過一個往返時間RTT就把發(fā)送方的擁塞窗口cwnd加1矾麻,而不是像慢開始階段那樣加倍增長纱耻。因此在擁塞避免階段就有“加法增大”AI(Additive Increase)的特點。這表明在擁塞避免階段险耀,擁塞窗口cwnd按線性規(guī)律增長弄喘,比慢開始算法的擁塞窗口增長速率緩慢得多。

??下面用一個具體的例子來說明擁塞控制的過程胰耗,下圖假設(shè)TCP發(fā)送窗口等于擁塞窗口限次,慢開始初始門限設(shè)置為16個報文段,即ssthresh = 16柴灯。

注:橫坐標是傳輸輪次卖漫。

(1) 在執(zhí)行慢開始算法時,發(fā)送方每收到一個對新報文段確認的ACK赠群,就把擁塞窗口的值加1羊始,然后開始下一輪的傳輸。剛開始cwnd呈指數(shù)規(guī)律增長查描,當cwnd = 16時(即第一個紅色的點處)突委,擁塞窗口到達慢開始門限。

(2) 當擁塞窗口達到慢開始門限時冬三,即進入避免擁塞階段匀油,擁塞窗口按線性規(guī)律增長使網(wǎng)絡(luò)比較不容易出現(xiàn)擁塞勾笆。

(3) 當擁塞窗口 cwnd = 24時敌蚜,網(wǎng)絡(luò)出現(xiàn)超時(第二個紅點處),發(fā)送方判斷為網(wǎng)絡(luò)擁塞窝爪。于是調(diào)整門限值 ssthresh = cwnd / 2 = 12(即發(fā)送窗口的一半)弛车,同時設(shè)置擁塞窗口cwnd = 1齐媒,進入慢開始階段。

(4) 重新進入慢開始階段后纷跛,當擁塞窗口再次達到新的門限ssthresh = 12時(第四個紅點處)喻括,改為執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長贫奠,每經(jīng)過一個往返時延就增加一個MSS的大小唬血。

??在擁塞避免階段,擁塞窗口是按照線性規(guī)律增大的唤崭,這常稱為加法增大AI刁品。無論在慢開始階段還是擁塞避免階段,只要出現(xiàn)一次超時(即出現(xiàn)一次網(wǎng)絡(luò)擁塞)浩姥,就把慢開始門限值 ssthresh 設(shè)置為當前擁塞窗口的一半挑随,這叫做乘法減小 MD(Multiplication Decrease)。

??當網(wǎng)絡(luò)頻繁出現(xiàn)擁塞時勒叠,ssthresh 值就下降的很快兜挨,以大大減少注入網(wǎng)絡(luò)中的分組數(shù)。

?? 3.2 快速重傳和快恢復(fù)

快速重傳機制之前介紹過眯分,這里簡單概括下拌汇,即發(fā)送方如果收到連續(xù)3個冗余ACK,那么發(fā)送方就會執(zhí)行快重傳算法弊决,立即重傳這個被確認過3次的報文段之后的報文段噪舀,這樣可以讓發(fā)送方在超時事件之前知道報文發(fā)生了丟失。

??快恢復(fù)算法飘诗,如果發(fā)送方連續(xù)接收到3個冗余ACK与倡,發(fā)送方知道現(xiàn)在只是丟失了個別的報文段,此時調(diào)整門限值 ssthresh為當前擁塞窗口的一半昆稿,同時設(shè)置擁塞窗口 cwnd為新的門限值(發(fā)生報文段丟失時擁塞窗口的一半)纺座,而不是從1開始。

如上圖所示溉潭,當cwnd = 24時净响,收到了3個冗余ACK,于是不啟動慢開始喳瓣,而是執(zhí)行快恢復(fù)算馋贤。這時,發(fā)送方調(diào)整門限值 ssthresh = cwnd / 2 = 12畏陕,同時設(shè)置擁塞窗口 cwnd = ssthresh = 12配乓,并開始擁塞避免算法。

??TCP對這種丟包事件的行為,相比于超時指示的丟包扰付,不那么劇烈,所以對于連續(xù)收到3個冗余ACK仁讨,擁塞窗口不會從1開始開始羽莺。

4 小結(jié)

??本文完

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洞豁,隨后出現(xiàn)的幾起案子盐固,更是在濱河造成了極大的恐慌,老刑警劉巖丈挟,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁卜,死亡現(xiàn)場離奇詭異,居然都是意外死亡曙咽,警方通過查閱死者的電腦和手機蛔趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來例朱,“玉大人孝情,你說我怎么就攤上這事∪鬣停” “怎么了箫荡?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長渔隶。 經(jīng)常有香客問我羔挡,道長,這世上最難降的妖魔是什么间唉? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任绞灼,我火速辦了婚禮,結(jié)果婚禮上呈野,老公的妹妹穿的比我還像新娘镀赌。我一直安慰自己,他們只是感情好际跪,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布商佛。 她就那樣靜靜地躺著,像睡著了一般姆打。 火紅的嫁衣襯著肌膚如雪良姆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天幔戏,我揣著相機與錄音玛追,去河邊找鬼。 笑死,一個胖子當著我的面吹牛痊剖,可吹牛的內(nèi)容都是我干的韩玩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼陆馁,長吁一口氣:“原來是場噩夢啊……” “哼找颓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叮贩,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤击狮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后益老,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彪蓬,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年捺萌,在試婚紗的時候發(fā)現(xiàn)自己被綠了档冬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桃纯,死狀恐怖捣郊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慈参,我是刑警寧澤呛牲,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站驮配,受9級特大地震影響娘扩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壮锻,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一琐旁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猜绣,春花似錦灰殴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辣之,卻和暖如春掰伸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怀估。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工狮鸭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留合搅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓歧蕉,卻偏偏與公主長得像灾部,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惯退,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一般原理:發(fā)生擁塞控制的原因:資源(帶寬、交換節(jié)點的緩存扫责、處理機)的需求>可用資源榛鼎。 作用:擁塞控制就是為了防止過...
    鄭大你博哥閱讀 1,125評論 0 3
  • 運輸層協(xié)議概述 從通信和信息處理的角度看,運輸層向它上面的應(yīng)用層提供通信服務(wù)鳖孤,它屬于面向通信部分的最高層者娱,同時也是...
    srtianxia閱讀 2,406評論 0 2
  • TCP超時與重傳機制 TCP協(xié)議是一種面向連接的可靠的傳輸層協(xié)議,它保證了數(shù)據(jù)的可靠傳輸苏揣,對于一些出錯黄鳍,超時丟包等...
    狗尾巴草敗了閱讀 572評論 0 2
  • TCP擁塞控制是傳輸控制協(xié)議(英語:Transmission Control Protocol,縮寫TCP)避免網(wǎng)...
    beihuang閱讀 1,203評論 0 0
  • 我喜歡你對我輕盈地眨著右眼平匈,一下框沟,又一下,然后驮鎏浚靠在我的岸邊忍燥,我一招手,你就來了隙姿,風情萬種梅垄。 我喜歡你的沉默,當我...
    ProjectAlpha閱讀 198評論 0 3