面試官問(wèn)什么是三次握手谍憔、四次揮手跺撼,一篇文章搞定

作者:神三元
原文:https://juejin.im/post/5e527c58e51d4526c654bf41

在這里插入圖片描述

TCP和UDP區(qū)別

首先概括一下基本的區(qū)別:

TCP是一個(gè)面向連接的、可靠的吓著、基于字節(jié)流的傳輸層協(xié)議鲤嫡。

UDP是一個(gè)面向無(wú)連接的傳輸層協(xié)議。(就這么簡(jiǎn)單夜矗,其它TCP的特性也就沒(méi)有了)泛范。

具體來(lái)分析,和 UDP 相比紊撕,TCP 有三大核心特性:

  • 面向連接罢荡。所謂的連接,指的是客戶端和服務(wù)器的連接对扶,在雙方互相通信之前区赵,TCP 需要三次握手建立連接,而 UDP 沒(méi)有相應(yīng)建立連接的過(guò)程浪南。
  • 可靠性笼才。TCP 花了非常多的功夫保證連接的可靠,這個(gè)可靠性體現(xiàn)在哪些方面呢络凿?一個(gè)是有狀態(tài)骡送,另一個(gè)是可控制。

TCP 會(huì)精準(zhǔn)記錄哪些數(shù)據(jù)發(fā)送了絮记,哪些數(shù)據(jù)被對(duì)方接收了摔踱,哪些沒(méi)有被接收到,而且保證數(shù)據(jù)包按序到達(dá)怨愤,不允許半點(diǎn)差錯(cuò)派敷。這是有狀態(tài)

當(dāng)意識(shí)到丟包了或者網(wǎng)絡(luò)環(huán)境不佳,TCP 會(huì)根據(jù)具體情況調(diào)整自己的行為篮愉,控制自己的發(fā)送速度或者重發(fā)腐芍。這是可控制

相應(yīng)的试躏,UDP 就是無(wú)狀態(tài) ,不可控的猪勇。

  • 面向字節(jié)流。UDP 的數(shù)據(jù)傳輸是基于數(shù)據(jù)報(bào)的冗酿,這是因?yàn)閮H僅只是繼承了 IP 層的特性埠对,而 TCP 為了維護(hù)狀態(tài),將一個(gè)個(gè) IP 包變成了字節(jié)流裁替。

說(shuō)說(shuō) TCP 三次握手的過(guò)程项玛?為什么是三次而不是兩次、四次弱判?

在這里插入圖片描述

從最開(kāi)始雙方都處于CLOSED狀態(tài)襟沮。然后服務(wù)端開(kāi)始監(jiān)聽(tīng)某個(gè)端口,進(jìn)入了LISTEN狀態(tài)昌腰。

然后客戶端主動(dòng)發(fā)起連接开伏,發(fā)送 SYN , 自己變成了SYN-SENT狀態(tài)。

服務(wù)端接收到遭商,返回SYN和ACK(對(duì)應(yīng)客戶端發(fā)來(lái)的SYN)固灵,自己變成了SYN-REVD。

之后客戶端再發(fā)送ACK給服務(wù)端劫流,自己變成了ESTABLISHED狀態(tài)巫玻;服務(wù)端收到ACK之后,也變成了ESTABLISHED狀態(tài)祠汇。

另外需要提醒你注意的是仍秤,從圖中可以看出,SYN 是需要消耗一個(gè)序列號(hào)的可很,下次發(fā)送對(duì)應(yīng)的 ACK 序列號(hào)要加1诗力,為什么呢?只需要記住一個(gè)規(guī)則:

凡是需要對(duì)端確認(rèn)的我抠,一定消耗TCP報(bào)文的序列號(hào)苇本。

SYN 需要對(duì)端的確認(rèn), 而 ACK 并不需要菜拓,因此 SYN 消耗一個(gè)序列號(hào)而 ACK 不需要瓣窄。

為什么不是兩次?

若不采用“三次握手”尘惧,那么只要 Server 發(fā)出確認(rèn)數(shù)據(jù)包康栈,新的連接就建立了递递。由于 Client 此時(shí)并未發(fā)出建立連接的請(qǐng)求喷橙,所以其不會(huì)理睬 Server 的確認(rèn)啥么,也不與 Server 通信;而這時(shí) Server 一直在等待 Client 的請(qǐng)求贰逾,這樣 Server 就白白浪費(fèi)了一定的資源悬荣。

為什么不是四次?

三次握手的目的是確認(rèn)雙方發(fā)送和接收的能力疙剑,那四次握手可以嘛氯迂?
當(dāng)然可以,100 次都可以言缤。但為了解決問(wèn)題嚼蚀,三次就足夠了,再多用處就不大了管挟。

三次握手過(guò)程中可以攜帶數(shù)據(jù)么轿曙?

第三次握手的時(shí)候,可以攜帶僻孝。前兩次握手不能攜帶數(shù)據(jù)导帝。

如果前兩次握手能夠攜帶數(shù)據(jù),那么一旦有人想攻擊服務(wù)器穿铆,那么他只需要在第一次握手中的 SYN 報(bào)文中放大量數(shù)據(jù)您单,那么服務(wù)器勢(shì)必會(huì)消耗更多的時(shí)間和內(nèi)存空間去處理這些數(shù)據(jù),增大了服務(wù)器被攻擊的風(fēng)險(xiǎn)荞雏。

第三次握手的時(shí)候虐秦,客戶端已經(jīng)處于ESTABLISHED狀態(tài),并且已經(jīng)能夠確認(rèn)服務(wù)器的接收讯檐、發(fā)送能力正常羡疗,這個(gè)時(shí)候相對(duì)安全了,可以攜帶數(shù)據(jù)别洪。

同時(shí)打開(kāi)會(huì)怎樣叨恨?

如果雙方同時(shí)發(fā) SYN報(bào)文,狀態(tài)變化會(huì)是怎樣的呢挖垛?
這是一個(gè)可能會(huì)發(fā)生的情況痒钝。

狀態(tài)變遷如下:


在這里插入圖片描述

在發(fā)送方給接收方發(fā)SYN報(bào)文的同時(shí),接收方也給發(fā)送方發(fā)SYN報(bào)文痢毒,兩個(gè)人剛上了!

發(fā)完SYN送矩,兩者的狀態(tài)都變?yōu)镾YN-SENT。

在各自收到對(duì)方的SYN后哪替,兩者狀態(tài)都變?yōu)镾YN-REVD栋荸。

接著會(huì)回復(fù)對(duì)應(yīng)的ACK + SYN,這個(gè)報(bào)文在對(duì)方接收之后,兩者狀態(tài)一起變?yōu)镋STABLISHED晌块。

這就是同時(shí)打開(kāi)情況下的狀態(tài)變遷爱沟。

說(shuō)說(shuō) TCP 四次揮手的過(guò)程

過(guò)程拆解

在這里插入圖片描述

剛開(kāi)始雙方處于ESTABLISHED狀態(tài)。

客戶端要斷開(kāi)了匆背,向服務(wù)器發(fā)送 FIN 報(bào)文呼伸,在 TCP 報(bào)文中的位置如下圖:


在這里插入圖片描述

發(fā)送后客戶端變成了FIN-WAIT-1狀態(tài)。注意, 這時(shí)候客戶端同時(shí)也變成了half-close(半關(guān)閉)狀態(tài)钝尸,即無(wú)法向服務(wù)端發(fā)送報(bào)文括享,只能接收。

服務(wù)端接收后向客戶端確認(rèn)珍促,變成了CLOSED-WAIT狀態(tài)铃辖。

客戶端接收到了服務(wù)端的確認(rèn),變成了FIN-WAIT2狀態(tài)猪叙。

隨后澳叉,服務(wù)端向客戶端發(fā)送FIN,自己進(jìn)入LAST-ACK狀態(tài)沐悦,

客戶端收到服務(wù)端發(fā)來(lái)的FIN后成洗,自己變成了TIME-WAIT狀態(tài),然后發(fā)送 ACK 給服務(wù)端藏否。

注意了瓶殃,這個(gè)時(shí)候,客戶端需要等待足夠長(zhǎng)的時(shí)間副签,具體來(lái)說(shuō)遥椿,是2個(gè) MSL(Maximum Segment Lifetime,報(bào)文最大生存時(shí)間), 在這段時(shí)間內(nèi)如果客戶端沒(méi)有收到服務(wù)端的重發(fā)請(qǐng)求淆储,那么表示 ACK 成功到達(dá)冠场,揮手結(jié)束,否則客戶端重發(fā) ACK本砰。

等待2MSL的意義

如果不等待會(huì)怎樣碴裙?

如果不等待,客戶端直接跑路点额,當(dāng)服務(wù)端還有很多數(shù)據(jù)包要給客戶端發(fā)舔株,且還在路上的時(shí)候,若客戶端的端口此時(shí)剛好被新的應(yīng)用占用还棱,那么就接收到了無(wú)用數(shù)據(jù)包载慈,造成數(shù)據(jù)包混亂。所以珍手,最保險(xiǎn)的做法是等服務(wù)器發(fā)來(lái)的數(shù)據(jù)包都死翹翹再啟動(dòng)新的應(yīng)用办铡。

那照這樣說(shuō)一個(gè) MSL 不就不夠了嗎辞做,為什么要等待 2 MSL?

  • 1 個(gè) MSL 確保四次揮手中主動(dòng)關(guān)閉方最后的 ACK 報(bào)文最終能達(dá)到對(duì)端
  • 1 個(gè) MSL 確保對(duì)端沒(méi)有收到 ACK 重傳的 FIN 報(bào)文可以到達(dá)

這就是等待 2MSL 的意義。

為什么是四次揮手而不是三次寡具?

因?yàn)榉?wù)端在接收到FIN, 往往不會(huì)立即返回FIN, 必須等到服務(wù)端所有的報(bào)文都發(fā)送完畢了凭豪,才能發(fā)FIN。因此先發(fā)一個(gè)ACK表示已經(jīng)收到客戶端的FIN晒杈,延遲一段時(shí)間才發(fā)FIN。這就造成了四次揮手孔厉。

如果是三次揮手會(huì)有什么問(wèn)題拯钻?

等于說(shuō)服務(wù)端將ACK和FIN的發(fā)送合并為一次揮手,這個(gè)時(shí)候長(zhǎng)時(shí)間的延遲可能會(huì)導(dǎo)致客戶端誤以為FIN沒(méi)有到達(dá)客戶端撰豺,從而讓客戶端不斷的重發(fā)FIN粪般。

同時(shí)關(guān)閉會(huì)怎樣?

如果客戶端和服務(wù)端同時(shí)發(fā)送 FIN 污桦,狀態(tài)會(huì)如何變化亩歹?如圖所示:


在這里插入圖片描述

文章也會(huì)持續(xù)更新,可以微信搜索「 邁莫coding 」第一時(shí)間閱讀凡橱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末小作,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稼钩,更是在濱河造成了極大的恐慌顾稀,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坝撑,死亡現(xiàn)場(chǎng)離奇詭異静秆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)巡李,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門抚笔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人侨拦,你說(shuō)我怎么就攤上這事殊橙。” “怎么了狱从?”我有些...
    開(kāi)封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蛀柴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我矫夯,道長(zhǎng)鸽疾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任训貌,我火速辦了婚禮制肮,結(jié)果婚禮上冒窍,老公的妹妹穿的比我還像新娘。我一直安慰自己豺鼻,他們只是感情好综液,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著儒飒,像睡著了一般谬莹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桩了,一...
    開(kāi)封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天附帽,我揣著相機(jī)與錄音,去河邊找鬼井誉。 笑死蕉扮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颗圣。 我是一名探鬼主播喳钟,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼在岂!你這毒婦竟也來(lái)了奔则?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蔽午,失蹤者是張志新(化名)和其女友劉穎应狱,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體祠丝,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疾呻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了写半。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岸蜗。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叠蝇,靈堂內(nèi)的尸體忽然破棺而出璃岳,到底是詐尸還是另有隱情,我是刑警寧澤悔捶,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布铃慷,位于F島的核電站,受9級(jí)特大地震影響蜕该,放射性物質(zhì)發(fā)生泄漏犁柜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一堂淡、第九天 我趴在偏房一處隱蔽的房頂上張望馋缅。 院中可真熱鬧扒腕,春花似錦、人聲如沸萤悴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)覆履。三九已至蹋盆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間硝全,已是汗流浹背栖雾。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留柳沙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓拌倍,卻偏偏與公主長(zhǎng)得像赂鲤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柱恤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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

  • 記住一句話:面試時(shí)越簡(jiǎn)單的問(wèn)題数初,一般就是隱藏著比較大的坑,一般都是需要將問(wèn)題擴(kuò)展的梗顺。 三次握手 三次握手 (Thr...
    hellomyshadow閱讀 378評(píng)論 0 0
  • 三次握手和四次揮手是各個(gè)公司常見(jiàn)的考點(diǎn)寺谤,也具有一定的水平區(qū)分度仑鸥,也被一些面試官作為熱身題。很多小伙伴說(shuō)這個(gè)問(wèn)題剛開(kāi)...
    猿人谷閱讀 441評(píng)論 0 6
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)变屁、焦點(diǎn)眼俊、注意力、語(yǔ)言聯(lián)想粟关、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析疮胖,社會(huì)...
    Jenaral閱讀 5,721評(píng)論 0 5
  • 昨天,在回家的路上闷板,坐在車?yán)镉圃沼圃盏乜粗摹度龉衬墓适隆放炀模冶焕锩娴膬?nèi)容深深吸引住了,盡管上學(xué)時(shí)...
    夜闌曉語(yǔ)閱讀 3,788評(píng)論 2 9
  • 一遮晚。匹配性昭。 判斷一個(gè)字符串是否符合我們制定的規(guī)則? 二…捕獲 字符串中符合我們正則表達(dá)式县遣,規(guī)則的巩梢,內(nèi)容捕獲到创泄。 三...
    時(shí)修七年閱讀 978評(píng)論 2 0