TCP10問

1.TCP建立連接時需要幾次握手红竭, 斷開連接需要幾次握手艰赞?

TCP建立連接需要三次握手浴栽, 斷開連接要四次握手。現(xiàn)有客戶端A發(fā)送數(shù)據(jù)到服務(wù)端B:

  • 在建立連接時客戶端首先發(fā)送SYN包請求建立連接涎劈。
  • 當服務(wù)器收到SYN包后發(fā)送ACK+SYN包針對受到的SYN包應(yīng)答广凸。
  • 客戶端受到服務(wù)端的ACK應(yīng)答后發(fā)送ACK包,針對SYN的確認應(yīng)答蛛枚。此時三次握手建立連接谅海。

當客戶端要斷開連接時共四次握手:

  • 客戶端發(fā)送FIN包請求斷開連接。
  • 服務(wù)器受到客戶端消息蹦浦, 發(fā)送ACK包應(yīng)答扭吁。
  • 服務(wù)端發(fā)送FIN包請求斷開連接。
  • 客戶端發(fā)送ACK應(yīng)該服務(wù)器的斷開請求盲镶。

2.客戶端每發(fā)送一個包侥袜, 服務(wù)器都要返回確認應(yīng)答嗎

當客戶端每次發(fā)送數(shù)據(jù)包時, 服務(wù)器端不一定發(fā)送確認應(yīng)答溉贿, 當引入滑動窗口概念后枫吧,為了減少網(wǎng)絡(luò)消耗。服務(wù)器可以每接受到兩個請求包再做一次應(yīng)答(延遲應(yīng)答)顽照, 也可以接受完包后由蘑,將處理完的數(shù)據(jù)一起作為返回數(shù)據(jù)(稍代應(yīng)答)。

3.TCP 發(fā)送/接受數(shù)據(jù)的大小

TCP在三次握手建立連接時就會確定發(fā)送數(shù)據(jù)包的大小MSS(Maximun Segment Size)代兵。在建立連接時尼酿, TCP請求/確認包的首部會寫入MSS信息。此時會選擇一個較小的MISS作為每次發(fā)送數(shù)據(jù)的最大長度植影。 當TCP發(fā)送大量數(shù)據(jù)的時候裳擎, 會將數(shù)據(jù)分割成不超過MSS的數(shù)據(jù)分批發(fā)送。

4.TCP如何將大量數(shù)據(jù)切片處理后發(fā)送/重發(fā)

首先TCP包的首部中有兩個字段序列號(Destination Port), 確認應(yīng)答號(Acknowledgement Number)思币÷瓜欤客戶端對發(fā)送的數(shù)據(jù)在首部的序列號中寫入數(shù)據(jù)段的編號羡微, 服務(wù)器收到數(shù)據(jù)段后查詢序列號跟數(shù)據(jù)的長度,并計算出下次應(yīng)該接受的序列號并寫入確認應(yīng)答號作為確認應(yīng)答發(fā)送出去惶我。TCP根據(jù)序列號根和確認應(yīng)答號將大量數(shù)據(jù)切片發(fā)送妈倔。

5.TCP窗口有什么用

TCP通過窗口提高發(fā)送確認應(yīng)答速度。TCP傳輸以一個段為單位绸贡,每發(fā)送一次進行一次確認應(yīng)答盯蝴。包的往返時間越長通信性能越低。為了解決這個問題TCP引入的窗口的概念听怕, 此時TCP并不是等到接受到確認應(yīng)答后才發(fā)送數(shù)據(jù)捧挺。 而是一次性發(fā)送多個數(shù)據(jù)段(發(fā)送數(shù)據(jù)段的多少取決于窗口的大小), 主機在未收到確認回復(fù)之前是要保存已經(jīng)發(fā)送過的數(shù)據(jù)尿瞭, 為的是重新發(fā)送闽烙。

TCP_窗口_發(fā)送.png

6. 在使用窗口時, 服務(wù)器沒有收到某一個數(shù)據(jù)段声搁, 或者主機沒有收到服務(wù)器的確認消息怎么辦

窗口在一定程度上比較大時黑竞, 即使有少部分的確認應(yīng)答丟失時, 也不會進行數(shù)據(jù)重發(fā)疏旨√埽可以通過下一個確認應(yīng)答確認。

窗口丟失確認應(yīng)答.png

上圖中充石, 窗口丟失了1001的確認應(yīng)答。雖然客戶端沒有收到相應(yīng)的確認應(yīng)答霞玄。 但是當收到2001的確認應(yīng)答(提示服務(wù)器骤铃, 我想收到從2001開始的數(shù)據(jù))時,就會以為服務(wù)器收到了1001的數(shù)據(jù)段坷剧。

當一段報文丟失導(dǎo)致服務(wù)器沒有收到惰爬, 那么服務(wù)器就會發(fā)送報文提示客戶端(服務(wù)器要接收從xxxx開始的報文)。如果客戶端連續(xù)收到相同的請求時惫企, 則會發(fā)送相應(yīng)的數(shù)據(jù)報文撕瞧。

窗口報文丟失重發(fā).png

7.窗口大小的值是由誰決定的

窗口的大小是由接受端主機決定的, TCP首部中專門有一個字段來通知窗口的大小狞尔。接受主機將自己的緩沖區(qū)大小放入這個字段中通知給發(fā)送端(根據(jù)緩沖區(qū)的大小丛版, 隨時設(shè)置窗口大小發(fā)送給發(fā)送段從而控制發(fā)送量)。發(fā)送端會根據(jù)接受主機提示偏序, 對數(shù)據(jù)的發(fā)送量進行控制页畦。

根據(jù)緩沖區(qū)大小控制窗口.png

8.剛開始通信的時候, 窗口的大小是如何確定的**

由于兩臺主機間的網(wǎng)絡(luò)可能很復(fù)雜研儒,通過廣域網(wǎng)時豫缨,中間的路由器轉(zhuǎn)發(fā)能力可能是瓶頸独令。也就是說,如果一方簡單的按照另一方主機三次握手時通告的滑動窗口大小來發(fā)送數(shù)據(jù)的話好芭,可能會使得網(wǎng)絡(luò)上的轉(zhuǎn)發(fā)路由器性能雪上加霜燃箭,最終丟失更多的分組。在通信一開始就會通過叫做慢啟動的算法得一個值舍败, 對發(fā)送數(shù)量進行控制招狸。這個值就是所謂的阻塞窗口, 阻塞窗口的大小不會超過滑動窗口瓤湘。

9.MSS會改變了嗎?

MSS就是為了避免IP層分片瓢颅,在建立握手時告知對方期望接收的MSS值并不一定靠得住。因為這個值是預(yù)估的弛说,TCP連接上的兩臺主機若處于不同的網(wǎng)絡(luò)中挽懦,那么,連接上可能有許多中間網(wǎng)絡(luò)木人,這些網(wǎng)絡(luò)分別具有不同的數(shù)據(jù)鏈路層信柿,這樣,TCP連接上有許多個MTU醒第。特別是渔嚷,若中間途徑的MTU小于兩臺主機所在的網(wǎng)絡(luò)MTU時,選定的MSS仍然太大了稠曼,會導(dǎo)致中間路由器出現(xiàn)IP層的分片形病。所以這個時候需要重新計算MSS大小。

怎樣避免中間網(wǎng)絡(luò)可能出現(xiàn)的分片呢霞幅?
通過IP頭部的DF標志位漠吻,這個標志位是告訴IP報文所途經(jīng)的所有IP層代碼:不要對這個報文分片。如果一個IP報文太大必須要分片司恳,則直接返回一個ICMP錯誤途乃,說明必須要分片了,且待分片路由器網(wǎng)絡(luò)接受的MTU值扔傅。這樣耍共,連接上的發(fā)送方主機就可以重新確定MSS。

10. Nagle算法有什么用猎塞?

Nagle算法主要是提高網(wǎng)絡(luò)利用率试读。如果發(fā)送端有數(shù)據(jù),但是發(fā)送端數(shù)據(jù)很小的話則進行延遲發(fā)送的一種機制荠耽。各種做法可能造成網(wǎng)絡(luò)延遲鹏往。

  • 延遲確認應(yīng)答
    如果接受端受到消息后立即應(yīng)答的話, 那么可能會返回一個小的窗口值(剛接收完緩沖區(qū)比較滿)。而是選擇過一段時間應(yīng)應(yīng)答伊履。事實上也不需要每次接受都需要應(yīng)答韩容。據(jù)大多數(shù)采用接收兩個數(shù)據(jù)段返回一次應(yīng)答。
  • 稍帶應(yīng)答
    TCP包中既能發(fā)送數(shù)據(jù)也能發(fā)送應(yīng)答的一種機制唐瀑。不過捎帶應(yīng)答需要服務(wù)器處理完數(shù)據(jù)并將處理完回執(zhí)的數(shù)據(jù)返回為止群凶。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哄辣,隨后出現(xiàn)的幾起案子请梢,更是在濱河造成了極大的恐慌,老刑警劉巖力穗,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毅弧,死亡現(xiàn)場離奇詭異,居然都是意外死亡当窗,警方通過查閱死者的電腦和手機够坐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崖面,“玉大人元咙,你說我怎么就攤上這事∥自保” “怎么了庶香?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長简识。 經(jīng)常有香客問我赶掖,道長,這世上最難降的妖魔是什么七扰? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任倘零,我火速辦了婚禮,結(jié)果婚禮上戳寸,老公的妹妹穿的比我還像新娘。我一直安慰自己拷泽,他們只是感情好疫鹊,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著司致,像睡著了一般拆吆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脂矫,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天枣耀,我揣著相機與錄音,去河邊找鬼庭再。 笑死捞奕,一個胖子當著我的面吹牛牺堰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颅围,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼伟葫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了院促?” 一聲冷哼從身側(cè)響起筏养,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎常拓,沒想到半個月后渐溶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡弄抬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年茎辐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眉睹。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡荔茬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竹海,到底是詐尸還是另有隱情慕蔚,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布斋配,位于F島的核電站孔飒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艰争。R本人自食惡果不足惜坏瞄,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甩卓。 院中可真熱鬧鸠匀,春花似錦、人聲如沸逾柿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽机错。三九已至爬范,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弱匪,已是汗流浹背青瀑。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斥难。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓枝嘶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蘸炸。 傳聞我的和親對象是個殘疾皇子躬络,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

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

  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記搭儒,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評論 0 8
  • 18.1 引言 TCP是一個面向連接的協(xié)議穷当。無論哪一方向另一方發(fā)送數(shù)據(jù)之前,都必須先在雙方之間建立一條連接淹禾。本章將...
    張芳濤閱讀 3,344評論 0 13
  • 1.這篇文章不是本人原創(chuàng)的馁菜,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評論 6 174
  • 簡介 用簡單的話來定義tcpdump铃岔,就是:dump the traffic on a network汪疮,根據(jù)使用者...
    保川閱讀 5,941評論 1 13
  • 24.1 引言 TCP已經(jīng)在從1200 b/s的撥號SLIP鏈路到以太數(shù)據(jù)鏈路上運行了許多年。在80年代和90年代...
    張芳濤閱讀 1,472評論 0 3