這一次,徹底搞懂TCP3次握手、4次揮手好嗎屡限?

前言:相信有過面試經(jīng)歷的朋友們多多少少都會被問到經(jīng)典的TCP3次握手品嚣、4次揮手過程問題,為何看了網(wǎng)上博客千百遍钧大,即使當(dāng)時記住了過一段時間又忘記了翰撑?原因就在于你沒有真正的掌握,看死記硬背是不可能掌握的啊央,只有深入了解它的底層原理才算真正掌握眶诈,才能應(yīng)對面試官繼續(xù)深入的挖掘提問。這幾天為了徹底掌握TCP原理沒少花時間瓜饥,自覺得不敢說完全掌握逝撬,只是當(dāng)做學(xué)習(xí)筆記記錄下來,留給自己或者其他需要的人方便查看乓土。

其實(shí)3次握手和4次揮手宪潮,總結(jié)起來就一句話:為了確保TCP正確地建立連接和斷開連接

廢話不多說先看一下被看了無數(shù)遍的3次握手流程圖:


TCP三次握手.png

問:SYN、seq趣苏、ACK狡相、ack到底什么鬼,老是記不住

  • 記住一點(diǎn)食磕,凡是大寫的尽棕,都叫標(biāo)記位(Flag),標(biāo)記位就是為了讓雙方知道此時的連接是請求連接芬为,還是請求的確認(rèn)萄金。
  • 其他的小寫都是序號或確認(rèn)號蟀悦,代表發(fā)送數(shù)據(jù)具體的值媚朦。
  • SYN請求號標(biāo)記位,當(dāng) SYN=1日戈、ACK=0時询张,表明這是一個建立連接的請求 。
  • seq序號浙炼,代表請求方將會發(fā)送的數(shù)據(jù)的第一個字節(jié)編號份氧。
  • ACK確認(rèn)號標(biāo)記位,當(dāng)ACK = 1時弯屈,確認(rèn)號標(biāo)記字段才有效蜗帜。
  • ack返回的確認(rèn)號, 注意是小寫的资厉,代表 接收方 收到收據(jù)后(也就是前面說的seq)厅缺,這個確認(rèn)號代表 希望對方下一次傳輸數(shù)據(jù)的第一個字節(jié)編號
知道了上面的概念后我們再來詳細(xì)分析具體3尺握手流程
  1. 客戶端第一次發(fā)送一條連接請求數(shù)據(jù),SYN = 1,ACK = 0就是代表建立連接請求湘捎,發(fā)送的具體數(shù)據(jù)第一個字節(jié)編號記為x诀豁,賦值seq。
  2. 服務(wù)端收到請求后窥妇,返回 客戶端的SYN = 1,加上自己的確認(rèn)號ACK=1,發(fā)送的具體數(shù)據(jù)第一個字節(jié)編號記為y舷胜,賦值seq,希望客戶端下一次返回編號x + 1個字節(jié)為止的數(shù)據(jù)活翩,記為ack = x + 1烹骨。
  3. 客戶端收到服務(wù)端返回的請求確認(rèn)后,再次發(fā)送數(shù)據(jù)纱新,原封不動返回ACK = 1,這里就不需要再發(fā)送 SYN=1了展氓,為什么呢?因?yàn)榇藭r并不是跟服務(wù)端進(jìn)行連接請求脸爱,而是連接確認(rèn)遇汞,所以只需要返回ACK = 1代表確認(rèn),同樣的簿废,發(fā)送的具體數(shù)據(jù)第一個字節(jié)編號記為seq = x + 1空入,希望服務(wù)端下次傳輸?shù)臄?shù)據(jù)第一個字節(jié)編號記為ack = y + 1

擴(kuò)展:狀態(tài)解讀

  • CLOSED: client處于關(guān)閉狀態(tài)
  • LISTEN: server處于監(jiān)聽狀態(tài),等待client連接
  • SYN-RCVD: 表示server接受到了SYN報文族檬,當(dāng)收到client的ACK報文后歪赢,它會進(jìn)入到ESTABLISHED狀態(tài)
  • SYN-SENT: 表示client已發(fā)送SYN報文,等待server的第2次握手
  • ESTABLISHED: 表示連接已經(jīng)建立

自以為學(xué)廢了单料?提問:為什么TCP建立連接時候埋凯,要進(jìn)行3次握手,2次不行嗎扫尖?

一句話的答案:主要目的:防止server端一直等待白对,浪費(fèi)資源

詳細(xì)解釋:
  1. 如果建立連接只需要2次握手,可能會出現(xiàn)的情況
    • 假設(shè)client發(fā)出的第一個連接請求報文段换怖,因?yàn)榫W(wǎng)絡(luò)延遲甩恼,在連接釋放以后的某個時間才到達(dá)server 。
    • 本來這是一個早已失效的連接請求沉颂,但server收到此失效的請求后条摸,誤認(rèn)為是client再次發(fā)出的一個新的連接請求 。
    • 于是server就向client發(fā)出確認(rèn)報文段铸屉,同意建立連接
    • 如果不采用“3次握手”钉蒲,那么只要server發(fā)出確認(rèn),新的連接就建立了 彻坛。
    • 由于現(xiàn)在client并沒有真正想連接服務(wù)器的意愿顷啼,因此不會理睬server的確認(rèn)帆赢,也不會向server發(fā)送數(shù)據(jù) 。
    • 但server卻以為新的連接已經(jīng)建立线梗,并一直等待client發(fā)來數(shù)據(jù)椰于,這樣,server的很多資源就白白浪費(fèi)掉了
  2. 采用“三次握手”的辦法可以防止上述現(xiàn)象發(fā)生 仪搔,例如上述情況瘾婿,client沒有向server的確認(rèn)發(fā)出確認(rèn),server由于收不到確認(rèn)烤咧,就知道client并沒有要求建立連接偏陪。

一圖勝千言

TCP2次握手和3尺握手區(qū)別.png

問:第3次握手失敗了,會怎么處理?

  • 此時server的狀態(tài)為SYN-RCVD煮嫌,若等不到client的ACK笛谦,server會重新發(fā)送SYN+ACK包
  • 如果server多次重發(fā)SYN+ACK都等不到client的ACK,就會發(fā)送RST包昌阿,強(qiáng)制關(guān)閉連接
  • 總結(jié):輪詢饥脑,多次沒有響應(yīng)關(guān)閉連接

四次揮手

一圖勝千言
四次揮手drawio.png
FIN = 1:代表要求釋放連接

問:釋放連接為什么要4次?3次不行嗎懦冰?

  • TCP是全雙工模式
  • 第1次揮手:當(dāng)主機(jī)1發(fā)出FIN報文段時
  • 表示主機(jī)1告訴主機(jī)2灶轰,主機(jī)1已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是刷钢,此時主機(jī)1還是可以接受來自主機(jī)2的數(shù)據(jù)
  • 第2次揮手:當(dāng)主機(jī)2返回ACK報文段時
  • 表示主機(jī)2已經(jīng)知道主機(jī)1沒有數(shù)據(jù)發(fā)送了笋颤,但是主機(jī)2還是可以發(fā)送數(shù)據(jù)到主機(jī)1的
  • 第3次揮手:當(dāng)主機(jī)2也發(fā)送了FIN報文段時
  • 表示主機(jī)2告訴主機(jī)1,主機(jī)2已經(jīng)沒有數(shù)據(jù)要發(fā)送了
  • 第4次揮手:當(dāng)主機(jī)1返回ACK報文段時
  • 表示主機(jī)1已經(jīng)知道主機(jī)2沒有數(shù)據(jù)發(fā)送了内地。隨后正式斷開整個TCP連接
  • 3次不行的原因就是要確保對方確實(shí)收到斷開連接的請求

至此伴澄,3次握手4次揮手講解完畢,完結(jié)撒花~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阱缓,一起剝皮案震驚了整個濱河市非凌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茬祷,老刑警劉巖清焕,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件并蝗,死亡現(xiàn)場離奇詭異祭犯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)滚停,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門沃粗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人键畴,你說我怎么就攤上這事最盅⊥谎” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵涡贱,是天一觀的道長咏删。 經(jīng)常有香客問我,道長问词,這世上最難降的妖魔是什么督函? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮激挪,結(jié)果婚禮上辰狡,老公的妹妹穿的比我還像新娘。我一直安慰自己垄分,他們只是感情好宛篇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著薄湿,像睡著了一般叫倍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豺瘤,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天段标,我揣著相機(jī)與錄音,去河邊找鬼炉奴。 笑死逼庞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞻赶。 我是一名探鬼主播赛糟,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砸逊!你這毒婦竟也來了璧南?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤师逸,失蹤者是張志新(化名)和其女友劉穎司倚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篓像,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡动知,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了员辩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒粮。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奠滑,靈堂內(nèi)的尸體忽然破棺而出丹皱,到底是詐尸還是另有隱情妒穴,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布摊崭,位于F島的核電站讼油,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呢簸。R本人自食惡果不足惜汁讼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阔墩。 院中可真熱鬧嘿架,春花似錦、人聲如沸啸箫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忘苛。三九已至,卻和暖如春扎唾,著一層夾襖步出監(jiān)牢的瞬間召川,已是汗流浹背胸遇。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纸镊,地道東北人倍阐。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓峰搪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凯旭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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