接下來再看一下著名的 TCP 狀態流轉圖。
CLOSED狀態:表示初始狀態。
LISTEN狀態:表示服務器端的某個 socket 處于監聽狀態,可以接受連接。
SYN_SENT狀態:在服務端監聽后,客戶端 socket 執行 CONNECT 連接時,客戶端發送 SYN 報文,此時客戶端就進入 SYN_SENT
狀態,等待服務端的確認。
SYN_RCVD狀態:表示服務端接收到了SYN 報文,在正常情況下,這個狀態是服務器端的 socket 在建立 TCP連接時的三次握手會話過程中的一個中間狀態,很短暫,基本上用網絡查詢工具 netstat 是很難看到這種狀態的。因此這種狀態時,當收到客戶端的 ACK報文后,它會進入到 ESTABLISHED 狀態。
ESTABLISHED狀態:表示連接已經建立了。
FIN_WAIT_1狀態:這個是已經建立連接之后,其中一方請求終止連接,等待對方的 FIN 報文 。
FIN_WAIT_1 狀態是當 socket 在 ESTABLISHED 狀態時,它想主動關閉連接,向對方發送了 FIN 報文,此時該 socket即進入到 FIN_WAIT_1 狀態。而當對方回應 ACK 報文后,則進入到 FIN_WAIT_2 狀態。
當然在實際的正常情況下,無論對方處于何種情況,都應該馬上回應 ACK 報文,所以 FIN_WAIT_1 狀態一般是比較難見到的,而FIN_WAIT_2 狀態還可以用 netstat 看到。
FIN_WAIT_2狀態:實際上 FIN_WAIT_2 狀態下的 socket,表示半連接,即有一方要求關閉連接,但另外還告訴對方:我暫時還有點數據需要傳送給你,請稍后關閉連接。
TIME_ WAIT狀態:表示收到了對方的 FIN 報文,并發送出了 ACK 報文,就等 2MSL 后即可回到 CLOSED 可用狀態了。如果在FIN_WAIT_1 狀態下,收到了對方同時帶 FIN 標志和 ACK 標志的報文時,可以直接進入到 TIME_WAIT 狀態,而無需經過 FIN_WAIT_2狀態。
CLOSING狀態:這種狀態比較特殊,實際情況中應該是很少見。正常情況下,當發送 FIN 報文后,按理來說是應該先收到(或同時收到)對方的ACK報文,再收到對方的 FIN 報文 。但是 CLOSING 狀態表示你發送 FIN 報文后,并沒有收到對方的 ACK 文,反而收到了對方的 FIN 報文。
如果雙方幾乎在同時關閉一個 socket 的話,那么就出現了雙方同時發送 FIN 報文的情況,就會出現 CLOSING 狀態,表示雙方都正在關閉
socket 連接。
CLOSE_WAIT狀態:表示在等待關閉。當對方關閉一個 socket 后發送 FIN 報文給自己時,系統將毫無疑問地會回應 ACK報文給對方,此時則進入到 CLOSE_WAIT 狀態。
接下來呢,實際上你真正需要考慮的事情是察看你是否還有數據發送給對方,如果沒有,那么你也就可以關閉這個socket了,發送 FIN報文給對方,即關閉連接 。CLOSE _WAIT 狀態下,需要完成的事情是等待你去關閉連接。
LAST_ACK狀態:這個狀態還是比較好理解的,它是被動關閉 方在發送 FIN 報文后,最后等待對方的 ACK 報文。
CLOSED狀態:當收到 ACK 報文后,也即可以進入到 CLOSED 可用狀態了。
2MSL 等待狀態:在 FIN_WAIT_2 發送了最后一個 ACK 數據報以后,要進入 TIME_WAIT
態,這個狀態是防止最后一次握手的數據報沒有傳送到對方那里而準備的。
由于 socket 2MSL 狀態,使得應用程序在 2MSL 時間內無法再次使用同一個 socket ,對于客戶程序還好些,但是對于服務程序(httpd),它總是要使用同一個端口來進行服務,而在 2MSL 時間內,啟動 httpd 就會出現錯誤(插口被使用)。
為了避免這個錯誤,服務器給出了一個平靜時間的概念,這是說在 2MSL的時間內,雖然可以重新啟動服務器,但是這個服務器還是要平靜地等待 2MSL的時間才能進行下一次連接。
FIN WAIT_2 狀態:這就是著名的半關閉狀態了,這是在關閉連接時,客戶端和服務器兩次握手之后的狀態 。
在這個狀態下,應用程序還有接收數據的能力。已經無法發送數據,但是也有一種可能是,客戶端處于FIN_WAIT_2 狀態,而服務器則一直處于WAIT_CLOSE 狀態,直到應用層來決定關閉這個狀態。
RST 同時打開和同時關閉:RST 是另一種關閉連接的方式,應用程序應該可以判斷RST 包的真實性,即是否為異常中止而同時打開和同時關閉則是兩種特殊的 TCP 狀態,發生的概率很小。
-
服務器
+關注
關注
12文章
9434瀏覽量
86509 -
網絡
+關注
關注
14文章
7655瀏覽量
89647 -
TCP
+關注
關注
8文章
1390瀏覽量
79653 -
連接
+關注
關注
2文章
100瀏覽量
21082
發布評論請先 登錄
相關推薦
TCP-IP詳解
狀態圖使用詳解-作者做了一個動態顯示狀態,怎么做的??
tcp ip協議詳解卷三 下載

tcp ip協議詳解卷一
什么是TCP狀態轉移

評論