詳解linux netstat輸出的網絡連接狀態信息

本博文爲老男孩linu培訓機構早期的培訓教案,特分享以供大家學習參考。
全部系列分爲五篇文章,本博文爲第一篇:
目錄:
一、生產服務器netstat tcp連接狀態................................................................................ 2

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

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

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

二、tcp連接狀態的描述說明(netstat輸出)........................................................................ 4

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

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

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

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

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

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

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

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

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

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

           更多目錄見博文結尾。

一、生產服務器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

二、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狀態並等待關閉。

本文未完待續。更多博文內容:
本系列博文完整內容共5篇:
第一篇:詳解linux netstat輸出的網絡連接狀態信息
http://oldboy.blog.51cto.com/2561410/1184139
第二篇:庖丁解牛獲取連接狀態數的awk數組命令
http://oldboy.blog.51cto.com/blog/2561410/1184165
第三篇:awk數組命令經典生產實戰應用拓展
http://oldboy.blog.51cto.com/blog/2561410/1184177
第四篇:老男孩培訓第八節課前awk考試題案例(門戶面試題解答)
http://oldboy.blog.51cto.com/2561410/1184206
第五篇:linux生產服務器有關網絡狀態的優化措施(告一段落)
http://oldboy.blog.51cto.com/2561410/1184228


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章