1. 程式人生 > >Linux netstat命令結果分析

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.“ 即:代表附加到套接字的相應程序的路徑名