天天看點

tcp/ip 11種狀态

三次握手的建立狀态

<a href="https://s5.51cto.com/wyfs02/M00/A4/5E/wKioL1mpJw_zkF_zAAE4EdYsXtg326.png" target="_blank"></a>

1、一開始建立之前伺服器和用戶端的狀态都為closed

2、伺服器建立socket後開始監聽,變為listen狀态

3、用戶端請求建立連接配接,向伺服器發送syn封包,用戶端的狀态變為SYN_SENT.

4、伺服器收到用戶端的封包後向用戶端發送ack和SYN封包,此時,伺服器的狀态變為SYN_RCVD.

5、然後,用戶端收到ACK、SYN,就向報務端發送ACK,用戶端狀态變為ESTABLISHED。

四次揮手關閉狀态

<a href="https://s1.51cto.com/wyfs02/M01/05/AD/wKiom1mpLH2T7IsdAAFNunfTTMQ179.png" target="_blank"></a>

由與tcp連接配接是全雙工的,斷開連接配接會比建立連接配接麻煩一點點。

1、用戶端先向服務端發送FIN封包,請求斷開連接配接,其狀态變為FIN_WAIT1。

2、服務端收到FIN後向用戶端發出ACK,伺服器狀态變為CLOSE_WAIT。

3、用戶端收到ACK後就進入了FIN_WAIT2狀态。此時連接配接已經斷開了一半了。如果伺服器還有資料要發送給用戶端,就會繼續發送。

4、直到發完了,就發送FIN封包,此時伺服器進入了LAST_ACK狀态。

5、用戶端收到伺服器的FIN後,馬上發送ACK給伺服器,此時用戶端進入TIME_WAIT狀态。

6、再過了2MSL找的時間後進入CLOSED狀态。伺服器收到用戶端的ACK就進入CLOSED狀态。

CLOSING狀态表示:

用戶端發生了FIN,但沒有收到伺服器的ACK,卻收到了伺服器的FIN。

這種情況發生在伺服器發送的ACK丢包的時候,因為網絡傳輸有時會有意外。

tcp/ip 11種狀态總結

<a href="https://s5.51cto.com/wyfs02/M00/05/D8/wKiom1mtJcOwh5pJAALOQDnDgZk980.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M00/A4/89/wKioL1mtJaei4GI0AAGW6AQmvH8321.png" target="_blank"></a>

LISTEN

偵聽來自遠方的TCP端口的連接配接請求

SYN-SENT

在發送連接配接請求後等待比對的連接配接請求 

SYN-RECEIVED

在收到和發送一個連接配接請求後等待對方對連接配接請求的确認

ESTABLISHED

代表一個打開的連接配接

FIN-WAIT-1

等待遠端TCP連接配接中斷請求,或先前的連接配接中斷請求的确認

FIN-WAIT-2

從遠端TCP等待連接配接中斷請求

CLOSE-WAIT

等待從本地使用者發來的連接配接中斷請求

CLOSING

等待遠端TCP對連接配接中斷的确認

LAST-ACK

等待原來的發向遠端TCP的連接配接中斷請求的确認

TIME-WAIT

等待足夠的時間以確定遠端TCP接收到連接配接中斷請求的确認 

CLOSED

沒有任何連接配接狀态 

本文轉自 a120518129 51CTO部落格,原文連結:http://blog.51cto.com/silencezone/1882436,如需轉載請自行聯系原作者

繼續閱讀