TCP(傳輸控制協議)是一種面向連接的流式控制協議,它定義了不同的狀態以管理通信過程中的連接。TCP 狀態遷移描述了 TCP 連接在不同狀態之間的轉換過程,常見的 TCP 狀態包括 CLOSED、LISTEN、SYN_SENT、SYN_RECEIVED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK 和 TIME_WAIT 等。
下面是一個簡單的客戶端發起連接: TCP 狀態遷移示意流程:
1、客戶端發起連接
? ? ? CLOSED -> SYN_SENT
? ? ??客戶端發送 SYN 包(同步請求)給服務端,并且狀態切換為 SYN_SENT
2、服務端響應連接
? ? ?SYN_SENT ->?SYN_RECEIVED -> ESTABLISHED
? ? ?服務端發送 SYN-ACK 包(同步應答)給客戶端,SYN_RECEIVED(觸發 accept)
3、客戶端確認連接
? ? ?SYN_SENT -> ESTABLISHED
? ? ?客戶端發送 ACK 包(確認)給服務端
4、數據傳輸過程
? ? ?ESTABLISHED
? ? ?數據通過連接在客戶端和服務端之間傳輸
5、關閉連接
ESTABLISHED -> FIN_WAIT_1
客戶端發送 FIN 包(結束連接)給服務端
FIN_WAIT_1 -> CLOSE_WAIT
服務端發送 ACK 包給客戶端
CLOSE_WAIT -> LAST_ACK
服務端發送 FIN 包給客戶端
LAST_ACK -> CLOSED
客戶端發送 ACK 包給服務端,連接關閉
6、連接終止
TIME_WAIT?
客戶端和服務端等待一段時間(2MSL,最長報文段壽命),確保最后一個 ACK 能夠到達對方