博客 / 詳情

返回

理解 netstat

分享學習和經驗,歡迎指正。

含 AI 告知信息。

簡單描述一下 netstat,就是可以查看本機網絡服務狀況,如監聽哪些網絡端口、端口向哪些網絡開放、與其他設備的通信連接狀態等等。

筆者平時調試一般都是用到 netstat -nap,所以基於此列舉和簡單解析。

  • -n:直接輸出 IP 地址而不通過域名服務器。
  • -a:輸出所有連接中的 Socket。
  • -p:輸出正在使用 Socket 的程序識別碼和程序名稱。

瞭解更多命令選型:https://www.runoob.com/linux/linux-comm-netstat.html

netstat -nap 部分打印
$ netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      -
tcp        0      0 10.255.255.254:53       0.0.0.0:*               LISTEN      -
tcp        0      0 172.20.227.242:2222     172.20.224.1:58938      ESTABLISHED -
tcp6       0      0 :::445                  :::*                    LISTEN      -
udp        0      0 0.0.0.0:49017           0.0.0.0:*                           -
udp        0      0 127.0.0.53:53           0.0.0.0:*                           -
udp        0      0 10.255.255.254:53       0.0.0.0:*                           -
udp6       0      0 :::111                  :::*                                -
udp6       0      0 ::1:323                 :::*                                -
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ]         DGRAM      CONNECTED     7438     -
unix  2      [ ]         DGRAM                    27       -                    /var/run/chrony/chronyd.sock
unix  2      [ ACC ]     STREAM     LISTENING     1412     -                    /mnt/wslg/PulseAudioRDPSink
unix  3      [ ]         STREAM     CONNECTED     1404     -
unix  2      [ ]         DGRAM      CONNECTED     12335    -
unix  2      [ ]         DGRAM                    9394     697/systemd          /run/user/1000/systemd/notify

輸出主要分為兩部分:Active Internet connectionsActive UNIX domain sockets,分別管理着不同類型的通信渠道。

  • Active Internet connections 活躍網絡連接。
    這部分顯示的是通過網絡服務進行的連接,既包括與其他計算機的通信,也包括本機內部通過環回地址(如127.0.0.1)的連接。

    Active Internet connections 相關輸出
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      -
    tcp        0      0 172.20.227.242:2222     172.20.224.1:58938      ESTABLISHED -
    tcp6       0      0 :::445                  :::*                    LISTEN      -
    udp        0      0 0.0.0.0:49017           0.0.0.0:*                           -
    udp        0      0 127.0.0.53:53           0.0.0.0:*                           -
    udp6       0      0 ::1:323                 :::*                                -
    
    1. Proto:通信連接使用的協議。
      tcp/tcp6/udp/udp6 這四種,後綴 6 的區別就是基於 IPv4IPv6,通過後面 IP 地址的格式也能看出來。
    2. Recv-Q​Send-Q:表示接收和發送隊列的字節數。
      這兩個數字通常應為0。如果不是,則表明可能有數據包在隊列中堆積,是性能或連接問題的潛在信號。
    3. Local Address:本地套接字綁定的 IP 地址和端口號。
      • 0.0.0.0:<port>:::<port> 表示使用 port 端口提供的服務允許任意 IP 地址訪問。
      • 127.0.0.53:<port>::1:<port> 表示服務只允許本機迴環地址的 IP 訪問。
    4. Foreign Address:遠程對端套接字的 IP 地址和端口號,建立連接後會顯示具體 IP 和端口,監聽時通常顯示 *:*
    5. State:連接狀態。
      • LISTEN:監聽中,等待連接請求。
      • ESTABLISHED:連接已經成功建立,正在進行數據通信。這是正常的活躍連接狀態。
      • TIME_WAIT:表示連接正在等待關閉以處理網絡中殘留的數據包。短時間內出現大量此狀態可能需要注意。
      • ...
    6. PID/Program name:使用套接字的程序識別碼和程序名稱。

    補充一下回環地址的概念:
    任何支持 TCP/IP 協議棧的設備,其操作系統內部都預設了一個虛擬的“迴環接口”和對應的 IP 地址範圍,這使得設備天生就是迴環地址的一員。
    此外,一個設備要“算作”迴環地址的一員,通常具備以下一個或多個核心特徵:
    (1)擁有虛擬迴環接口:這是最根本的特徵。無論是操作系統自動創建的 lo,還是網絡設備上手動配置的 Loopback0,它們都是純軟件實現的虛擬接口,不依賴任何物理硬件。只要設備操作系統在運行,這個接口的狀態就永遠是活躍的(UP)。
    (2)使用特定的 IP 地址段:在 IPv4 中,整個 127.0.0.0/8​ 網段(從 127.0.0.1127.255.255.254)都被保留用於迴環測試。發送到這些地址的數據包會立刻被操作系統“環回”給本機,絕不會通過物理網卡進入外部網絡。IPv6的迴環地址固定為 ::1
    (3)數據流向為內部環回:這是判斷的關鍵。發送到迴環地址的數據,其流轉路徑完全在設備內部的網絡協議棧中完成,不經過物理網絡接口。這也是“環回”(Loopback)一詞的由來。

  • Active UNIX domain sockets 活躍 UNIX 域套接字。
    這部分顯示的是通過 UNIX 域套接字進行的本機進程間通信,數據不經過網絡協議棧,因此效率更高。

    Active UNIX domain sockets 相關輸出
    Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
    unix  2      [ ]         DGRAM      CONNECTED     7438     -
    unix  2      [ ]         DGRAM                    27       -                    /var/run/chrony/chronyd.sock
    unix  2      [ ACC ]     STREAM     LISTENING     1412     -                    /mnt/wslg/PulseAudioRDPSink
    
    1. Proto:協議,此處始終是 unix
    2. RefCnt:引用計數,表示通過此套接字連接的進程數量。
    3. Flags:套接字標誌。常見的 ACC 表示套接字處於監聽狀態並接受連接。
    4. Type:套接字類型。主要是 STREAM(面向連接,類似 TCP)和 DGRAM(無連接,類似 UDP)。
    5. State:當前狀態。如 LISTENING(監聽)、CONNECTED(已連接)、DISCONNECTING(斷開中)等。
    6. PID/Program name:進程標識符​和程序名稱。例如 32762/java,表示 PID 為 32762 的 Java 程序正在使用此套接字。
    7. Path:最關鍵的一列,表示套接字在文件系統中的路徑名。許多重要服務和守護進程(如 Docker、D-Bus)通過特定的 socket 文件進行通信。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.