理解 TCP(四):狀態流轉

更好閱讀體驗:《理解 TCP 和 UDP》— By Gitbookgit

不管客戶端仍是服務器,在雙方 TCP 通信的過程當中,都會有着一個「狀態」的概念,狀態會隨着 TCP 通信的不一樣階段而變化。服務器

TCP 狀態流轉圖

TCP 狀態流轉圖.png

各類狀態表示的意思

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 狀態了。

參考

《後臺開發 核心技術與應用實踐》
《計算機網絡》

相關文章
相關標籤/搜索