TCP中的擁塞控制

網(wǎng)絡傳輸過程中垢夹,某段時間如果網(wǎng)絡中某一資源的需求超過了該資源所能提供的可用部分僵井,網(wǎng)絡性能就會變壞华蜒,這種情況就叫做網(wǎng)絡擁塞
為解決這個問題宾茂,TCP中使用了四種擁塞控制算法

  1. 慢開始
  2. 擁塞避免
  3. 快重傳
  4. 快恢復

1. 慢開始

發(fā)送方會維持一個擁塞窗口cwnd的狀態(tài)變量,擁塞窗口的大小取決于擁塞程度难捌,并且會在收發(fā)包過程中動態(tài)的進行變化攀隔。發(fā)送方會讓本端的發(fā)送窗口等于擁塞窗口皂贩。
慢開始的核心思想:指數(shù)級由小到大逐漸增加擁塞窗口大小,如果網(wǎng)絡出現(xiàn)阻塞昆汹,擁塞窗口就減小明刷。
判斷出現(xiàn)網(wǎng)絡擁塞的依據(jù):沒有按時收到應當?shù)竭_的確認報文(即發(fā)生重傳)。
維護一個慢開始門限ssthresh狀態(tài)變量:

  1. 當cwnd < ssthresh 時满粗,使用慢開始算法辈末。
  2. 當cwnd > ssthresh 時,停止使用慢開始算法而改用擁塞避免算法映皆。
  3. 當cwnd = ssthresh 時挤聘,既可以使用慢開始算法,也可以使用擁塞避免算法捅彻。
    假設發(fā)送方擁塞窗口cwnd的值為1组去,發(fā)送窗口swnd等于擁塞窗口cwnd,那么目前發(fā)送方只能發(fā)送一個報文段步淹,cwnd為幾就能發(fā)送幾個報文段从隆,接收方收到報文段后發(fā)送回復確認,發(fā)送方收到確認報文缭裆,會將擁塞窗口的值乘2键闺,變?yōu)?。
    發(fā)送方此時一次就能發(fā)送兩個報文段澈驼,接收方收到報文段后返回兩次確認報文段辛燥,發(fā)送方收到之后擁塞窗口再乘2,cwnd=4缝其。知道發(fā)送方發(fā)送16個報文段都按時收到確認報文挎塌,擁塞窗口變?yōu)?2,但是這一次沒有按時收到確認報文内边,即有報文需要重傳勃蜘,表示網(wǎng)絡發(fā)生了擁塞,這時候設定ssthresh為當前窗口cwnd的一半假残,即ssthresh = cwnd/2 = 16。重新開始慢開始炉擅。再一次cwnd=16的時候辉懒,開啟擁塞避免算法。

2. 擁塞避免算法

擁塞避免算法是讓擁塞窗口緩慢增長谍失,每經(jīng)過一個往返時間RTT就把發(fā)送方的擁塞窗口cwnd加1眶俩,而不是加倍,擁塞窗口按線性規(guī)律緩慢增長快鱼。
不論是在慢開始期間還是擁塞避免期間颠印,只要判斷網(wǎng)絡發(fā)生了擁塞ssthresh就設置為當前發(fā)送窗口大小的一半纲岭,然后重新開始執(zhí)行慢開始算法,這樣做的目的是迅速減少主機發(fā)送到網(wǎng)絡中的分組數(shù)线罕,使發(fā)生擁塞的路由器有足夠的時間把隊列中積壓的分組處理完畢止潮。


TCP中的擁塞控制

3. 快速重傳

快速重傳是對前兩個機制的補充,在1988年TCP擁塞控制算法初次提出的時候只有慢開始和擁塞避免钞楼,1990年又新加了兩個新的擁塞控制算法(即快重傳和快恢復)來改進TCP的性能喇闸。
快速重傳機制是什么呢?
考慮下面這種情況询件,在數(shù)據(jù)傳送過程中燃乍,網(wǎng)絡有可能不太穩(wěn)定,個別報文段在網(wǎng)絡中丟失了宛琅,但是實際上網(wǎng)絡并沒有發(fā)生擁塞刻蟹。這樣會導致發(fā)送方超時重傳,誤以為網(wǎng)絡上發(fā)生了擁塞嘿辟,由于有慢開始和擁塞避免機制舆瘪,發(fā)送方錯誤的啟動了慢開始算法,并且把擁塞窗口cwnd又設置為最小值1仓洼,因為降低了傳輸效率介陶。


報文段丟失

為解決這個問題,快重傳要求接收方在收到一個失序的報文段后立即發(fā)出重復確認色建,為的是讓發(fā)送方知道有一個報文丟失了哺呜,快速重傳算法規(guī)定,發(fā)送方只要一連收到三個重復確認就應當立即重傳對方還沒有接收到的報文段箕戳,而不必繼續(xù)等待設置的重傳計時器時間到期某残。


快速重傳

4. 快恢復算法

快恢復算法適合快重傳算法配合使用的
(1)當發(fā)送方連續(xù)收到三個重復確認的時候,執(zhí)行“乘法減小”算法陵吸,將ssthresh門限減半(為了預防網(wǎng)絡發(fā)生擁塞)玻墅,但是接下來不執(zhí)行慢開始算法,因為如果網(wǎng)絡發(fā)生擁塞的話就不會收到好幾個重復的確認壮虫,所以發(fā)送方現(xiàn)在認為網(wǎng)絡可能沒有出現(xiàn)擁塞澳厢。
(2)此時不會執(zhí)行慢開始算法,而是將擁塞窗口cwnd設置為ssthresh減半后的值囚似,然后執(zhí)行擁塞避免算法剩拢,讓cwnd緩慢變大。


快恢復
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末饶唤,一起剝皮案震驚了整個濱河市徐伐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌募狂,老刑警劉巖办素,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件角雷,死亡現(xiàn)場離奇詭異,居然都是意外死亡性穿,警方通過查閱死者的電腦和手機勺三,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來季二,“玉大人檩咱,你說我怎么就攤上這事】柘希” “怎么了刻蚯?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長桑嘶。 經(jīng)常有香客問我炊汹,道長,這世上最難降的妖魔是什么逃顶? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任讨便,我火速辦了婚禮,結果婚禮上以政,老公的妹妹穿的比我還像新娘霸褒。我一直安慰自己,他們只是感情好盈蛮,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布废菱。 她就那樣靜靜地躺著,像睡著了一般抖誉。 火紅的嫁衣襯著肌膚如雪殊轴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天袒炉,我揣著相機與錄音旁理,去河邊找鬼。 笑死我磁,一個胖子當著我的面吹牛孽文,可吹牛的內容都是我干的。 我是一名探鬼主播夺艰,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼芋哭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劲适?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厢蒜,失蹤者是張志新(化名)和其女友劉穎霞势,沒想到半個月后烹植,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡愕贡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年草雕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片固以。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡墩虹,死狀恐怖,靈堂內的尸體忽然破棺而出憨琳,到底是詐尸還是另有隱情诫钓,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布篙螟,位于F島的核電站菌湃,受9級特大地震影響,放射性物質發(fā)生泄漏遍略。R本人自食惡果不足惜惧所,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绪杏。 院中可真熱鬧下愈,春花似錦、人聲如沸蕾久。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腔彰。三九已至叫编,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霹抛,已是汗流浹背搓逾。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杯拐,地道東北人霞篡。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像端逼,于是被迫代替她去往敵國和親朗兵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容