Linux netstat命令結果分析
一:獲取資料
-
使用命令
netstat -anp | less
//命令介紹:
netstat : linux中檢視網路狀態的命令
-a : 顯示所有的連線
-n : 以ip格式顯示
-p : 顯示連線對應的程序
netstat命令詳解請移步:http://man.linuxde.net/netstat
-
得到結果
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 458/sshd tcp 0 52 10.105.254.117:22 124.251.53.238:58615 ESTABLISHED 29936/sshd:
[email protected] tcp6 0 0 :::3306 :::* LISTEN 32519/mysqld tcp6 0 0 :::111 :::* LISTEN 5737/rpcbind tcp6 0 0 :::22 :::* LISTEN 458/sshd udp 0 0 0.0.0.0:111 0.0.0.0:* 5737/rpcbind udp 0 0 0.0.0.0:824 0.0.0.0:* 5737/rpcbind udp6 0 0 :::111 :::* 5737/rpcbind udp6 0 0 :::824 :::* 5737/rpcbind Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 2 [ ACC ] STREAM LISTENING 130995418 32519/mysqld /var/lib/mysql/mysql.sock unix 2 [ ACC ] STREAM LISTENING 12137 454/lsmd /var/run/lsm/ipc/simc unix 2 [ ] DGRAM 6767 1/systemd /run/systemd/notify unix 2 [ ] DGRAM 6769 1/systemd /run/systemd/cgroups-agent unix 2 [ ACC ] STREAM LISTENING 6778 1/systemd /run/systemd/journal/stdout unix 5 [ ] DGRAM 6781 1/systemd /run/systemd/journal/socket unix 8 [ ] DGRAM 6783 1/systemd /dev/log unix 2 [ ACC ] STREAM LISTENING 9601 1/systemd /run/lvm/lvmetad.socket unix 2 [ ] DGRAM 9613 1/systemd /run/systemd/shutdownd unix 2 [ ACC ] STREAM LISTENING 9615 1/systemd /run/lvm/lvmpolld.socket unix 2 [ ACC ] STREAM LISTENING 11170 1/systemd /var/run/rpcbind.sock unix 2 [ ACC ] STREAM LISTENING 12196 454/lsmd /var/run/lsm/ipc/sim unix 2 [ ACC ] STREAM LISTENING 11173 1/systemd /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 11944 462/acpid /var/run/acpid.socket unix 2 [ ACC ] STREAM LISTENING 9448 1/systemd /run/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 9464 1/systemd /run/udev/control
二:結果分析
-
分為兩部分:
-
Active Internet connections(有源Internet連線):用於網路連線傳輸
-
Active UNIX domain sockets(有源UNIX套接字):只能用於本地通訊,效能比第一種好
-
-
Active Internet connections 部分:
-
欄位介紹:
-
Proto : 該連線所使用的協議
-
Recv-Q : 接受佇列
-
Send-Q : 傳送佇列
-
Local Address: 本地ip:port
-
Foreign Address : 遠端主機ip:port
-
State :連線所處的狀態
-
PID/Program name :使用該連線的程序id和name
-
-
相關欄位作用:
-
Proto :通過此欄位可以看到連線使用的是什麼協議,主要是TCP協議還是UDP協議,還有TCP6、UDP6這就是使用了ipv6的協議
-
Recv-Q :表示收到的資料已經在本地接收緩衝,但是還有多少沒有被程序取走,recv()。如果接收佇列Recv-Q一直處於阻塞狀態,也就是Recv-Q值不為零並且值挺大,可能是遭受了Dos 攻擊。
-
Send-Q :對方沒有接受的資料,仍然在本地緩衝區中。如果傳送佇列Send-Q不能很快的清零,可能是有應用向外傳送資料包過快,或者是對方接收資料包不夠快。這時候就要調整發送速度或者接受速度了。例如:如果看到是大量的 send-Q ,可以判定是傳送資料給目的地址的時候出現了阻塞的問題,導致了包堆積在本地快取中,不能成功發出去。那麼問題就可能產生在了客戶端,根據業務邏輯可以看看是不是客戶端傳送的TCP長連線數量過多。驗證辦法,嘗試減少客戶端和服務的長連線.檢視效果。
-
Recv-Q 和 Send-Q :這兩個值通常應該為0,如果不為0可能是有問題的。packets在兩個佇列裡都不應該有堆積狀態。可接受短暫的非0情況。
-
在正常情況下, LISTEN 狀態中: Recv-Q 表示的當前等待服務端呼叫 accept 完成三次握手的 listen backlog 數值,也就是說,當客戶端通過 connect() 去連線正在 listen() 的服務端時,這些連線會一直處於Recv-Q這個queue 裡面直到被服務端 accept();Send-Q 表示的則是最大的 listen backlog 數值。
-
其餘狀態: 非 LISTEN 狀態之前理解的沒有問題。Recv-Q 表示 receive queue 中的 bytes 數量;Send-Q 表示 send queue 中的 bytes 數值。
-
-
-
Active UNIX domain sockets 部分:
-
欄位介紹:
-
Proto : 該連線所使用的協議
-
RefCnt:引用計數(即通過此套接字附加的程序),也就是連線到本套介面上的程序數量
-
Flags:"The flags displayed are SO_ACCEPTON (displayed as ACC), SO_WAITDATA (W) or SO_NOSPACE (N). SO_ACCECPTON is used on unconnected sockets if their corresponding processes are waiting for a connect request. The other flags are not of normal interest." 即:顯示的標誌有SO_ACCEPTON(顯示為ACC),SO_WAITDATA(W)或SO_NOSPACE(N)。 SO_ACCECPTON程序正在等待連線請求還未連線的套接字。
-
Type:套接字的型別
- 有幾種型別的套接字訪問:
- SOCK_DGRAM:資料報(無連線)模式。
- SOCK_STREAM:流(連線)套接字。
- SOCK_RAW:原始套接字。
- SOCK_RDM:這個伺服器提供可靠傳遞的訊息。
- SOCK_SEQPACKET:這是一個順序資料包套接字。
- SOCK_PACKET:原始介面訪問套接字。
-
State:套接字當前的狀態
- 該欄位將包含以下狀態:
- FREE:未分配套接字。
- LISTENING:套接字正在偵聽連線請求。如果指定--listening(-l)或--all(-a)選項,則此類套接字僅包含在輸出中。
- CONNECTING:套接字即將建立連線。
- CONNECTED:已連線套接字。
- DISCONNECTING :套接字正在斷開連線。
- (empty) :套接字未連線到另一個套接字。
-
PID/Program name :使用該連線的程序id和name
-
I-Node:unix系統檔案系統中每個檔案都存在的inode
-
Path:”This is the path name as which the corresponding processes attached to the socket.“ 即:代表附加到套接字的相應程序的路徑名
-