建立TCP連接需要三次握手才可以建立,斷開連接則需要四次握手。
圖1:
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,進入SYN_SENT狀態,等待服務器確認,
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態,
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
注:
SYN_RECV:一個連接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個連接
ESTABLISHED:正常數據傳輸狀態
首先Client端發送連接請求報文,Server段接收連接后回復ACK報文(Acknowledgement,確認發來的數據已經接收完畢),為此次連接分配資源。Client端在收到ACK報文后也向Server端發送ACK報文,並分配資源,如此TCP連接就建立了。
補充知識
在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.其中,對於我們日常的分析有用的就是前面的五個字段。它們的含義是:SYN表示建立連接,FIN表示關閉連接,ACK表示響應,PSH表示有 DATA數據傳輸,RST表示連接重置。其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接之后的響應,如果只是單個的一個SYN,它表示的只是建立連接。斷開連接詳解圖如下(關閉連接可以是 Client 也可以是 Server )
圖2:

我們假設
Client
發送中斷請求(
Fin
),
Server
接到請求后表示關閉連接,但可以不必着急關閉通信(Socket),可以繼續發送數據,所以
Server
先發送
ACK
,表明關閉請求已收到,但為了保證數據接收完成,請等待,稍后會給
client
消息,此時
Client
進入
FIN_WAIT1
狀態,等待
server
的
FIN
(這里講一下 FIN_WAIT 狀態, Client 發出 FIN ,同時進入 FIN_WAIT1 狀態, Server 響應 ACK ,從而使 Client 變成 FIN_WAIT2 狀態,接着 Server 會發出 FIN , Client 響應 ACK ,同時變成 TIME_WAIT 狀態,這就是關閉連接時 FIN_WAIT 狀態的變化)
當 Server 端確定數據已經發送完成,則會向 Clinet 發送 FIN 報文,意思是告訴 Client ,我這邊已經准備完畢,可以關閉連接, Client 接收到 FIN 報文以后就明白可以關閉連接了,但為了防止網絡問題,所以發送 ACK 后進入 FIN_WAIT 狀態, Server 如果沒有收到 ACK 也可以重傳,當 Server 收到 ACK 后就可以斷開連接了, Client 等待 2MSL 后沒有收到重傳則證明 Server 已經正常關閉
(再講一下 2MSL , Maximum Segment Lifetime ,譯為報文最大生存時間,是用來補救的,確認無誤 ACK 沒有丟失,如果 TCP client 端最后一次發送的 ACK 丟失了,它將在等待時間內重新發送。)
這樣 Client 端也會關閉, OK , TCP 連接經過四次握手后也正常關閉。
(這里講一下 FIN_WAIT 狀態, Client 發出 FIN ,同時進入 FIN_WAIT1 狀態, Server 響應 ACK ,從而使 Client 變成 FIN_WAIT2 狀態,接着 Server 會發出 FIN , Client 響應 ACK ,同時變成 TIME_WAIT 狀態,這就是關閉連接時 FIN_WAIT 狀態的變化)
當 Server 端確定數據已經發送完成,則會向 Clinet 發送 FIN 報文,意思是告訴 Client ,我這邊已經准備完畢,可以關閉連接, Client 接收到 FIN 報文以后就明白可以關閉連接了,但為了防止網絡問題,所以發送 ACK 后進入 FIN_WAIT 狀態, Server 如果沒有收到 ACK 也可以重傳,當 Server 收到 ACK 后就可以斷開連接了, Client 等待 2MSL 后沒有收到重傳則證明 Server 已經正常關閉
(再講一下 2MSL , Maximum Segment Lifetime ,譯為報文最大生存時間,是用來補救的,確認無誤 ACK 沒有丟失,如果 TCP client 端最后一次發送的 ACK 丟失了,它將在等待時間內重新發送。)
這樣 Client 端也會關閉, OK , TCP 連接經過四次握手后也正常關閉。