[size=medium][b]tcp 建立連線中三次握手都做了那些事?[/b][/size]
[b]第一次:[/b]
客戶端:在嗎?
服務端:在。
[b]第二次:[/b]
客戶端:可用嗎?
服務端:可用。你確定要用嗎?
[b]第三次:[/b]
客戶端:是。我們開始吧。
服務端:好。
鏈結建立成功。開始通訊。
——————————————————————————————————————
但是為什麼一定要進行三次握手來保證連線是雙工的呢,一次不行麼?兩次不行麼?
我們舉乙個現實生活中兩個人進行語言溝通的例子來模擬三次握手。
第一次對話:
老婆讓甲出去打醬油,半路碰到乙個朋友乙,甲問了一句:哥們你吃飯了麼?
結果乙帶著耳機聽歌呢,根本沒聽到,沒反應。甲心裡想:跟你說話也沒個音,不跟你說了,溝通失敗。說明乙接受不到甲傳過來的資訊的情況下溝通肯定是失敗的。
如果乙聽到了甲說的話,那麼第一次對話成功,接下來進行第二次對話。
第二次對話:
乙聽到了甲說的話,但是他是老外,中文不好,不知道甲說的啥意思也不知道怎樣回答,於是隨便回答了一句學過的中文 :我去廁所了。甲一聽立刻笑噴了,「去廁所吃飯」?道不同不相為謀,離你遠點吧,溝通失敗。說明乙無法做出正確應答的情況下溝通失敗。
如果乙聽到了甲的話,做出了正確的應答,並且還進行了反問:我吃飯了,你呢?那麼第二次握手成功。
通過前兩次對話證明了乙能夠聽懂甲說的話,並且能做出正確的應答。接下來進行第三次對話。
第三次對話:
甲剛和乙打了個招呼,突然老婆喊他,「你個死鬼,打個醬油咋這麼半天,看我回家咋收拾你」,甲是個妻管嚴,聽完嚇得二話不說就跑回家了,把乙自己晾那了。乙心想:這什麼人啊,得,我也回家吧,溝通失敗。說明甲無法做出應答的情況下溝通失敗。
如果甲也做出了正確的應答:我也吃了。那麼第三次對話成功,兩人已經建立起了順暢的溝通渠道,接下來開始持續的聊天。
————————————————————————————————————————
實際上就是為了兩邊的請求都能被識別,所以邏輯上最少三次。
————————————————————————————————————————
不過個人感覺為什麼是三次而不是二次,不是因為為了證明甲能聽懂乙並回應(第二次乙能正確的響應甲,說明倆人之間溝通已無障礙了),而是怕出現以下情況而浪費感情。
這個情景是這樣的:
甲在路上跟乙打招呼,由於颳風,這句活被吹跑了(延遲)。
甲又跟乙打了個招呼,這次乙聽到了並作出了回應。此時不管是三次握手還是兩次握手兩個人都能愉快的溝通。0.1秒後倆人四次揮手告別了。此時被風刮跑的那句話又傳到了乙的耳朵裡,乙認為甲又要跟他溝通,所以做出了響應的回應。問題出現了:假如採用2次握手乙就認定甲要跟他溝通,於是就不停的等,浪費感情。可如果是採用3次握手,乙等了一會後發現甲沒有回應,他就認為甲走了,然後自己也就走了!
————————————————————————————————————————
所以三次握手是保證了:雙工和容錯。
引用:-
TCP協議之三次握手
三次握手 三次握手 three way handshake 即建立tcp連線,就是指建立乙個tcp連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。在socket 程式設計中,這一過程由客戶端執行connect來觸發,整個流程如下圖所示 1 第一次握手 client將標誌位syn置為1,隨機...
TCP協議學習之三次握手
其實一直都想把知識點複習下,這次不能再拖延了 基本的操作就不介紹了,主要就是選擇當前網路,然後start.在瀏覽器開啟主頁zckongbai.farbox.com,然後在wireshark中過濾當前的ip 網路層次劃分如下,三次握手是傳輸層的tcp協議和應用層之間的互動 所有我們在抓包分析的時候主要...
TCP基礎之三次握手
tcp協議規定的傳輸格式如下圖所示 這就是三次握手,交流三次,剛看的時候反正一臉懵逼,什麼syn,什麼ack,不了解,也不理解。syn和ack都是標誌位 標誌位 syn 請求建立連線,及tcp傳輸格式中的32位序列 ack 應答,及tcp傳輸格式中的32位確認序列 三次握手 第一次握手 伺服器一般是...