白話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狀態
那麽問題來了,為啥需要三次握手確認?兩次為啥不行?
其實這就好比這樣的一個場景:
周末,小明想約小紅出去浪,於是小明發微信消息給小紅
顯然,小明發出第一條消息問小紅在不在,這時候小明無法確定自己信息是否真的發出去了?小紅會不會收不到信息?亦或小紅收到信息了但是她回的消息自己沒收到?.........這時候其實還是兩眼一抹黑
小明收到小紅回復的消息,這時候小明知道,自己收發信息都是沒問題的,而且小紅的收發也是沒問題。但是對小紅來說,她只知道自己的收信沒問題,但是自己發的信息有沒有發出去並不知道.....
小紅這時候收到小明的回復,證明自己上一條回復小明的消息發送成功,此時也說明自己跟小明的收發消息都正常。。。。可以進一步深聊
至此,TCP三次握手完成,是不是很簡單?
本文出自 “憤怒的小甲魚” 博客,請務必保留此出處http://qjslovemsn.blog.51cto.com/10615974/1951956
白話TCP三次握手