1. 程式人生 > >白話TCP三次握手

白話TCP三次握手

tcp三次握手 tcp syn established ack

眾所周知,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三次握手