更好閱讀體驗:《理解 TCP 和 UDP》— By Gitbookgit
不管客戶端仍是服務器,在雙方 TCP 通信的過程當中,都會有着一個「狀態」的概念,狀態會隨着 TCP 通信的不一樣階段而變化。服務器
CLOSED:表示初始狀態網絡
LISTEN:表示服務器端的某個 socket 處於監聽狀態,能夠接受鏈接併發
SYN_SENT:在服務端監聽後,客戶端 socket 執行 CONNECT 鏈接時,客戶端發送 SYN 報文,此時客戶端就進入 SYN_SENT 狀態,等待服務端確認。socket
SYN_RCVD:表示服務端接收到了 SYN 報文。tcp
ESTABLISHED:表示鏈接已經創建了。spa
FIN_WAIT_1:其中一方請求終止鏈接,等待對方的 FIN 報文。計算機網絡
FIN_WAIT_2:在 FIN_WAIT_2 以後, 當對方迴應 ACK 報文以後,進入該狀態。開發
TIME_WAIT:表示收到了對方的 FIN 報文,併發送出了 ACK 報文,就等 2MSL 以後便可回到 CLOSED 狀態。rem
CLOSING:一種罕見狀態,發生在發送 FIN 報文以後,本應是先收到 ACK 報文,卻先收到對方的 FIN 報文,那麼就從 FIN_WAIT_1 的狀態進入 CLOSING 狀態。
CLOSE_WAIT:表示等待關閉,在 ESTABLISHED 過渡到 LAST_ACK 的一個過渡階段,該階段須要考慮是否還有數據發送給對方,若是沒有,就能夠關閉鏈接,發送 FIN 報文,而後進入 LAST_ACK 狀態。
LAST_ACK:被動關閉一方發送 FIN 報文以後,最後等待對方的 ACK 報文所處的狀態。
CLOSED:當收到 ACK 保溫後,就能夠進入 CLOSED 狀態了。