TCP連結請求的10種狀態
阿新 • • 發佈:2021-12-08
一.狀態顯示
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
本文版權歸作者所有,歡迎轉載,請務必新增原文連結。