TCP滑動窗口協(xié)議

TCP面向流的滑動窗口確認機制

TCP是面向字節(jié)流的删窒。

TCP消息確認機制

TCP消息確認機制如上圖所示,首先,每一條消息都有一個識別編號限番,每一條消息都能夠被獨立地確認,因此同一時刻可以發(fā)送多條信息呀舔。設備B定期發(fā)送給A一條發(fā)送限制參數(shù)弥虐,制約設備A一次能發(fā)送的消息最大數(shù)量。設備B可以對該參數(shù)進行調整媚赖,以控制設備A的數(shù)據(jù)流霜瘪。
為了提高速度,TCP并沒有按照字節(jié)單個發(fā)送而是將數(shù)據(jù)流劃分為片段惧磺。片段內所有字節(jié)都是一起發(fā)送和接收的颖对,因此也是一起確認的。確認機制沒有采用message ID字段磨隘,而是使用的片段內最后一個字節(jié)的sequence number缤底。因此一次可以處理不同的字節(jié)數(shù),這一數(shù)量即為片段內的sequence numb番捂。

TCP滑動窗口原理

1)對于TCP會話的發(fā)送方个唧,任何時候在其發(fā)送緩存內的數(shù)據(jù)都可以分為4類:

  • “已經發(fā)送并得到對端ACK的”,數(shù)據(jù)流中最早的字節(jié)已經發(fā)送并得到確認设预。這些數(shù)據(jù)是站在發(fā)送設備的角度來看的徙歼。如下圖:31個字節(jié)已經發(fā)送并確認。
  • “已經發(fā)送但還未收到對端ACK的”,已發(fā)送但尚未得到確認的字節(jié)魄梯。發(fā)送方在確認之前呼股,不認為這些數(shù)據(jù)已經被處理。如下圖:淺藍色部分画恰。
  • “未發(fā)送但對端允許發(fā)送的”彭谁,如下圖,綠色部分允扇。
  • “未發(fā)送且對端不允許發(fā)送”缠局,如下圖,橙色部分考润。

接收方允許發(fā)送方一次能容納的未確認的字節(jié)數(shù)狭园。這稱為發(fā)送窗口,有時也稱為窗口糊治。該窗口決定了發(fā)送方允許傳送的字節(jié)數(shù)唱矛,也是“已經發(fā)送但還未收到對端ACK的”和“未發(fā)送但對端允許發(fā)送的”這兩部之和(中間兩部分)。

當收到接收方新的ACK對于發(fā)送窗口中后續(xù)字節(jié)的確認時井辜,窗口滑動绎谦,滑動原理如下圖。

每一次確認接收以后粥脚,這一過程都會發(fā)生窃肠,從而讓窗口滑動過整個數(shù)據(jù)流以供傳輸。

2)對于TCP的接收方刷允,在某一時刻在它的接收緩存內存在3種冤留。“已接收”树灶,“未接收準備接收”纤怒,“未接收并未準備接收”(由于ACK直接由TCP協(xié)議棧回復天通,默認無應用延遲泊窘,不存在“已接收未回復ACK”)。其中“未接收準備接收”稱之為接收窗口土砂。

下面舉例就滑動窗口協(xié)議做出更詳細的說明州既,這里為了簡單起見設定發(fā)送方窗口大小為2,接受方大小為1萝映∥庖叮看下面圖:

一:初始態(tài),發(fā)送方沒有幀發(fā)出序臂,發(fā)送窗口前后沿相重合蚌卤。接收方0號窗口打開实束,等待接收0號幀;
二:發(fā)送方打開0號窗口逊彭,表示已發(fā)出0幀但尚確認返回信息咸灿。 此時接收窗口狀態(tài)不變;
三:發(fā)送方打開0侮叮、1號窗口避矢,表示0、1號幀均在等待確認之列囊榜。至此审胸,發(fā)送方打開的窗口數(shù)已達規(guī)定限度,在未收到新的確認返回幀之 前卸勺,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀砂沛。接收窗口此時狀態(tài)仍未變;
四:接收方已收到0號幀曙求,0號窗口關閉碍庵,1號窗口打開,表示準備接收1號幀悟狱。此時發(fā)送窗口狀態(tài)不 變静浴;
五:發(fā)送方收到接收方發(fā)來的0號幀確認返回信息,關閉0號窗口芽淡,表示從重發(fā)表中刪除0號幀马绝。此時接收窗口狀態(tài)仍不變
六:發(fā)送方繼續(xù)發(fā)送2號幀豆赏,2號窗口 打開挣菲,表示2號幀也納入待確認之列。至此掷邦,發(fā)送方打開的窗口又已達規(guī)定限度白胀,在未收到新的確認返回幀之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀抚岗,此時接收窗口狀態(tài) 仍不變或杠;
七:接收方已收到1號幀,1號窗口關閉宣蔚,2號窗口打開向抢,表示準備接收2號幀。此時發(fā)送窗口狀態(tài)不變胚委;
八:發(fā)送方收到接收方發(fā)來的1號幀收畢的確認信 息挟鸠,關閉1號窗口,表示從重發(fā)表中刪除1號幀亩冬。此時接收窗口狀態(tài)仍不變艘希。

發(fā)送窗口和接收窗口的關系

TCP是雙工的協(xié)議台丛,會話的雙方都可以同時接收惩嘉、發(fā)送數(shù)據(jù)。TCP會話的雙方都各自維護一個“發(fā)送窗口”和一個“接收窗口”。其中各自的“接收窗口”大小取決于應用他嫡、系統(tǒng)、硬件的限制(TCP傳輸速率不能大于應用的數(shù)據(jù)處理速率)扯再。各自的“發(fā)送窗口”則要求取決于對端通告的“接收窗口”传黄,要求相同。

滑動窗口的可靠性

TCP的滑動窗口的可靠性也是建立在“確認重傳”基礎上的凤壁。

發(fā)送窗口只有收到對端對于本段發(fā)送窗口內字節(jié)的ACK確認巍糯,才會移動發(fā)送窗口的左邊界。

接收窗口只有在前面所有的段都確認的情況下才會移動左邊界客扎。當在前面還有字節(jié)未接收但收到后面字節(jié)的情況下祟峦,窗口不會移動,并不對后續(xù)字節(jié)確認徙鱼。以此確保對端會對這些數(shù)據(jù)重傳宅楞。

應用實例

1.停止-等待協(xié)議

這時接受方的窗口和發(fā)送方的窗口大小都是1,1個比特就夠表示了袱吆,所以也叫1比特滑動窗口協(xié)議厌衙。發(fā)送方這時自然發(fā)送每次只能發(fā)送一個,并且必須等待這個數(shù)據(jù)包的ACK绞绒,才能發(fā)送下一個婶希。雖然在效率上比較低,帶寬利用率明顯較低蓬衡,不過在網絡環(huán)境較差喻杈,或是帶寬本身很低的情況下,還是適用的狰晚。

2.回退n步協(xié)議

由于停止等待協(xié)議效率太低筒饰,因此有了回退n-步協(xié)議,這也是滑動窗口協(xié)議真正的用處壁晒,這里發(fā)送的窗口大小為n瓷们,接受方的窗口仍然為1。具體看下面的圖秒咐,這里假設n=9: 首先發(fā)送方一口氣發(fā)送10個數(shù)據(jù)幀谬晕,前面兩個幀正確返回了,數(shù)據(jù)幀2出現(xiàn)了錯誤携取,這時發(fā)送方被迫重新發(fā)送2-8這7個幀攒钳,接受方也必須丟棄之前接受的3-8這幾個幀。 后退n協(xié)議的好處無疑是提高了效率歹茶,但是一旦網絡情況糟糕夕玩,則會導致大量數(shù)據(jù)重發(fā)你弦,反而不如上面的停等協(xié)議。

3.選擇重傳協(xié)議

后退n協(xié)議的問題是燎孟,當有錯誤幀出現(xiàn)后禽作,總是要重發(fā)該幀之后的所有幀,毫無疑問在網絡不是很好的情況下會進一步惡化網絡狀況揩页。
重傳協(xié)議便是用來解決這個問題旷偿。原理也很簡單,接收端總會緩存所有收到的幀爆侣,當某個幀出現(xiàn)錯誤時萍程,只會要求重傳這一個幀,只有當某個序號后的所有幀都正確收到后兔仰,才會一起提交給高層應用茫负。重傳協(xié)議的缺點在于接受端需要更多的緩存。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末乎赴,一起剝皮案震驚了整個濱河市忍法,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌榕吼,老刑警劉巖饿序,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羹蚣,居然都是意外死亡原探,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門顽素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咽弦,“玉大人,你說我怎么就攤上這事戈抄±牖#” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵划鸽,是天一觀的道長。 經常有香客問我戚哎,道長裸诽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任型凳,我火速辦了婚禮丈冬,結果婚禮上,老公的妹妹穿的比我還像新娘甘畅。我一直安慰自己埂蕊,他們只是感情好往弓,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓄氧,像睡著了一般函似。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喉童,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天撇寞,我揣著相機與錄音,去河邊找鬼堂氯。 笑死蔑担,一個胖子當著我的面吹牛,可吹牛的內容都是我干的咽白。 我是一名探鬼主播啤握,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼晶框!你這毒婦竟也來了恨统?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤三妈,失蹤者是張志新(化名)和其女友劉穎畜埋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畴蒲,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡悠鞍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了模燥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咖祭。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蔫骂,靈堂內的尸體忽然破棺而出么翰,到底是詐尸還是另有隱情,我是刑警寧澤辽旋,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布浩嫌,位于F島的核電站,受9級特大地震影響补胚,放射性物質發(fā)生泄漏码耐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一溶其、第九天 我趴在偏房一處隱蔽的房頂上張望骚腥。 院中可真熱鬧,春花似錦瓶逃、人聲如沸束铭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽契沫。三九已至带猴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠褪,已是汗流浹背浓利。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钞速,地道東北人贷掖。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像渴语,于是被迫代替她去往敵國和親苹威。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • TCP協(xié)議里窗口機制有2種:一種是固定的窗口大屑菪住牙甫;一種是滑動的窗口。這個窗口大小就是我們一次傳輸幾個數(shù)據(jù)调违。對所有數(shù)...
    元素周期表的十七君閱讀 813評論 0 1
  • 20.1 引言 在第15章我們看到TFTP使用了停止等待協(xié)議窟哺。數(shù)據(jù)發(fā)送方在發(fā)送下一個數(shù)據(jù)塊之前需要等待接收對已發(fā)送...
    張芳濤閱讀 854評論 0 2
  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記技肩,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的且轨,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評論 6 174
  • TCP/IP協(xié)議 作者:xinyuans 本文為參考TCP/IP詳解卷一虚婿,某些知識點加上了作者自己的理解旋奢,如有錯誤...
    xinyuans閱讀 787評論 0 1