TCP UDP協議的三次握手


接觸網絡協議棧TCP/IP的人,就一定繞不開的一個話題就是TCP的三次握手。下面我將簡單介紹一下。

 

三次握手流程的本質,可以這么理解:TCP的三次握手其實是雙方各一次握手,各一次確認,只是其中一次握手和確認合並在一起。

當然也可以更通俗的去理解:

  • “喂,你聽得到嗎?”

  • “我聽得到呀,你聽得到我嗎?”

  • “我能聽到你”

 

三次握手為什么不用兩次,或者四次

原因很簡單,因為只有三次才是最合適的,三次通信是最小值,兩次通信滿足不了要求,而四次通信則顯得冗余。

比如之前的三次改成兩次,四次的結果就變味了。

兩次握手:

  • “喂,你聽得到嗎?”

  • “我聽得到呀”

  • “喂,你聽得到嗎?”

  • “草,我聽得到呀!!!!”

  • “你TM能不能聽到我講話啊!!喂!”

  • “……”

四次握手:

  • “喂,你聽得到嗎?”

  • “我聽得到呀,你聽得到我嗎?”

  • “我能聽到你,你能聽到我嗎?”

  • “……不想跟傻逼說話”

TCP的三次握手流程

 

  1. 第一次握手:Client將標志位SYN置為1,隨機產生一個值seq=J,並將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

  2. 第二次握手:Server收到數據包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

  3. 第三次握手:Client收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨后Client與Server之間可以開始傳輸數據了。

TCP“三次握手” 這個問題的本質是, 信道不可靠, 但是通信雙發需要就某個問題達成一致. 而要解決這個問題, 無論你在消息中包含什么信息, 三次通信是理論上的最小值. 所以三次握手不是TCP本身的要求, 而是為了滿足"在不可靠信道上可靠地傳輸信息"這一需求所導致的. 請注意這里的本質需求,信道不可靠, 數據傳輸要可靠. 三次達到了, 那后面你想接着握手也好, 發數據也好, 跟進行可靠信息傳輸的需求就沒關系了. 因此,如果信道是可靠的, 即無論什么時候發出消息, 對方一定能收到, 或者你不關心是否要保證對方收到你的消息, 那就能像UDP那樣直接發送消息就可以了.”。這可視為對“三次握手”目的的另一種解答思路。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM