1. 程式人生 > 其它 >TCP連結請求的10種狀態

TCP連結請求的10種狀態

一.狀態顯示

SYN_SENT:這個狀態與SYN_RCVD遙相呼應,當客戶端SOCKET執行CONNECT連線時,它首先發送SYN報文,隨即進入到了SYN_SENT狀態,並等待服務端的傳送三次握手中的第2個報文。SYN_SENT狀態表示客戶端已傳送SYN報文。

LISTEN:該狀態表示伺服器端的某個SOCKET處於監聽狀態,可以接受連線。

ESTABLISHED:表示連線已經建立。

FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2狀態的真正含義都是表示等待對方的FIN報文。區別是: FIN_WAIT_1狀態是當socket在ESTABLISHED狀態時,想主動關閉連線,向對方傳送了FIN報文,此時該socket進入到FIN_WAIT_1狀態。FIN_WAIT_2狀態是當對方迴應ACK後,該socket進入到FIN_WAIT_2狀態,正常情況下,對方應馬上回應ACK報文,所以FIN_WAIT_1狀態一般較難見到,而FIN_WAIT_2狀態可用netstat看到。

CLOSE_WAIT: 此種狀態表示在等待關閉。當對方關閉一個SOCKET後傳送FIN報文給自己,系統會迴應一個ACK報文給對方,此時則進入到CLOSE_WAIT狀態。接下來呢,察看是否還有資料傳送給對方,如果沒有可以 close這個SOCKET,傳送FIN報文給對方,即關閉連線。所以在CLOSE_WAIT狀態下,需要關閉連線。

FIN_WAIT_2:主動關閉連結的一方,發出FIN收到ACK以後進入該狀態。稱之為半
連線或半關閉狀態。該狀態下的socket只能接收資料,不能發。

LAST_ACK: 該狀態是被動關閉一方在傳送FIN報文後,最後等待對方的ACK報文。當收到ACK報文後,即可以進入到CLOSED可用狀態。

TIME_WAIT: 表示收到了對方的FIN報文,併發送出了ACK報文,等2MSL後即可回到CLOSED可用狀態。如果FIN_WAIT_1狀態下,收到對方同時帶 FIN標誌和ACK標誌的報文時,可以直接進入到TIME_WAIT狀態,而無須經過FIN_WAIT_2狀態。

CLOSED:表示關閉狀態(初始狀態)。

二.狀態檢視指令碼

編寫指令碼,可以檢視當前tcp狀態,一般檢視是否有大量TIME_WAIT

TCP='
LISTEN
SYN-SENT
SYM-RECV
ESTABLISHED
FIN_WAIT1
CLOSE_WAIT
FIN_WAIT2
LAST_ACK
TIME_WAIT
CLOSING
CLOSED'

netstat -anptu > /tmp/tcp-status.txt

for i in $TCP;do
	echo "`cat /tmp/tcp-status.txt | grep $i | wc -l`  $i"
done
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。