netstat狀態詳解

1、生產服務器netstat tcp鏈接狀態................................................................................ 2nginx

1.1生產服務器某個業務LVS負載均衡上鍊接狀態數量............................................... 2web

1.2生產服務器某個業務web上鍊接狀態數量............................................................ 3服務器

1.3 生產服務器某個業務db上鍊接狀態數量.............................................................. 3網絡

2、tcp鏈接狀態的描述說明(netstat輸出)........................................................................ 4併發

2.1 執行netstat -n查看輸出結果共6..................................................................... 4負載均衡

2.2 經過man netstat查看netstat輸出結果信息......................................................... 4less

2.3netstat第六列State的狀態信息......................................................................... 5socket

2.4netstat第六列State狀態信息轉換圖表.............................................................. 6tcp

2.4.1 狀態參考圖一................................................................................................... 7this

2.4.2 狀態參考圖二................................................................................................... 9

2.4.3 狀態參考圖三................................................................................................. 10

2.4.4 客戶端的狀態變化描述............................................................................ 10

2.4.5 服務器的狀態變化描述............................................................................ 10

2.4.6 其餘的狀態變化描述總結......................................................................... 11

            更多目錄見博文結尾。

1、生產服務器netstat tcp鏈接狀態

1.1生產服務器某個業務LVS負載均衡上鍊接狀態數量

[oldboy@LVS-1-1 ~]$ netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'

TIME_WAIT 9137

CLOSE_WAIT 207

FIN_WAIT1 547

ESTABLISHED 597

FIN_WAIT2 74

SYN_RECV 70

CLOSING 55

LAST_ACK 8

 

[root@lvs_nginx~]#netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 422
CLOSE_WAIT 590
FIN_WAIT1 56
FIN_WAIT2 28
ESTABLISHED 1731

1.2生產服務器某個業務web上鍊接狀態數量

[root@web1 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 418
FIN_WAIT1 7
FIN_WAIT2 3
ESTABLISHED 1097
LAST_ACK 2

[root@web2 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 250
FIN_WAIT1 2
FIN_WAIT2 3
ESTABLISHED 1032
LAST_ACK 2

[root@old_web ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 342
CLOSE_WAIT 618
FIN_WAIT1 37
FIN_WAIT2 3
ESTABLISHED 1681
SYN_RECV 1

[root@K32_50718 ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'

TIME_WAIT 4146

FIN_WAIT1 352

FIN_WAIT2 1112

ESTABLISHED 8451

SYN_RECV 186

CLOSING 9

LAST_ACK 102

1.3 生產服務器某個業務db上鍊接狀態數量

[root@web_slave ~]# netstat -n |awk '/^tcp/ {++oldboy[$NF]} END {for(a in oldboy) print a, oldboy[a]}'
TIME_WAIT 263
FIN_WAIT1 1
FIN_WAIT2 48
ESTABLISHED 918

2、tcp鏈接狀態的描述說明(netstat輸出)

2.1 執行netstat -n查看輸出結果共6

[root@OLDBOY ~]# netstat -n 

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local AddressForeign AddressState

tcp00 10.0.0.183:5058410.0.0.181:22ESTABLISHED 

2.2 經過man netstat查看netstat輸出結果信息

[root@oldboy ~]# man netstat 

OUTPUT

Active Internet connections (TCP, UDP, raw)

Proto

The protocol (tcp, udp, raw) used by the socket.

第一列爲socket使用的協議。

Recv-Q

The count of bytes not copied by the user program connected to this socket.

第二列爲接到的可是還沒處理的字節數。

Send-Q

The count of bytes not acknowledged by the remote host.

第三列爲已經發送的可是沒有被遠程主機確認收到的字節數。

Local Address

Address and port number of the local end of the socket.Unless the --numeric(-n)

optionisspecified,thesocketaddress is resolved to its canonical host name

(FQDN), and the port number is translated into the corresponding service name.

第四列爲 本地的地址及端口。

Foreign Address

Address and port number of the remote endofthesocket.Analogousto"Local Address."

第五列爲外部的地址及端口。

State

Thestateofthesocket.Sincethere are no states in raw mode and usually no

states used in UDP, this column may be left blank. Normally this can be one of sev-

eral values:

第六列爲socket的狀態,一般僅僅有tcp的狀態,狀態值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_WAIT等,詳見下文。其中,最重要的是第六列。

2.3 netstat第六列State的狀態信息

若是咱們執行man netstat能夠找到以下的幫助信息

State

Thestateofthesocket.Sincethere are no states in raw mode and usually no

states used in UDP, this column may be left blank. Normally this can be one of sev-

eral values:

第六列爲socket的狀態,一般僅僅有tcp的狀態,狀態值可能有ESTABLISHED,SYN_SENT,SYN_RECV FIN_WAIT1,FIN_WAIT2,TIME_WAIT等,詳見下文。其中,最重要的是第六列。

ESTABLISHED

The socket has an established connection.

socket已經創建鏈接,表示處於鏈接的狀態,通常認爲有一個ESTABLISHED認爲是一個服務的併發鏈接。這個鏈接狀態在生產場景很重要,要重點關注。

SYN_SENT

The socket is actively attempting to establish a connection. 

socket正在積極嘗試創建一個鏈接,即處於發送後鏈接前的一個等待但未匹配進入鏈接的狀態。

SYN_RECV

A connection request has been received from the network.

已經從網絡上收到一個鏈接請求。

FIN_WAIT1

The socket is closed, and the connection is shutting down. 

socket已關閉,鏈接正在或正要關閉。

FIN_WAIT2

Connectionisclosed,andthesocket is waiting for a shutdown from the remote end.

鏈接已關閉,而且socket正在等待遠端結束。

TIME_WAIT

The socket is waiting after close to handle packets still in the network.

socket正在等待關閉處理仍在網絡上的數據包,這個鏈接狀態在生產場景很重要,要重點關注。

CLOSED The socket is not being used.| socket不在被佔用了。

CLOSE_WAIT

The remote end has shutdown, waiting for the socket to close.

遠端已經結束,等待socket關閉。

LAST_ACK

The remote end has shut down, and the socket is closed. Waiting for acknowl-edgement.|

遠端已經結束,而且socket也已關閉,等待acknowl-edgement。

LISTEN Thesocketislisteningforincoming connections.Such sockets are not

included in the output unless you specify the --listening (-l) or --all (-a)

option.

socket正在監聽鏈接請求。

CLOSING

Both sockets are shut down but we still don’t have all our data sent.

sockets關閉,可是咱們仍舊沒有發送數據。

UNKNOWN

The state of the socket is unknown

未知的狀態。

2.4 netstat第六列State狀態信息轉換圖表

TCP的狀態圖,這是一個看起來比較複雜的狀態遷移圖,由於它包含了兩個部分---服務器的狀態遷移和客戶端的狀態遷移,若是從某一個角度出發來看這個圖,就會清晰許多,這裏面的服務器和客戶端都不是絕對的,發送數據的就是客戶端,接受數據的就是服務器。

2.4.1 狀態參考圖一
見後續博文

2.4.2 狀態參考圖二

見後續博文

2.4.3 狀態參考圖三

見後續博文

2.4.4 客戶端的狀態變化描述

經過狀態參考圖三,客戶端的狀態能夠用以下的流程來表示:
CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
以上流程是在程序正常的狀況下應該有的流程,在創建鏈接時,當客戶端收到SYN報文的ACK之後,客戶端就打開了數據交互地鏈接。而結束鏈接則一般是客戶端主動結束的,客戶端結束應用程序之後,須要經歷FIN_WAIT_1,FIN_WAIT_2等狀態,這些狀態的遷移就是前面提到的結束鏈接的四次握手。

2.4.5 服務器的狀態變化描述

經過狀態參考圖三,服務器的狀態能夠用以下的流程來表示:
CLOSED->LISTEN->SYN_RECVD->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
在創建鏈接的時候,服務器端是在第三次握手以後才進入數據交互狀態,而關閉鏈接則是在關閉鏈接的第二次握手之後(注意不是第四次)。而關閉之後還要等待客戶端給出最後的ACK包才能進入初始的狀態。

2.4.6 其餘的狀態變化描述總結

針對服務器和客戶端兩方面的總結以下

1)LISTEN->SYN_SENT,對於這個解釋就很簡單了,服務器有時候也要打開鏈接的嘛。

2)SYN_SENT->SYN_RECVD,服務器和客戶端在SYN_SENT狀態下若是收到SYN數據報,則都會發送SYN的ACK數據報並把自身狀態調整到SYN_RECVD,準備進入ESTABLISHED 

3)SYN_SENT->CLOSED,在發送超時的狀況下,會返回到CLOSED狀態。

4)SYN_RECVD->LISTEN,若是受到RST包,會返回到LISTEN狀態。

5)SYN_RECVD->FIN_WAIT_1,這個遷移是說,能夠不用到ESTABLISHED狀態,而能夠直接跳轉到FIN_WAIT_1狀態並等待關閉。

相關文章
相關標籤/搜索