網絡狀態診斷工具——netstat命令

netstat命令能夠用來查詢整個系統的網絡狀態。百度百科的定義以下:html

Netstat的定義是: Netstat是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。bash

Netstat是控制檯命令,是一個監控TCP/IP網絡的很是有用的工具,它能夠顯示路由表、實際的網絡鏈接以及每個網絡接口設備的狀態信息。Netstat用於顯示與IP、TCPUDPICMP協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況。服務器

從上面的百科介紹咱們能夠看出,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

上面的輸出包含兩個部分:dom

一、Active Internet connections 有源TCP鏈接,其中"Recv-Q"和"Send-Q"指接收隊列和發送隊列。這些數字通常都應該是0。若是不是則表示軟件包正在隊列中堆積。這種狀況只能在很是少的狀況見到。socket

二、Active UNIX domain sockets 有源Unix域套接口(和網絡套接字同樣,可是隻能用於本機通訊,性能能夠提升一倍)。tcp

對於Internet connections部分輸出參數,作下重點介紹工具

  • Proto:表示鏈接使用的協議,常見的有tcpudptcp6等;性能

  • Recv-Q:指接收隊列,這個數字通常都應該是0,若是不是則表示數據包正在隊列中堆積。拿Tomcat服務器舉個列子:當Tcp鏈接創建後,Tomcat服務器中會有一個accepter線程取出這個鏈接讓worker線程處理,如今假如鏈接創建的速度遠遠大於accepter線程取鏈接的速度,那麼鏈接就在隊列中堆積,此時Recv-Q就會大於0;還有一種可能就是系統遭遇到了Dos攻擊,已經不能再響應外部請求;spa

  • 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.10八、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://www.cnblogs.com/54chensongxia/p/12144520.html

相關文章
相關標籤/搜索