netstat命令可以用來查詢整個系統的網路狀態,百度百科的定義如下:
Netstat的定義是: Netstat是在內核中訪問網路連接狀態及其相關資訊的程式,它能提供TCP連接,TCP和UDP監聽,行程記憶體管理的相關報告,
Netstat是控制臺命令,是一個監控TCP/IP網路的非常有用的工具,它可以顯示路由表、實際的網路連接以及每一個網路介面設備的狀態資訊,Netstat用于顯示與IP、TCP、UDP和ICMP協議相關的統計資料,一般用于檢驗本機各埠的網路連接情況,
從上面的百科介紹我們可以看出,netstat命令在查詢網路問題的時候十分有用,下面就來詳細介紹下netstat的用法,
使用語法
netstat [-acCeFghilMnNoprstuvVwx][-A<網路型別>][--ip]
引數說明
- -a或--all 顯示所有連線中的Socket,
- -A<網路型別>或--<網路型別> 列出該網路型別連線中的相關地址,
- -c或--continuous 持續列出網路狀態,
- -C或--cache 顯示路由器配置的快取資訊,
- -e或--extend 顯示網路其他相關資訊,
- -F或--fib 顯示FIB,
- -g或--groups 顯示多重廣播功能群組組員名單,
- -h或--help 在線幫助,
- -i或--interfaces 顯示網路界面資訊表單,
- -l或--listening 顯示監控中的服務器的Socket,
- -M或--masquerade 顯示偽裝的網路連線,
- -n或--numeric 直接使用IP地址,而不通過域名服務器,
- -N或--netlink或--symbolic 顯示網路硬體外圍設備的符號連接名稱,
- -o或--timers 顯示計時器,
- -p或--programs 顯示正在使用Socket的程式識別碼和程式名稱,
- -r或--route 顯示Routing Table,
- -s或--statistice 顯示網路作業資訊統計表,
- -t或--tcp 顯示TCP傳輸協議的連線狀況,
- -u或--udp 顯示UDP傳輸協議的連線狀況,
- -v或--verbose 顯示指令執行程序,
- -V或--version 顯示版本資訊,
- -w或--raw 顯示RAW傳輸協議的連線狀況,
- -x或--unix 此引數的效果和指定"-A unix"引數相同,
- --ip或--inet 此引數的效果和指定"-A inet"引數相同,
使用實體
[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
上面的輸出包含兩個部分:
1、Active Internet connections 有源TCP連接,其中"Recv-Q"和"Send-Q"指接收佇列和發送佇列,這些數字一般都應該是0,如果不是則表示軟體包正在佇列中堆積,這種情況只能在非常少的情況見到,
2、Active UNIX domain sockets 有源Unix域套介面(和網路套接字一樣,但是只能用于本機通信,性能可以提高一倍),
對于Internet connections部分輸出引數,做下重點介紹
-
Proto:表示連接使用的協議,常見的有
tcp、udp和tcp6等; -
Recv-Q:指接收佇列,這個數字一般都應該是0,如果不是則表示資料包正在佇列中堆積,拿Tomcat服務器舉個列子:當Tcp連接建立后,Tomcat服務器中會有一個accepter執行緒取出這個連接讓worker執行緒處理,現在假如連接建立的速度遠遠大于accepter執行緒取連接的速度,那么連接就在佇列中堆積,此時Recv-Q就會大于0;還有一種可能就是系統遭遇到了Dos攻擊,已經不能再回應外部請求;
-
Send-Q:發送佇列,對方沒有收到的資料或者說沒有Ack的,還是本地緩沖區,如果發送佇列Send-Q不能很快的清零,可能是有應用向外發送資料包過快,或者是對方接收資料包不夠快;
-
Local Address:表示本地地址,這個欄位一般有三種形式的值:
- 172.24.248.108:8004 : 這種形式的值是最常見的值,表示本機有個ip地址是172.24.248.108,有個程式正在使用本機的8004埠和外部程式建立連接;
- 0.0.0.0:8004 : 這種形式的值看起來比較奇怪,其實其中的0.0.0.0表示的是所有能表示本機的ip地址,我們知道機器是可以配置多塊網卡的,比如現在我們的機器配置了兩個網卡,其中一塊配置的地址是172.24.248.108,另外一塊配置的地址是172.24.248.109,那么這邊的0.0.0.0就是表示172.24.248.108、172.24.248.109和127.0.0.1這三個IP,
- :::8004 : 其中的::表示全0的IP地址,比如::?? 表示全0的IPv6地址,*表示任意的埠號,全0的含義和0.0.0.0的含義相同,
-
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,
備注
- SYN: (同步序列編號,SynchronizeSequence Numbers)該標志僅在三次握手建立TCP連接時有效,表示一個新的TCP連接請求,
- ACK: (確認編號,AcknowledgementNumber)是對TCP請求的確認標志,同時提示對端系統已經成功接收所有資料,
- FIN: (結束標志,Finish)用來結束一個TCP回話.但對應埠仍處于開放狀態,準備接收后續資料,
常用netstat命令
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://blog.csdn.net/dongl890426/article/details/86981901
- https://blog.csdn.net/qq_42014600/article/details/90372315
- https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316661.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/144230.html
標籤:Linux
上一篇:Centos7開放及查看埠
