(十一)TCP窗口調(diào)整與流控

????????前文已經(jīng)介紹過了TCP滑動窗口大小的重要性。在客戶端與服務器的連接中拱镐,客戶端告知服務器它一次希望從服務器接收多少字節(jié)數(shù)據(jù),這是客戶端的接收窗口持际,即服務器的發(fā)送窗口沃琅。類似地,服務器告知客戶端一次希望從客戶端接收多少字節(jié)數(shù)據(jù)蜘欲,也就是服務器的接收窗口和客戶端的發(fā)送窗口益眉。

????????要理解為什么窗口大小會產(chǎn)生波動,首先需要理解它的含義姥份。最簡單的方式是它代表了設(shè)備對于特定連接的接收緩存大小郭脂。即,窗口大小代表一個設(shè)備一次能夠從對端處理多少數(shù)據(jù)澈歉,之后再傳遞給應用層處理展鸡。

????????當服務器從客戶端接收數(shù)據(jù),它就將數(shù)據(jù)放在緩存中埃难,服務器必須對數(shù)據(jù)做以下兩步操作:

? ??????確認:服務器必須將確認信息發(fā)回客戶端以表明數(shù)據(jù)接收莹弊。

? ??????傳輸:服務器必須處理數(shù)據(jù),將它傳遞給目標應用程序處理涡尘。

????????區(qū)分開這兩件事情是非常重要的忍弛。關(guān)鍵在于基本的滑動窗口機制中,數(shù)據(jù)于接收時確認考抄,但并不一定立即從緩存中傳輸出去细疚。也就意味著當接收數(shù)據(jù)速度快于接收TCP處理速度時,緩存有可能被填滿川梅。當這一情況發(fā)生時疯兼,接收設(shè)備需要調(diào)整窗口大小已防止緩存過載。

????????由于窗口大小能夠以這種方式管理連接兩端設(shè)備數(shù)據(jù)流的速率挑势,TCP就是以這種方式實現(xiàn)流控這一傳輸層非常典型的任務镇防。流控對于TCP來說是很重要的,因為它是設(shè)備間互通狀態(tài)的方式潮饱。通過增加或縮小窗口大小来氧,服務器和客戶端能夠確保對端發(fā)送數(shù)據(jù)的速度等同于處理速度。

減小窗口大小以降低發(fā)送速率:

????????首先看一下客戶端到服務器的數(shù)據(jù)傳輸,如下圖所示


????????客戶端傳輸140字節(jié)數(shù)據(jù)至服務器啦扬。之后中狂,客戶端的可用窗口還剩下220字節(jié):發(fā)送窗口的360字節(jié)減去發(fā)送的140字節(jié)。

????????一段時間過后扑毡,服務器接收到140字節(jié)并將它們放在緩存中∥搁牛現(xiàn)在,理想的情況下瞄摊,140字節(jié)進入緩存勋又,確認之后立刻從緩存移出。也就是說换帜,緩存有足夠的大小來容納客戶端發(fā)送的所有數(shù)據(jù)楔壤。緩存的空閑空間維持在360字節(jié),因此告知客戶端窗口大小保持不變惯驼。

????????只要服務器處理速度和數(shù)據(jù)進入速度相同蹲嚣,窗口大小就會保持在360字節(jié)∷钌客戶端在接收到140字節(jié)的確認信息以及窗口大小保持不變的信息之后隙畜,將360字節(jié)窗口向右移動140字節(jié)。由于現(xiàn)在未確認字節(jié)數(shù)為0说贝,因此客戶端又可以發(fā)送360字節(jié)數(shù)據(jù)议惰。對應于之前可用窗口的220字節(jié),加上剛剛確認的140字節(jié)數(shù)據(jù)乡恕。

????????然而换淆,現(xiàn)實中服務器可能需要處理數(shù)十,數(shù)百乃至數(shù)千個TCP連接几颜。TCP可能無法立刻處理數(shù)據(jù)倍试,或應用應用程序本身無法接收140字節(jié)數(shù)據(jù)。任何一種情況下蛋哭,服務器TCP都無法立刻將140字節(jié)從緩存中移出县习。這時,除了發(fā)回確認信息給客戶端以外谆趾,服務器會想要告知客戶端更改窗口大小躁愿,以表示緩存已經(jīng)被部分寫入了。

????????假設(shè)我們接收到140字節(jié)沪蓬,但只能發(fā)送40字節(jié)給應用程序彤钟,緩存中剩下100字節(jié)。當發(fā)送140字節(jié)的確認信息跷叉,服務器將發(fā)送窗口縮小100字節(jié)逸雹,至260字節(jié)营搅。當客戶端從服務器接收到這一片段,它將會看到140字節(jié)的確認信息并將窗口向右滑動140字節(jié)梆砸。在滑動過程中转质,將大小縮減至260字節(jié)√溃可以認為將窗口左端滑動140字節(jié)休蟹,但右端僅滑動40字節(jié)。新的稍小一些的窗口保證服務器從客戶端接收最多260字節(jié)數(shù)據(jù)日矫,以適應接收緩存中的剩余空間赂弓,如下圖的1-3步所示


縮減發(fā)送窗口以停止發(fā)送新數(shù)據(jù):

????????如果服務器無法接收任何新數(shù)據(jù)會怎么樣呢?假設(shè)客戶端下一次傳輸180字節(jié)哪轿,但是服務器太忙碌而無法對其進行處理拣展。這種情況下,服務器將這180字節(jié)緩存下來缔逛,并且在確認信息中,將窗口大小從260字節(jié)縮減為80字節(jié)姓惑。當客戶端接收到180字節(jié)的確認信息褐奴,它也會看到窗口縮減了180字節(jié),它會滑動與縮減同樣的大小于毙,告知服務器:我確認接收180字節(jié)數(shù)據(jù)敦冬,但不允許你再發(fā)送新的數(shù)據(jù)。也可以看作窗口左端滑動180字節(jié)唯沮,但右端維持不動脖旱。只要右端不移動,客戶端就無法發(fā)送更多數(shù)據(jù)介蛉。這一過程顯示在上圖的4-6中萌庆。

關(guān)閉發(fā)送窗口:

????????窗口調(diào)整可以通過雙方設(shè)備來完成。如果服務器從客戶端接收的數(shù)據(jù)持續(xù)快于推送給應用的速率币旧,則服務器將會繼續(xù)減小接收窗口践险。假設(shè)發(fā)送窗口減小至80字節(jié),客戶端發(fā)送第三個請求吹菱,長度為80字節(jié)巍虫,但服務器仍處于繁忙狀態(tài)。之后服務器將窗口減小為0鳍刷,也稱為關(guān)閉窗口。這一信息告知客戶端服務器已經(jīng)過載瓦胎,它需要徹底停止發(fā)送數(shù)據(jù)凛捏,如上圖最后一步所示担忧。之后,當服務器負載減輕時惩猫,可以再次增加這一連接的窗口,允許更多數(shù)據(jù)傳輸奶镶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末左刽,一起剝皮案震驚了整個濱河市迄靠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疫诽,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異网持,居然都是意外死亡,警方通過查閱死者的電腦和手機辟汰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門翩蘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郎任,你說我怎么就攤上這事胶台。” “怎么了铸磅?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羞迷。 經(jīng)常有香客問我,道長葫慎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任昼接,我火速辦了婚禮爽篷,結(jié)果婚禮上逐工,老公的妹妹穿的比我還像新娘。我一直安慰自己泪喊,他們只是感情好蚓再,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布护姆。 她就那樣靜靜地躺著,像睡著了一般卵皂。 火紅的嫁衣襯著肌膚如雪须床。 梳的紋絲不亂的頭發(fā)上渐裂,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音族阅,去河邊找鬼篓跛。 笑死,一個胖子當著我的面吹牛坦刀,可吹牛的內(nèi)容都是我干的愧沟。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鲤遥,長吁一口氣:“原來是場噩夢啊……” “哼沐寺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盖奈,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤混坞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钢坦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體究孕,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年爹凹,在試婚紗的時候發(fā)現(xiàn)自己被綠了厨诸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡禾酱,死狀恐怖微酬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颤陶,我是刑警寧澤颗管,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站指郁,受9級特大地震影響忙上,放射性物質(zhì)發(fā)生泄漏拷呆。R本人自食惡果不足惜闲坎,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茬斧。 院中可真熱鬧腰懂,春花似錦、人聲如沸项秉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娄蔼。三九已至怖喻,卻和暖如春底哗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锚沸。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工跋选, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哗蜈。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓前标,卻偏偏與公主長得像,于是被迫代替她去往敵國和親距潘。 傳聞我的和親對象是個殘疾皇子炼列,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

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