理解 TCP(四):狀態流轉

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

無論客戶端還是服務器,在雙方 TCP 通訊的過程中,都會有著一個「狀態」的概念,狀態會隨著 TCP 通訊的不同階段而變化。

TCP 狀態流轉圖

TCP 狀態流轉圖.png

各種狀態表示的意思

CLOSED:表示初始狀態

LISTEN:表示服務器端的某個 socket 處于監聽狀態,可以接受連接

SYN_SENT:在服務端監聽后,客戶端 socket 執行 CONNECT 連接時,客戶端發送 SYN 報文,此時客戶端就進入 SYN_SENT 狀態,等待服務端確認。

SYN_RCVD:表示服務端接收到了 SYN 報文。

ESTABLISHED:表示連接已經建立了。

FIN_WAIT_1:其中一方請求終止連接,等待對方的 FIN 報文。

FIN_WAIT_2:在 FIN_WAIT_2 之后, 當對方回應 ACK 報文之后,進入該狀態。

TIME_WAIT:表示收到了對方的 FIN 報文,并發送出了 ACK 報文,就等 2MSL 之后即可回到 CLOSED 狀態。

CLOSING:一種罕見狀態,發生在發送 FIN 報文之后,本應是先收到 ACK 報文,卻先收到對方的 FIN 報文,那么就從 FIN_WAIT_1 的狀態進入 CLOSING 狀態。

CLOSE_WAIT:表示等待關閉,在 ESTABLISHED 過渡到 LAST_ACK 的一個過渡階段,該階段需要考慮是否還有數據發送給對方,如果沒有,就可以關閉連接,發送 FIN 報文,然后進入 LAST_ACK 狀態。

LAST_ACK:被動關閉一方發送 FIN 報文之后,最后等待對方的 ACK 報文所處的狀態。

CLOSED:當收到 ACK 保溫后,就可以進入 CLOSED 狀態了。

參考

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容