衆所周知,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狀态
那麼問題來了,為啥需要三次握手确認?兩次為啥不行?
其實這就好比這樣的一個場景:
周末,小明想約小紅出去浪,于是小明發微信消息給小紅

顯然,小明發出第一條消息問小紅在不在,這時候小明無法确定自己資訊是否真的發出去了?小紅會不會收不到資訊?亦或小紅收到資訊了但是她回的消息自己沒收到?.........這時候其實還是兩眼一抹黑
小明收到小紅回複的消息,這時候小明知道,自己收發資訊都是沒問題的,而且小紅的收發也是沒問題。但是對小紅來說,她隻知道自己的收信沒問題,但是自己發的資訊有沒有發出去并不知道.....
小紅這時候收到小明的回複,證明自己上一條回複小明的消息發送成功,此時也說明自己跟小明的收發消息都正常。。。。可以進一步深聊
至此,TCP三向交握完成,是不是很簡單?