三次握手的建立狀态
<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
沒有任何連接配接狀态
本文轉自silence部落格51CTO部落格,原文連結http://blog.51cto.com/silencezone/1882436如需轉載請自行聯系原作者
a120518129