TCP_IP通信主要包含以下三個步驟(/階段):
一、建立連接配接階段 —— 三次握手
二、資料傳輸階段
三、關閉連接配接階段(/釋放連接配接) —— 四次揮手
第一階段:建立連接配接 (如下圖)

① 用戶端向服務端發送連接配接請求封包 → (SYN=1,seq = client_isn)
② 服務端接受用戶端的連接配接請求并回複ACK封包及給此次連接配接配置設定資源。 → (SYN=1,seq = client_isn, ack = client_isn + 1)
③ 用戶端接受來自服務端的ACK封包後,回複ACK封包給服務端并配置設定資源。 → (SYN=0,seq = server_isn, ack = server_isn + 1) // 圖有誤
第三階段:斷開連接配接 (如下圖)
【注】 TCP連接配接的斷開可以是服務端,也可以是用戶端。
下面以用戶端斷開TCP連接配接為例說明。
① 用戶端向服務端發送斷開TCP連接配接的請求,即發送FIN封包。【這一步表明用戶端沒有資料要發送給服務端了】
② 服務端接受用戶端的FIN封包後,由于可能還有資料未發送完成,是以先發送ACK封包。【這一步表明服務端已收到用戶端的關閉連接配接請求,但服務端可能還有資料需要發送,讓用戶端等待消息】 —— 此時用戶端進入FIN_WAIT狀态,等待服務端的FIN封包。
③ 當服務端的資料發送完畢,就向用戶端FIN封包。【這一步表明服務端資料發送完畢,準備好關閉連接配接了】
④ 用戶端接受到服務端的FIN封包後,但仍不确定服務端是否清楚要關閉。是以接着發送ACK封包,直至服務端接收到為止。【這一步用戶端發送完ACK封包後就進入TIME_WAIT狀态】
服務端接受到用戶端的ACK封包後,就斷開連接配接。用戶端等待2MSL依然沒有收到回複則說明服務端已正常關閉,此時用戶端也關閉連接配接。
OVER~TCP連接配接就正常關閉了。
整個TCP連接配接建立至斷開的過程中,
用戶端的狀态變化
建立連接配接階段:
發送SYN → SYN_SEND
接收SYN+ACK & 發送ACK → ESTABLISHED
斷開連接配接階段:
向服務端發送FIN → FIN_WAIT_1
接收服務端ACK → FIN_WAIT_2
接收服務端FIN & 發送ACK → TIME_WAIT
等待2MLS → CLOSED
服務端的狀态變化
建立連接配接階段:
監聽套接字 → LISTEN
接收到用戶端SYN & 發送SYN+ACK → SYN_RCVD
接收用戶端ACK → ESTABLISHED
斷開連接配接階段:
接收FIN & 發送ACK → CLOSE_WAIT
發送FIN封包 → LAST_ACK
接收用戶端ACK → CLOSED
參考:
TCP協定中的三次握手和四次揮手(圖解)
在此表示感謝。