天天看點

從握手開始:TCP三向交握

首先簡單介紹一下TCP三向交握

在TCP/IP協定中,TCP協定提供可靠的連接配接服務,采用三次握手建立一個連接配接。

第一次握手:建立連接配接時,用戶端發送syn包(syn=j)到伺服器,并進入SYN_SEND狀态,等待伺服器确認;

第二次握手:伺服器收到syn包,必須确認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器 進入SYN_RECV狀态;

第三次握手:用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK(ack=k+1),此包發送完畢,用戶端和伺服器進入 ESTABLISHED狀态,完成三次握手。

通過這樣的三次握手,用戶端與服務端建立起可靠的雙工的連接配接,開始傳送資料。

三次握手的最主要目的是保證連接配接是雙工的,可靠更多的是通過重傳機制來保證的。

但是為什麼一定要進行三次握手來保證連接配接是雙工的呢,一次不行麼?兩次不行麼?我們舉一個現實生活中兩個人進行語言溝通的例子來模拟三次握手。

第一次對話:

老婆讓甲出去打醬油,半路碰到一個朋友乙,甲問了一句:哥們你吃飯了麼?

結果乙帶着耳機聽歌呢,根本沒聽到,沒反應。甲心裡想:跟你說話也沒個音,不跟你說了,溝通失敗。說明乙接受不到甲傳過來的資訊的情況下溝通肯定是失敗的。

如果乙聽到了甲說的話,那麼第一次對話成功,接下來進行第二次對話。

第二次對話:

乙聽到了甲說的話,但是他是老外,中文不好,不知道甲說的啥意思也不知道怎樣回答,于是随便回答了一句學過的中文 :我去廁所了。甲一聽立刻笑噴了,“去廁所吃飯”?道不同不相為謀,離你遠點吧,溝通失敗。說明乙無法做出正确應答的情況下溝通失敗。

如果乙聽到了甲的話,做出了正确的應答,并且還進行了反問:我吃飯了,你呢?那麼第二次握手成功。

通過前兩次對話證明了乙能夠聽懂甲說的話,并且能做出正确的應答。接下來進行第三次對話。

第三次對話:

甲剛和乙打了個招呼,突然老婆喊他,“你個死鬼,打個醬油咋這麼半天,看我回家咋收拾你”,甲是個妻管嚴,聽完吓得二話不說就跑回家了,把乙自己晾那了。乙心想:這什麼人啊,得,我也回家吧,溝通失敗。說明甲無法做出應答的情況下溝通失敗。

如果甲也做出了正确的應答:我也吃了。那麼第三次對話成功,兩人已經建立起了順暢的溝通管道,接下來開始持續的聊天。

通過第二次和第三次的對話證明了甲能夠聽懂乙說的話,并且能做出正确的應答。

可見,兩個人進行有效的語言溝通,這三次對話的過程是必須的。

繼續閱讀