TCP協議端口狀態說明:CLOSE-WAIT、TIME-WAIT 、LISTENING、SYN_SENT、ESTABLISHED、LAST-ACK ...

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

1、LISTENING 網絡

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

2、SYN_SENT (客戶端狀態)blog

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

3、SYN_RECEIVED (服務端狀態)服務器端

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

4、ESTABLISHED請求

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

5、FIN-WAIT-1im

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

6、FIN-WAIT-2

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

  附半關閉例圖:

  

 

7、CLOSE-WAIT

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

8、CLOSING

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

9、LAST-ACK

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

10、TIME-WAIT

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

11、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。

附狀態遷移過程圖:

  

相關文章
相關標籤/搜索