三次握手的創建狀態服務器
一、一開始創建以前服務器和客戶端的狀態都爲closed網絡
二、服務器建立socket後開始監聽,變爲listen狀態socket
三、客戶端請求創建鏈接,向服務器發送syn報文,客戶端的狀態變爲SYN_SENT.tcp
四、服務器收到客戶端的報文後向客戶端發送ack和SYN報文,此時,服務器的狀態變爲SYN_RCVD.ide
五、而後,客戶端收到ACK、SYN,就向報務端發送ACK,客戶端狀態變爲ESTABLISHED。blog
四次揮手關閉狀態ip
由與tcp鏈接是全雙工的,斷開鏈接會比創建鏈接麻煩一點點。get
一、客戶端先向服務端發送FIN報文,請求斷開鏈接,其狀態變爲FIN_WAIT1。it
二、服務端收到FIN後向客戶端發出ACK,服務器狀態變爲CLOSE_WAIT。io
三、客戶端收到ACK後就進入了FIN_WAIT2狀態。此時鏈接已經斷開了一半了。若是服務器還有數據要發送給客戶端,就會繼續發送。
四、直到發完了,就發送FIN報文,此時服務器進入了LAST_ACK狀態。
五、客戶端收到服務器的FIN後,立刻發送ACK給服務器,此時客戶端進入TIME_WAIT狀態。
六、再過了2MSL找的時間後進入CLOSED狀態。服務器收到客戶端的ACK就進入CLOSED狀態。
CLOSING狀態表示:
客戶端發生了FIN,但沒有收到服務器的ACK,卻收到了服務器的FIN。
這種狀況發生在服務器發送的ACK丟包的時候,由於網絡傳輸有時會有意外。
tcp/ip 11種狀態總結
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
沒有任何鏈接狀態