白話TCP三次握手

      衆所周知,TCP是可靠傳輸,那麼什麼叫可靠呢?簡單的講就是二者通信,只有當彼此都知道自己以及對方收發消息都正常時候,然後再進行數據傳輸。 而三次握手的目的就是爲了確認雙方收發消息都沒問題。

      

      首先需要了解的是:

      

      1.TCP規定SYN=1時不能攜帶數據,也就是SYN置1就表示這是一個連接請求或連接接受報文

      2.連接建立後所有發送的報文的ACK必須爲1

      3.當FIN=1 時,表明此報文段的發送方的數據已經發送完畢,並要求釋放連接

      

      三次握手:

      

      step1:客戶端發送鏈接請求報文SYN=1 ACK=0到服務端,進入SYN_SEND狀態,等待服務端確認  

      step2:服務端收到請求,向客戶端發送SYN=1 ACK=1,服務端進入SYN_RECV狀態

      step3:客戶端收到消息,向服務端發送確認包,客戶端和服務器進入ESTABLISHED狀態


      那麼問題來了,爲啥需要三次握手確認?兩次爲啥不行?

      其實這就好比這樣的一個場景:

      週末,小明想約小紅出去浪,於是小明發微信消息給小紅

      wKioL1l8NtKQxm2WAABsNUi2e2g694.png-wh_50

      顯然,小明發出第一條消息問小紅在不在,這時候小明無法確定自己信息是否真的發出去了?小紅會不會收不到信息?亦或小紅收到信息了但是她回的消息自己沒收到?.........這時候其實還是兩眼一抹黑

      小明收到小紅回覆的消息,這時候小明知道,自己收發信息都是沒問題的,而且小紅的收發也是沒問題。但是對小紅來說,她只知道自己的收信沒問題,但是自己發的信息有沒有發出去並不知道.....

      小紅這時候收到小明的回覆,證明自己上一條回覆小明的消息發送成功,此時也說明自己跟小明的收發消息都正常。。。。可以進一步深聊


      至此,TCP三次握手完成,是不是很簡單?





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章