netstat
命令能夠用來查詢整個系統的網絡狀態。百度百科的定義以下:html
Netstat的定義是: Netstat是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。bash
Netstat是控制檯命令,是一個監控TCP/IP網絡的很是有用的工具,它能夠顯示路由表、實際的網絡鏈接以及每個網絡接口設備的狀態信息。Netstat用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況。服務器
從上面的百科介紹咱們能夠看出,netstat
命令在查詢網絡問題的時候十分有用。下面就來詳細介紹下netstat
的用法。網絡
netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]
[root@SHA-L0161171 arthas]$ netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:8004 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:11052 0.0.0.0:* LISTEN tcp 0 0 172.24.248.108:8004 192.168.202.31:57588 ESTABLISHED tcp 0 0 127.0.0.1:51092 127.0.0.1:8091 TIME_WAIT tcp 0 0 172.24.248.108:8004 192.168.202.38:32283 ESTABLISHED tcp 0 0 172.24.248.108:8004 192.168.202.38:58923 TIME_WAIT tcp 0 0 172.24.248.108:8004 192.168.202.32:39983 ESTABLISHED tcp 0 0 172.24.248.108:8004 192.168.202.37:38230 ESTABLISHED tcp 0 0 172.24.248.108:8004 192.168.202.34:5081 ESTABLISHED tcp 0 0 172.24.248.108:8004 192.168.202.32:17240 ESTABLISHED tcp 0 0 127.0.0.1:38784 127.0.0.1:12050 TIME_WAIT ... Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 3 [ ] DGRAM 18442 /run/systemd/notify unix 2 [ ] DGRAM 18444 /run/systemd/cgroups-agent unix 2 [ ] DGRAM 23822 /var/run/chrony/chronyd.sock unix 8 [ ] DGRAM 18455 /run/systemd/journal/socket unix 18 [ ] DGRAM 18457 /dev/log unix 2 [ ] DGRAM 14151 /var/run/nscd/socket unix 2 [ ] DGRAM 584 /run/systemd/shutdownd unix 3 [ ] STREAM CONNECTED 124439388 /run/dbus/system_bus_socket unix 3 [ ] STREAM CONNECTED 42312 /run/systemd/journal/stdout unix 3 [ ] STREAM CONNECTED 39909
上面的輸出包含兩個部分:dom
一、Active Internet connections 有源TCP鏈接,其中"Recv-Q"和"Send-Q"指接收隊列和發送隊列。這些數字通常都應該是0。若是不是則表示軟件包正在隊列中堆積。這種狀況只能在很是少的狀況見到。socket
二、Active UNIX domain sockets 有源Unix域套接口(和網絡套接字同樣,可是隻能用於本機通訊,性能能夠提升一倍)。tcp
對於Internet connections部分輸出參數,作下重點介紹工具
Proto:表示鏈接使用的協議,常見的有tcp
、udp
和tcp6
等;性能
Recv-Q:指接收隊列,這個數字通常都應該是0,若是不是則表示數據包正在隊列中堆積。拿Tomcat服務器舉個列子:當Tcp鏈接創建後,Tomcat服務器中會有一個accepter線程取出這個鏈接讓worker線程處理,如今假如鏈接創建的速度遠遠大於accepter線程取鏈接的速度,那麼鏈接就在隊列中堆積,此時Recv-Q就會大於0;還有一種可能就是系統遭遇到了Dos攻擊,已經不能再響應外部請求;spa
Send-Q:發送隊列,對方沒有收到的數據或者說沒有Ack的,仍是本地緩衝區,若是發送隊列Send-Q不能很快的清零,多是有應用向外發送數據包過快,或者是對方接收數據包不夠快;
Local Address:表示本地地址,這個字段通常有三種形式的值:
Foreign Address:和本機通訊的外部IP地址,顯示規則和Local Address相似,再也不贅述了;
State:表示鏈接狀態,常見的鏈接狀態以下:
LISTEN :The socket is listening for incoming connections (偵聽來自遠方TCP端口的鏈接請求) SYN_SENT:The socket is actively attempting to establish aconnection. (在發送鏈接請求後等待匹配的鏈接請求) SYN_RECV:A connection request has been received from the network. (在收到和發送一個鏈接請求後等待對鏈接請求的確認) ESTABLISHED:The socket has an established connection. (表明一個打開的鏈接,數據能夠傳送給用戶) FIN_WAIT1: The socket is closed, and the connection is shutting down. (等待遠程TCP的鏈接中斷請求,或先前的鏈接中斷請求的確認 ) CLOSE_WAIT:The remote end has shut down, waiting for the socketto close. (等待從本地用戶發來的鏈接中斷請求) FIN_WAIT2:Connection is closed, and the socket is waiting for a shutdownfrom the remote end. (從遠程TCP等待鏈接中斷請求 ) LAST_ACK: The remote end has shut down, and the socket is closed. Waiting foracknowledgement. (等待原來發向遠程TCP的鏈接中斷請求的確認) TIME_WAIT:Thesocket is waiting after close to handle packets still in the network (等待足夠的時間以確保遠程TCP接收到鏈接中斷請求的確認) CLOSING: Bothsockets are shut down but we still don’t have all our datasent. (等待遠程TCP對鏈接中斷的確認) CLOSED:The socket is not being used. (沒有任何鏈接狀態 ) UNKNOWN:Thestate of the socket is unknown。
備註
1. 列出全部信息
netstat -a # 其中n表示使用IP地址表示機器信息,而不是使用域名 netstat -an
這個命令配合grep
最常使用。
2. 只顯示監聽端口
netstat -l
3. 顯示PID和進程名稱
netstat -anp
4. 持續輸出狀態信息
netstat -anpc
5. 查看鏈接某服務端口最多的的IP地址(前20個)
netstat -nat | grep "xx.xx.xx.xx:port" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
輸出
4 192.168.202.38 4 192.168.202.37 4 192.168.202.36 4 192.168.202.35 3 192.168.202.34 3 192.168.202.33 3 192.168.202.32 2 192.168.202.31
原文出處:https://www.cnblogs.com/54chensongxia/p/12144520.html