分享學習和經驗,歡迎指正。
含 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 connections 和 Active 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 :::* -Proto:通信連接使用的協議。
有tcp/tcp6/udp/udp6這四種,後綴6的區別就是基於IPv4或IPv6,通過後面 IP 地址的格式也能看出來。Recv-Q與Send-Q:表示接收和發送隊列的字節數。
這兩個數字通常應為0。如果不是,則表明可能有數據包在隊列中堆積,是性能或連接問題的潛在信號。Local Address:本地套接字綁定的 IP 地址和端口號。0.0.0.0:<port>或:::<port>表示使用port端口提供的服務允許任意 IP 地址訪問。127.0.0.53:<port>或::1:<port>表示服務只允許本機迴環地址的 IP 訪問。
Foreign Address:遠程對端套接字的 IP 地址和端口號,建立連接後會顯示具體 IP 和端口,監聽時通常顯示*:*。State:連接狀態。LISTEN:監聽中,等待連接請求。ESTABLISHED:連接已經成功建立,正在進行數據通信。這是正常的活躍連接狀態。TIME_WAIT:表示連接正在等待關閉以處理網絡中殘留的數據包。短時間內出現大量此狀態可能需要注意。- ...
PID/Program name:使用套接字的程序識別碼和程序名稱。
補充一下回環地址的概念:
任何支持TCP/IP協議棧的設備,其操作系統內部都預設了一個虛擬的“迴環接口”和對應的 IP 地址範圍,這使得設備天生就是迴環地址的一員。
此外,一個設備要“算作”迴環地址的一員,通常具備以下一個或多個核心特徵:
(1)擁有虛擬迴環接口:這是最根本的特徵。無論是操作系統自動創建的lo,還是網絡設備上手動配置的Loopback0,它們都是純軟件實現的虛擬接口,不依賴任何物理硬件。只要設備操作系統在運行,這個接口的狀態就永遠是活躍的(UP)。
(2)使用特定的 IP 地址段:在IPv4中,整個127.0.0.0/8網段(從127.0.0.1到127.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/PulseAudioRDPSinkProto:協議,此處始終是unix。RefCnt:引用計數,表示通過此套接字連接的進程數量。Flags:套接字標誌。常見的ACC表示套接字處於監聽狀態並接受連接。Type:套接字類型。主要是STREAM(面向連接,類似 TCP)和DGRAM(無連接,類似 UDP)。State:當前狀態。如LISTENING(監聽)、CONNECTED(已連接)、DISCONNECTING(斷開中)等。PID/Program name:進程標識符和程序名稱。例如32762/java,表示 PID 為 32762 的 Java 程序正在使用此套接字。Path:最關鍵的一列,表示套接字在文件系統中的路徑名。許多重要服務和守護進程(如 Docker、D-Bus)通過特定的 socket 文件進行通信。