知道TCP連接的三次握手梗掰,但你知道為什么是三次嗎?

TCP連接的三次握手

了解TCP協(xié)議的人都知道共虑,TCP在建立連接的時(shí)候需要經(jīng)過三次交互己沛,俗稱「三次握手」:


image.png
  1. client端發(fā)送一個(gè)SYN段指明client打算連接的server端口癞蚕,以及初始序號(ISN)
  2. server發(fā)回包含server的初始化序號的SYN報(bào)文段作為應(yīng)答,同時(shí)將確認(rèn)序號(ACK)設(shè)置為client的ISN加1以對client的SYN報(bào)文段進(jìn)行確認(rèn)
  3. client必須將確認(rèn)序號(ACK)設(shè)置為server的ISN加1以對server的SYN報(bào)文段進(jìn)行確認(rèn)

完成這三次交互后狭园,client與server端就可以建立起一個(gè)TCP連接蓬蝶,雙方也可以通過該連接通道進(jìn)行數(shù)據(jù)的交互尘分,但是很多人也會有疑問,為什么一定要經(jīng)過三次交互才能建立連接呢丸氛?這三次是必須的嗎培愁?如果是那是為什么呢?下面缓窜,我將來解答這個(gè)問題

一定需要三次握手嗎定续?

要回答這個(gè)問題,我們首先想想TCP連接的目的禾锤,我想大家都知道私股,它的目的就是建立一個(gè)數(shù)據(jù)傳輸?shù)耐ǖ溃话憬⒁粋€(gè)通道需要哪些步驟呢恩掷?這里我們不妨舉一個(gè)現(xiàn)實(shí)中的例子:建立客運(yùn)線倡鲸;我們都知道,在建立客運(yùn)線之前黄娘,客運(yùn)線的起始站和終點(diǎn)站需要溝通峭状,只有雙方都同意了建立這條線(TCP連接的建立)并協(xié)調(diào)相關(guān)的車位等資源(啟用socket端口),才能有后續(xù)的汽車在這條線上運(yùn)行(TCP數(shù)據(jù)傳輸)逼争,首先來看正常的路線是如何建立的(假設(shè)需要在A优床,B兩個(gè)站之間建立客運(yùn)線):

  1. A站:B站你好,我想和你建立客運(yùn)線誓焦,請問你那邊能為我騰一個(gè)車位出來嗎羔巢?
  2. B站:好的!
  3. B站:A站你好,你那邊返程的車位準(zhǔn)備好了嗎竿秆?
  4. A站:返程的車位準(zhǔn)備好了启摄!

可以看到這里其實(shí)有四個(gè)階段,但是由于第2和第3階段都是由B站發(fā)往A站的信息幽钢,所以可以合并起來歉备,流程簡化如下:

  1. A站:B站你好,我想和你建立客運(yùn)線匪燕,請問你那邊能為我騰一個(gè)車位出來嗎蕾羊?
  2. B站:好的,另外帽驯,你那邊返程的車位準(zhǔn)備好了嗎龟再?
  3. A站:返程的車位準(zhǔn)備好了!

你看尼变,2利凑,3階段合并后的流程是不是就是TCP連接的三次握手!嫌术,但既然我們的問題是「一定需要三次握手嗎哀澈?」,所以我們可以進(jìn)一步思考度气,既然2割按,3階段可以合并,那么1磷籍,4階段能不能合并呢适荣?我們來看:

  1. A站:B站你好,我想和你建立客運(yùn)線院领,請問你那邊能為我騰一個(gè)車位出來嗎弛矛?另外,我這邊已經(jīng)為你騰出了返程的車位
  2. B站:好的栅盲,車位就緒汪诉!

你瞧,客運(yùn)線照樣可以建立谈秫,沒有任何問題扒寄,那么TCP的設(shè)計(jì)者為什么就一定要設(shè)計(jì)一個(gè)三次交互的方案呢?是他們的方案設(shè)計(jì)不夠簡潔嗎拟烫?肯定不是该编,作為因特網(wǎng)的底層支撐,設(shè)計(jì)者們不會容許這么一個(gè)冗余的方案存在的硕淑。

我們不妨再深入思考课竣,這里通過建立客運(yùn)線的場景模擬網(wǎng)絡(luò)連接的建立時(shí)忽略了一個(gè)點(diǎn)嘉赎,那就是網(wǎng)絡(luò)報(bào)文在傳輸?shù)臅r(shí)候可能會延遲或丟失,而上面兩階段交互的方案并沒有考慮信息丟失的情況于樟,現(xiàn)在我們假定A站和B站在進(jìn)行交互的時(shí)候用的是飛鴿傳書公条,雙方溝通時(shí)默認(rèn)一定時(shí)間內(nèi)未收到回信即認(rèn)為鴿子迷路了,就需要重發(fā)(模擬報(bào)文延時(shí)或丟失后的重發(fā)機(jī)制)迂曲,那么在這種情況下靶橱,兩階段交互是否能正常工作呢?

  1. A站:B站你好路捧,我想和你建立客運(yùn)線关霸,請問你那邊能為我騰一個(gè)車位出來嗎?另外杰扫,我這邊已經(jīng)為你騰出了返程的車位
  2. A站(未能及時(shí)收到回信队寇,重發(fā)):B站你好,我想和你建立客運(yùn)線章姓,請問你那邊能為我騰一個(gè)車位出來嗎佳遣?另外,我這邊已經(jīng)為你騰出了返程的車位
  3. B站(響應(yīng)重發(fā)的消息):好的啤覆,車位就緒苍日!
  4. 運(yùn)行一段時(shí)間后惭聂,客運(yùn)線關(guān)閉(假設(shè)是臨時(shí)路線)
  5. 第一階段丟失的那個(gè)信鴿此時(shí)將消息送到了窗声,即:(B站你好,我想和你建立客運(yùn)線辜纲,請問你那邊能為我騰一個(gè)車位出來嗎笨觅?另外,我這邊已經(jīng)為你騰出了返程的車位)
  6. B站:好的耕腾,車位就緒<!(這是一條死客運(yùn)線,不會有車過來

我們發(fā)現(xiàn)扫俺,在兩階段交互方案中苍苞,由于信鴿的延時(shí)送達(dá),導(dǎo)致后續(xù)建立了一條本不該建立的連接狼纬,B站將不會迎來A站的汽車羹呵,而我們再看三階段交互的方案:

  1. A站:B站你好,我想和你建立客運(yùn)線疗琉,請問你那邊能為我騰一個(gè)車位出來嗎冈欢?
  2. A站(未能及時(shí)收到回信,重發(fā)):B站你好盈简,我想和你建立客運(yùn)線凑耻,請問你那邊能為我騰一個(gè)車位出來嗎太示?
  3. B站(響應(yīng)重發(fā)的消息):好的,另外香浩,你那邊返程的車位準(zhǔn)備好了嗎类缤?
  4. A站:返程的車位準(zhǔn)備好了!
  5. 運(yùn)行一段時(shí)間后邻吭,客運(yùn)線關(guān)閉(假設(shè)是臨時(shí)路線)
  6. 第一階段丟失的那個(gè)信鴿此時(shí)將消息送到了呀非,即:(B站你好,我想和你建立客運(yùn)線镜盯,請問你那邊能為我騰一個(gè)車位出來嗎岸裙?)
  7. B站:好的,另外速缆,你那邊返程的車位準(zhǔn)備好了嗎降允?
  8. 由于此時(shí)A站并不想建立到B站的線,所以忽略該信息
  9. B站沒有收到A站的回應(yīng)艺糜,所以也不會完成客運(yùn)線的建立

可以發(fā)現(xiàn)剧董,三階段交互可以解決這種由于信息延時(shí)或丟失導(dǎo)致的非真實(shí)意愿的連接的建立,對應(yīng)到TCP的三次握手破停,其實(shí)就是為了應(yīng)對已經(jīng)失效的連接請求報(bào)文突然又傳到服務(wù)端而產(chǎn)生的錯(cuò)誤場景翅楼,或者從另外一個(gè)角度看,如果網(wǎng)絡(luò)傳輸質(zhì)量一直處于理想狀態(tài)的話(不存在延時(shí)或丟失)真慢,兩次握手其實(shí)完全可以滿足連接建立的需求毅臊,而三次握手是一種能應(yīng)對網(wǎng)絡(luò)不穩(wěn)定情況的最簡方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市黑界,隨后出現(xiàn)的幾起案子管嬉,更是在濱河造成了極大的恐慌,老刑警劉巖朗鸠,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚯撩,死亡現(xiàn)場離奇詭異,居然都是意外死亡烛占,警方通過查閱死者的電腦和手機(jī)胎挎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忆家,“玉大人犹菇,你說我怎么就攤上這事∠依担” “怎么了项栏?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹬竖。 經(jīng)常有香客問我沼沈,道長流酬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任列另,我火速辦了婚禮芽腾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘页衙。我一直安慰自己摊滔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布店乐。 她就那樣靜靜地躺著艰躺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眨八。 梳的紋絲不亂的頭發(fā)上腺兴,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音廉侧,去河邊找鬼页响。 笑死,一個(gè)胖子當(dāng)著我的面吹牛段誊,可吹牛的內(nèi)容都是我干的闰蚕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼连舍,長吁一口氣:“原來是場噩夢啊……” “哼没陡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烟瞧,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤诗鸭,失蹤者是張志新(化名)和其女友劉穎染簇,沒想到半個(gè)月后参滴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锻弓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年砾赔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片青灼。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暴心,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出杂拨,到底是詐尸還是另有隱情专普,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布弹沽,位于F島的核電站檀夹,受9級特大地震影響筋粗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜炸渡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一娜亿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蚌堵,春花似錦买决、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泻蚊,卻和暖如春够挂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕夫。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工孽糖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毅贮。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓办悟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滩褥。 傳聞我的和親對象是個(gè)殘疾皇子病蛉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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