TCP的11種狀態


  • CLOSED:沒有使用這個套接字[netstat 無法顯示closed狀態],也是一種初始狀態,TCP連接是“關閉着的”或“未打開的”

  • LISTEN:套接字正在監聽連接[調用listen后],表示服務器端的某個SOCKET處於監聽狀態,可以接受客戶端的連接。

  • SYN_SENT:套接字正在試圖主動建立連接[發送SYN后還沒有收到ACK],很短暫,基本上用netstat很難看到這種狀態

  • SYN_RECEIVED:正在處於連接的初始同步狀態[收到對方的SYN,但還沒收到自己發過去的SYN的ACK]

  • ESTABLISHED:連接已建立

  • CLOSE_WAIT:遠程套接字已經關閉:正在等待關閉這個套接字[被動關閉的一方收到FIN]。正在等待關閉,當對方close()一個SOCKET后發送FIN報文給自己,你的系統毫無疑問地將會回應一個ACK報文給對方,此時TCP連接則進入到CLOSE_WAIT狀態

  • FIN_WAIT_1:套接字已關閉,正在關閉連接[發送FIN,沒有收到ACK也沒有收到FIN],FIN_WAIT_1狀態實際上是當SOCKET在ESTABLISHED狀態時,它想主動關閉連接,向對方發送了FIN報文,此時該SOCKET進入到FIN_WAIT_1 狀態。而當對方回應ACK報文后,則進入到FIN_WAIT_2 狀態。這個狀態通過NETSTAT比較少見到

  • CLOSING:套接字已關閉,遠程套接字正在關閉,暫時掛起關閉確認[在FIN_WAIT_1狀態下收到被動方的FIN],比較少見:當雙方幾乎在同時close()一個SOCKET的話,就出現了雙方同時發送FIN報文的情況,這是就會出現CLOSING 狀態,表示雙方都正在關閉SOCKET連接。

  • LAST_ACK:遠程套接字已關閉,正在等待本地套接字的關閉確認[被動方在CLOSE_WAIT狀態下發送FIN]

  • FIN_WAIT_2:套接字已關閉,正在等待遠程套接字關閉[在FIN_WAIT_1狀態下收到發過去FIN對應的ACK]

  • TIME_WAIT:這個套接字已經關閉,正在等待遠程套接字的關閉傳送[FIN、ACK、FIN、ACK都完畢,這是主動方的最后一個狀態,在過了2MSL時間后變為CLOSED狀態] --主動方,為了讓連接維持,而禁止這個端口不讓其他進程用,

 

 

參考資料:

https://time.geekbang.org/course/intro/100026801

https://blog.csdn.net/wentinghe/article/details/9455399

https://www.cnblogs.com/qingergege/p/6603488.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM