網(wǎng)絡(luò)工程師(8)——TCP為什么可靠

我們知道IP只是“盡力”舆绎,并不保證可靠性,所以傳輸可靠性必須由TCP來完成们颜。

怎么保證可靠呢亿蒸?TCP提供了亂序重排、應(yīng)答確認(rèn)掌桩、報(bào)文重傳和流量控制四種機(jī)制边锁。

亂序重排、應(yīng)答確認(rèn)都跟序號(hào)有關(guān)波岛。由于網(wǎng)絡(luò)或“多線程”等因素茅坛,接收方收到的數(shù)據(jù)段很可能是亂序的,不過则拷,因?yàn)槊總€(gè)TCP封裝都有序號(hào)贡蓖,接收方重組起來非常容易。

發(fā)送方每發(fā)送一個(gè)數(shù)據(jù)段煌茬,如果都等著收到接收方的確認(rèn)后再發(fā)下一個(gè)斥铺,這效率太低了。我們?cè)诮忉孉cknowledgement Number確認(rèn)號(hào)時(shí)坛善,曾舉過一個(gè)栗子晾蜘,發(fā)送方的數(shù)據(jù)有1000字節(jié)邻眷,接收方收到后的確認(rèn)號(hào)填寫1001,是告訴發(fā)送方前面的都收到了剔交,下次從序號(hào)1001開始發(fā)肆饶。

那么,如果發(fā)送方發(fā)送了多個(gè)數(shù)據(jù)段岖常,共5000字節(jié)驯镊,接收方只需發(fā)一個(gè)確認(rèn)號(hào)為5001的報(bào)文,是不是就可以呢竭鞍?

沒錯(cuò)板惑,TCP就是這么干的!這就大大提高了效率偎快。至于一次收多少字節(jié)再發(fā)確認(rèn)冯乘,由接收方window決定。

就好像兩人打電話滨砍,聽對(duì)方說話時(shí)往湿,你時(shí)不時(shí)“嗯”一聲,表示你在聽惋戏。不必對(duì)方每說一句話你就“嗯”领追,當(dāng)然對(duì)方說了半天你不“嗯”也不行,對(duì)方會(huì)問“還在嗎”响逢,是不是這個(gè)理兒绒窑?

TCP的報(bào)文重傳有兩種獨(dú)立的辦法。

一種是超時(shí)重傳舔亭,發(fā)送方收不到確認(rèn)的時(shí)候用些膨。我們都知道網(wǎng)速并不是穩(wěn)定的,傳輸時(shí)的每個(gè)報(bào)文的延時(shí)也不一樣钦铺。TCP會(huì)根據(jù)報(bào)文的往返時(shí)間(RTT)自動(dòng)調(diào)整超時(shí)重傳時(shí)間(RTO)订雾。發(fā)送方每發(fā)一個(gè)報(bào)文段都會(huì)開始計(jì)時(shí),如果時(shí)間超過RTO還沒收到這個(gè)報(bào)文段的確認(rèn)矛洞,就重傳該報(bào)文段洼哎。

另一種方法是快速重傳,發(fā)送的數(shù)據(jù)在路上丟失的時(shí)候用沼本。

我們看下圖:

接收方收到序號(hào)1后噩峦,回復(fù)確認(rèn)號(hào)2,希望下次收到序號(hào)2的報(bào)文段抽兆,但卻亂序收到比序號(hào)2大的3识补、4、5報(bào)文段辫红,于是連續(xù)發(fā)出確認(rèn)號(hào)為2的報(bào)文段凭涂。如果發(fā)送方連續(xù)三次收到重復(fù)的確認(rèn)號(hào)祝辣,立即重發(fā)該報(bào)文段,而不管是否超時(shí)导盅。

接下來较幌,我們討論下TCP中的window窗口揍瑟。

剛才提到過白翻,window可以提高確認(rèn)效率,不必讓接收方為每個(gè)報(bào)文段都發(fā)確認(rèn)绢片。另外滤馍,window還有一個(gè)很重要的作用,那就是流量控制底循。

首先要明白一點(diǎn)巢株,應(yīng)用程序不論發(fā)送還是接收數(shù)據(jù),都會(huì)先把數(shù)據(jù)放入緩沖區(qū)熙涤,再?gòu)木彌_區(qū)中發(fā)出或讀取數(shù)據(jù)阁苞。就像秘書,先把事情整理歸納好祠挫,再一次性向你匯報(bào)那槽。

這個(gè)緩沖區(qū)大小,反映了應(yīng)用程序一次能處理數(shù)據(jù)的能力等舔。如果接收方應(yīng)用程序處理速度比發(fā)送方的發(fā)送速度慢骚灸,就會(huì)造成接收方緩沖區(qū)“溢出”。實(shí)際上慌植,發(fā)送方發(fā)送速度和接收方處理速度很難一致甚牲。

這就需要window來調(diào)整了。

TCP在三次握手建立連接時(shí)蝶柿,會(huì)協(xié)商雙方緩沖區(qū)window大小丈钙。如果因?yàn)榻邮辗教幚硭俣容^慢,接收方會(huì)通過window告知發(fā)送方交汤,實(shí)現(xiàn)動(dòng)態(tài)調(diào)整雏赦,避免“溢出”。

發(fā)送方會(huì)根據(jù)接收方確認(rèn)報(bào)文中的window值來調(diào)整每次發(fā)出多少報(bào)文蜻展,這叫“滑動(dòng)窗口”喉誊。

圖中的“發(fā)送方窗口大小”不僅會(huì)向左“滑動(dòng)”,它的大小也會(huì)根據(jù)網(wǎng)絡(luò)帶寬纵顾、時(shí)延變化及接收方window而動(dòng)態(tài)改變伍茄。關(guān)于這點(diǎn),我們以后在QoS中討論施逾。

TCP把數(shù)據(jù)可靠地傳輸完成后敷矫,還有一個(gè)重要工作例获,拆除連接。就像我們打完電話需要掛斷一樣曹仗。

TCP拆除連接需要“四次揮手”榨汤。


小Q:注意看TCP封裝中的window只占2個(gè)字節(jié),最大僅表示64K字節(jié)的緩沖區(qū)怎茫。這在網(wǎng)絡(luò)早期帶寬非常低收壕、電腦內(nèi)存很小的時(shí)候沒問題。但是現(xiàn)在這個(gè)值早就不夠用了轨蛤。怎么解決這個(gè)問題蜜宪?感興趣的小伙伴可以了解一下window乘積因子。

歡迎留言討論祥山。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圃验,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子缝呕,更是在濱河造成了極大的恐慌澳窑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件供常,死亡現(xiàn)場(chǎng)離奇詭異摊聋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)话侧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門栗精,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞻鹏,你說我怎么就攤上這事悲立。” “怎么了新博?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵薪夕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我赫悄,道長(zhǎng)原献,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任埂淮,我火速辦了婚禮姑隅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倔撞。我一直安慰自己讲仰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布痪蝇。 她就那樣靜靜地躺著鄙陡,像睡著了一般冕房。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趁矾,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天耙册,我揣著相機(jī)與錄音,去河邊找鬼毫捣。 笑死详拙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的培漏。 我是一名探鬼主播溪厘,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼胡本,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼牌柄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侧甫,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤珊佣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后披粟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒锻,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年守屉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惑艇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拇泛,死狀恐怖滨巴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俺叭,我是刑警寧澤恭取,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站熄守,受9級(jí)特大地震影響蜈垮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜裕照,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一攒发、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晋南,春花似錦惠猿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜒茄。三九已至,卻和暖如春餐屎,著一層夾襖步出監(jiān)牢的瞬間檀葛,已是汗流浹背查刻。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工虾宇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臭墨。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓藏鹊,卻偏偏與公主長(zhǎng)得像润讥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盘寡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 運(yùn)輸層協(xié)議概述 從通信和信息處理的角度看楚殿,運(yùn)輸層向它上面的應(yīng)用層提供通信服務(wù),它屬于面向通信部分的最高層竿痰,同時(shí)也是...
    srtianxia閱讀 2,408評(píng)論 0 2
  • 如果你在學(xué)習(xí)這門課程脆粥,僅僅為了理解網(wǎng)絡(luò)工作原理,那么只要了解TCP是可靠傳輸影涉,數(shù)據(jù)傳輸丟失時(shí)會(huì)重傳就可以了变隔。如果你...
    云時(shí)之間閱讀 682評(píng)論 1 3
  • 目錄: TCP是什么TCP報(bào)文結(jié)構(gòu)TCP連接過程TCP狀態(tài)轉(zhuǎn)移TCP流量控制 —— 滑動(dòng)窗口TCP擁塞控制TCP可...
    Katou_Megumi閱讀 1,349評(píng)論 0 4
  • 端口與進(jìn)程 TCP 的包是不包含 IP 地址信息的,那是 IP 層上的事蟹倾,但是有源端口和目的端口匣缘。 就是說,端口這...
    XLsn0w閱讀 745評(píng)論 2 4
  • 六鲜棠、TCP可靠傳輸?shù)膶?shí)現(xiàn) 首先介紹以字節(jié)為單位的滑動(dòng)窗口肌厨。為了講述可靠傳輸原理的方便,假定數(shù)據(jù)傳輸只在一個(gè)方向進(jìn)行...
    dmmy大印閱讀 1,699評(píng)論 0 1