TCP數(shù)據(jù)的傳輸過程

建立連接后构诚,兩臺主機就可以相互傳輸數(shù)據(jù)了蚌斩。如下圖所示:

圖1:TCP 套接字的數(shù)據(jù)交換過程

上圖給出了主機A分2次(分2個數(shù)據(jù)包)向主機B傳遞200字節(jié)的過程。首先唤反,主機A通過1個數(shù)據(jù)包發(fā)送100個字節(jié)的數(shù)據(jù)凳寺,數(shù)據(jù)包的 Seq 號設(shè)置為 1200。主機B為了確認這一點彤侍,向主機A發(fā)送 ACK 包肠缨,并將 Ack 號設(shè)置為 1301。為了保證數(shù)據(jù)準確到達盏阶,目標機器在收到數(shù)據(jù)包(包括SYN包晒奕、FIN包、普通數(shù)據(jù)包等)包后必須立即回傳ACK包名斟,這樣發(fā)送方才能確認數(shù)據(jù)傳輸成功脑慧。
此時 Ack 號為 1301 而不是 1201,原因在于 Ack 號的增量為傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)砰盐。假設(shè)每次 Ack 號不加傳輸?shù)淖止?jié)數(shù)闷袒,這樣雖然可以確認數(shù)據(jù)包的傳輸,但無法明確100字節(jié)全部正確傳遞還是丟失了一部分岩梳,比如只傳遞了80字節(jié)囊骤。因此按如下的公式確認 Ack 號:Ack號 = Seq號 + 傳遞的字節(jié)數(shù) + 1

與三次握手協(xié)議相同,最后加 1 是為了告訴對方要傳遞的 Seq 號冀值。下面分析傳輸過程中數(shù)據(jù)包丟失的情況也物,如下圖所示:
圖2:TCP套接字數(shù)據(jù)傳輸過程中發(fā)生錯誤

上圖表示通過 Seq 1301 數(shù)據(jù)包向主機B傳遞100字節(jié)的數(shù)據(jù),但中間發(fā)生了錯誤列疗,主機B未收到滑蚯。經(jīng)過一段時間后,主機A仍未收到對于 Seq 1301 的ACK確認抵栈,因此嘗試重傳數(shù)據(jù)告材。為了完成數(shù)據(jù)包的重傳,TCP套接字每次發(fā)送數(shù)據(jù)包時都會啟動定時器竭讳,如果在一定時間內(nèi)沒有收到目標機器傳回的 ACK 包创葡,那么定時器超時,數(shù)據(jù)包會重傳绢慢。上圖演示的是數(shù)據(jù)包丟失的情況灿渴,也會有 ACK 包丟失的情況洛波,一樣會重傳。
重傳超時時間(RTO, Retransmission Time Out)
這個值太大了會導致不必要的等待骚露,太小會導致不必要的重傳蹬挤,理論上最好是網(wǎng)絡(luò) RTT 時間,但又受制于網(wǎng)絡(luò)距離與瞬態(tài)時延變化棘幸,所以實際上使用自適應(yīng)的動態(tài)算法(例如 Jacobson 算法和 Karn 算法等)來確定超時時間焰扳。往返時間(RTT,Round-Trip Time)表示從發(fā)送端發(fā)送數(shù)據(jù)開始误续,到發(fā)送端收到來自接收端的 ACK 確認包(接收端收到數(shù)據(jù)后便立即確認)吨悍,總共經(jīng)歷的時延。
重傳次數(shù)
TCP數(shù)據(jù)包重傳次數(shù)根據(jù)系統(tǒng)設(shè)置的不同而有所區(qū)別蹋嵌。有些系統(tǒng)育瓜,一個數(shù)據(jù)包只會被重傳3次,如果重傳3次后還未收到該數(shù)據(jù)包的 ACK 確認栽烂,就不再嘗試重傳躏仇。但有些要求很高的業(yè)務(wù)系統(tǒng),會不斷地重傳丟失的數(shù)據(jù)包腺办,以盡最大可能保證業(yè)務(wù)數(shù)據(jù)的正常交互焰手。最后需要說明的是,發(fā)送端只有在收到對方的 ACK 確認包后怀喉,才會清空輸出緩沖區(qū)中的數(shù)據(jù)书妻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市躬拢,隨后出現(xiàn)的幾起案子驻子,更是在濱河造成了極大的恐慌,老刑警劉巖估灿,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缤剧,居然都是意外死亡馅袁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門荒辕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汗销,“玉大人,你說我怎么就攤上這事抵窒〕谡耄” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵李皇,是天一觀的道長削茁。 經(jīng)常有香客問我宙枷,道長,這世上最難降的妖魔是什么茧跋? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任慰丛,我火速辦了婚禮,結(jié)果婚禮上瘾杭,老公的妹妹穿的比我還像新娘诅病。我一直安慰自己,他們只是感情好粥烁,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讨阻,像睡著了一般变勇。 火紅的嫁衣襯著肌膚如雪搀绣。 梳的紋絲不亂的頭發(fā)上链患,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天纲仍,我揣著相機與錄音郑叠,去河邊找鬼乡革。 笑死摊腋,一個胖子當著我的面吹牛视粮,可吹牛的內(nèi)容都是我干的蕾殴。 我是一名探鬼主播区宇,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼炉爆,長吁一口氣:“原來是場噩夢啊……” “哼芬首!你這毒婦竟也來了郁稍?” 一聲冷哼從身側(cè)響起耀怜,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤从诲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俊性,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描扯,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拯勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屎飘。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡钦购,死狀恐怖押桃,靈堂內(nèi)的尸體忽然破棺而出唱凯,到底是詐尸還是另有隱情磕昼,我是刑警寧澤票从,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布峰鄙,位于F島的核電站发框,受9級特大地震影響梅惯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜葫哗,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亿扁。 院中可真熱鬧捺典,春花似錦、人聲如沸从祝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至擎浴,卻和暖如春员咽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贮预。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工贝室, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萌狂。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓档玻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茫藏。 傳聞我的和親對象是個殘疾皇子误趴,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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

  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學習博客系列博客是一部非常精彩的學習筆記务傲,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評論 0 8
  • 【計算機網(wǎng)絡(luò)】傳輸層 傳輸層協(xié)議概述 傳輸層協(xié)議為運行在不同host上的進程提供了一種邏輯通信機制凉当。使得端到端不需...
    666真666閱讀 1,976評論 0 4
  • 傳輸層-TCP, TCP頭部結(jié)構(gòu) 售葡,TCP序列號和確認號詳解 TCP主要解決下面的三個問題 1.數(shù)據(jù)的可靠傳輸...
    抓兔子的貓閱讀 4,502評論 1 46
  • 套接字選項SO_RESUEADDR 即使端口處于2MSL狀態(tài)看杭,使用該選項,仍然能夠在該端口建立連接挟伙。服務(wù)器常會設(shè)置...
    Myth52125閱讀 1,401評論 0 0
  • 年年此刻倍心酸楼雹,百卉難尋舊汶川。 猶泣亡童伸血手尖阔,還驚大地化泥丸贮缅。 留將日月江山穩(wěn),剩以春秋草木歡介却。 長是中華多毅...
    墨言之閱讀 982評論 12 39