TCP協議端口狀態說明

轉自:https://www.cnblogs.com/jessezeng/p/5617105.html

瞭解TCP協議端口的連接狀態,對排除和定位網絡或系統故障會有很大幫助,因此瞭解一下是有必要的:

一、LISTENING 

  提供某種服務,偵聽遠方TCP端口的連接請求,當提供的服務沒有被連接時,處於LISTENING狀態,端口是開放的,等待被連接。

二、SYN_SENT (客戶端狀態)

  客戶端調用connect,發送一個SYN請求建立一個連接,在發送連接請求後等待匹配的連接請求,此時狀態爲SYN_SENT.

三、SYN_RECEIVED (服務端狀態)

  在收到和發送一個連接請求後,等待對方對連接請求的確認,當服務器收到客戶端發送的同步信號時,將標誌位ACK和SYN置1發送給客戶端,此時服務器端處於SYN_RCVD狀態,如果連接成功了就變爲ESTABLISHED,正常情況下SYN_RCVD狀態非常短暫。

四、ESTABLISHED

  ESTABLISHED狀態是表示兩臺機器正在傳輸數據。

五、FIN-WAIT-1

  等待遠程TCP連接中斷請求,或先前的連接中斷請求的確認,主動關閉端應用程序調用close,TCP發出FIN請求主動關閉連接,之後進入FIN_WAIT1狀態。

六、FIN-WAIT-2

  從遠程TCP等待連接中斷請求,主動關閉端接到ACK後,就進入了FIN-WAIT-2 .這是在關閉連接時,客戶端和服務器兩次握手之後的狀態,是著名的半關閉的狀態了,在這個狀態下,應用程序還有接受數據的能力,但是已經無法發送數據,但是也有一種可能是,客戶端一直處於FIN_WAIT_2狀態,而服務器則一直處於WAIT_CLOSE狀態,而直到應用層來決定關閉這個狀態。

  附半關閉例圖:

  

 

七、CLOSE-WAIT

  等待從本地用戶發來的連接中斷請求 ,被動關閉端TCP接到FIN後,就發出ACK以迴應FIN請求(它的接收也作爲文件結束符傳遞給上層應用程序),並進入CLOSE_WAIT. 

八、CLOSING

  等待遠程TCP對連接中斷的確認,處於此種狀態比較少見。

九、LAST-ACK

  等待原來的發向遠程TCP的連接中斷請求的確認,被動關閉端一段時間後,接收到文件結束符的應用程序將調用CLOSE關閉連接,TCP也發送一個 FIN,等待對方的ACK.進入LAST-ACK。

十、TIME-WAIT

  在主動關閉端接收到FIN後,TCP就發送ACK包,並進入TIME-WAIT狀態,等待足夠的時間以確保遠程TCP接收到連接中斷請求的確認,很大程度上保證了雙方都可以正常結束,但是也存在問題,須等待2MSL時間的過去才能進行下一次連接。

十一、CLOSED

  被動關閉端在接受到ACK包後,就進入了closed的狀態,連接結束,沒有任何連接狀態。

TCP正常連接建立和終止所對應的狀態圖

  

 

狀態遷移過程:

  a、客戶端:

    CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

  b、服務端

    CLOSED->LISTEN->SYN_RECEIVED->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSE

在衆多狀態中,經常關注的有兩個:TIME_WAIT、CLOSE_WAIT。

附狀態遷移過程圖:

  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章