Linux運(yùn)維工程師必知:如何在 Linux 中使用網(wǎng)絡(luò)命令netstat?
netstat
是 Linux 和其他類 Unix 操作系統(tǒng)中最常用的網(wǎng)絡(luò)命令之一。它用于顯示有關(guān)網(wǎng)絡(luò)連接、路由表、接口統(tǒng)計(jì)信息、偽裝連接和多播成員的信息。對(duì)于系統(tǒng)管理員和網(wǎng)絡(luò)工程師來(lái)說(shuō),netstat
是診斷網(wǎng)絡(luò)問題、查看當(dāng)前網(wǎng)絡(luò)活動(dòng)以及獲取系統(tǒng)網(wǎng)絡(luò)配置狀態(tài)的關(guān)鍵工具。
本文將詳細(xì)介紹 netstat
命令的各個(gè)方面,包括其功能、常見用法、輸出解讀以及如何使用 netstat
進(jìn)行網(wǎng)絡(luò)故障排除。我們還將探討一些高級(jí)用法,幫助您在實(shí)際工作中更好地應(yīng)用這個(gè)強(qiáng)大的工具。
netstat
命令簡(jiǎn)介
netstat
是網(wǎng)絡(luò)統(tǒng)計(jì)的縮寫,它提供了與網(wǎng)絡(luò)子系統(tǒng)相關(guān)的各種統(tǒng)計(jì)信息。通過(guò) netstat
,您可以監(jiān)控以下內(nèi)容:
網(wǎng)絡(luò)連接的狀態(tài)(TCP、UDP、ICMP 等) 網(wǎng)絡(luò)接口的流量統(tǒng)計(jì) 系統(tǒng)的路由表 監(jiān)聽的套接字(sockets) 網(wǎng)絡(luò)協(xié)議的使用情況
netstat
的功能非常廣泛,因此理解和熟練使用它能夠極大地提高網(wǎng)絡(luò)管理的效率。
netstat
的基本語(yǔ)法如下:
netstat [選項(xiàng)]
常見的選項(xiàng)包括:
-a
:顯示所有的連接,包括監(jiān)聽和非監(jiān)聽的。-t
:僅顯示 TCP 連接。-u
:僅顯示 UDP 連接。-n
:以數(shù)字形式顯示地址和端口號(hào)。-r
:顯示路由表。-i
:顯示網(wǎng)絡(luò)接口統(tǒng)計(jì)信息。-s
:顯示每個(gè)協(xié)議的統(tǒng)計(jì)信息。-p
:顯示哪個(gè)進(jìn)程使用了哪個(gè)套接字。
使用 netstat
查看網(wǎng)絡(luò)連接
顯示所有的網(wǎng)絡(luò)連接
要查看系統(tǒng)上所有的網(wǎng)絡(luò)連接,可以使用 netstat -a
命令。這個(gè)命令列出所有的 TCP 和 UDP 連接,包括正在監(jiān)聽的服務(wù)。示例如下:
netstat -a
輸出通常會(huì)包括如下內(nèi)容:
Proto
:協(xié)議類型(TCP 或 UDP)。Recv-Q
:接收隊(duì)列中的字節(jié)數(shù)。Send-Q
:發(fā)送隊(duì)列中的字節(jié)數(shù)。Local Address
:本地端的 IP 地址和端口號(hào)。Foreign Address
:遠(yuǎn)程端的 IP 地址和端口號(hào)。State
:連接的狀態(tài)(例如 ESTABLISHED, LISTEN 等)。
顯示 TCP 連接
如果只想查看 TCP 連接,可以使用 -t
選項(xiàng)。例如:
netstat -t
顯示 UDP 連接
類似地,您可以使用 -u
選項(xiàng)僅查看 UDP 連接:
netstat -u
使用數(shù)字顯示地址和端口
通常,netstat
會(huì)將地址和端口號(hào)解析為主機(jī)名和服務(wù)名,但有時(shí)您可能需要直接查看數(shù)字形式的地址和端口號(hào),這時(shí)可以使用 -n
選項(xiàng):
netstat -an
查看網(wǎng)絡(luò)接口信息
顯示網(wǎng)絡(luò)接口統(tǒng)計(jì)
netstat
還可以用于查看網(wǎng)絡(luò)接口的統(tǒng)計(jì)信息。使用 -i
選項(xiàng)可以顯示每個(gè)網(wǎng)絡(luò)接口的詳細(xì)統(tǒng)計(jì)信息,例如傳輸?shù)陌鼣?shù)量、錯(cuò)誤數(shù)等:
netstat -i
查看詳細(xì)的接口信息
要查看更詳細(xì)的接口統(tǒng)計(jì)信息,可以使用 -ie
選項(xiàng)。這將顯示接口的錯(cuò)誤信息、MTU(最大傳輸單元)等內(nèi)容:
netstat -ie
查看系統(tǒng)的路由表
顯示系統(tǒng)的路由表
使用 -r
選項(xiàng)可以顯示當(dāng)前系統(tǒng)的路由表。路由表顯示了網(wǎng)絡(luò)數(shù)據(jù)包如何在網(wǎng)絡(luò)中被路由到不同的目的地:
netstat -r
輸出將包括以下列:
Destination
:目標(biāo)網(wǎng)絡(luò)或主機(jī)。Gateway
:到達(dá)目標(biāo)的網(wǎng)關(guān)。Genmask
:子網(wǎng)掩碼。Flags
:標(biāo)志位,表示路由的狀態(tài),例如 U(Up)、G(Gateway)等。Iface
:使用的網(wǎng)絡(luò)接口。
監(jiān)控協(xié)議統(tǒng)計(jì)信息
顯示協(xié)議的統(tǒng)計(jì)信息
netstat -s
選項(xiàng)可以顯示各種網(wǎng)絡(luò)協(xié)議的統(tǒng)計(jì)信息,例如 TCP、UDP、ICMP 等。這個(gè)命令對(duì)于分析網(wǎng)絡(luò)流量和檢測(cè)異常非常有用:
netstat -s
顯示特定協(xié)議的統(tǒng)計(jì)信息
如果您只對(duì)某個(gè)特定協(xié)議的統(tǒng)計(jì)信息感興趣,可以在 -s
后面加上協(xié)議名稱。例如,要查看 TCP 的統(tǒng)計(jì)信息,可以使用:
netstat -st
要查看 UDP 的統(tǒng)計(jì)信息,可以使用:
netstat -su
查看監(jiān)聽的套接字
顯示正在監(jiān)聽的服務(wù)
netstat -l
命令用于顯示正在監(jiān)聽的套接字,這些套接字通常表示系統(tǒng)上正在運(yùn)行的服務(wù)器服務(wù)。示例如下:
netstat -l
按協(xié)議過(guò)濾監(jiān)聽套接字
可以使用 -lt
和 -lu
選項(xiàng)分別過(guò)濾 TCP 和 UDP 的監(jiān)聽套接字:
netstat -lt # 僅顯示正在監(jiān)聽的 TCP 套接字
netstat -lu # 僅顯示正在監(jiān)聽的 UDP 套接字
顯示套接字的進(jìn)程信息
顯示使用套接字的進(jìn)程
netstat
的 -p
選項(xiàng)允許顯示哪個(gè)進(jìn)程使用了哪個(gè)網(wǎng)絡(luò)連接。這在追蹤網(wǎng)絡(luò)活動(dòng)時(shí)非常有用:
netstat -p
請(qǐng)注意,您可能需要超級(jí)用戶權(quán)限才能查看所有進(jìn)程的信息,因此通常需要使用 sudo
:
sudo netstat -p
輸出的最后一列將顯示進(jìn)程的 PID(進(jìn)程 ID)和進(jìn)程名稱。
使用 netstat
進(jìn)行網(wǎng)絡(luò)故障排除
檢查網(wǎng)絡(luò)連接狀態(tài)
netstat
可以幫助您快速檢查系統(tǒng)上的網(wǎng)絡(luò)連接狀態(tài)。例如,您可以使用以下命令查看系統(tǒng)上所有的 ESTABLISHED 連接:
netstat -atn | grep ESTABLISHED
這對(duì)于確認(rèn)某個(gè)服務(wù)是否正在正常通信非常有幫助。
檢測(cè)端口沖突
如果懷疑兩個(gè)服務(wù)之間存在端口沖突,可以使用 netstat
來(lái)檢查哪個(gè)服務(wù)正在占用特定端口。例如,要檢查端口 80 上的服務(wù),您可以使用:
sudo netstat -tuln | grep :80
監(jiān)控網(wǎng)絡(luò)接口流量
使用 netstat -i
可以實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)接口的流量情況,結(jié)合 watch
命令,您可以實(shí)時(shí)刷新查看接口流量:
watch -n 1 netstat -i
這個(gè)命令每秒刷新一次網(wǎng)絡(luò)接口的統(tǒng)計(jì)信息,非常適合監(jiān)控網(wǎng)絡(luò)接口的實(shí)時(shí)流量。
高級(jí)用法
結(jié)合 grep
進(jìn)行過(guò)濾
netstat
生成的大量輸出有時(shí)可能會(huì)讓人眼花繚亂。結(jié)合 grep
命令可以有效過(guò)濾出有用的信息。例如,查找所有與特定 IP 地址相關(guān)的連接:
netstat -an | grep 192.168.1.1
結(jié)合 awk
進(jìn)行統(tǒng)計(jì)分析
使用 awk
可以對(duì) netstat
的輸出進(jìn)行更復(fù)雜的統(tǒng)計(jì)分析。例如,統(tǒng)計(jì)每種連接狀態(tài)的數(shù)量:
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
這個(gè)命令將顯示每種連接狀態(tài)的連接數(shù),如 ESTABLISHED、TIME_WAIT、CLOSE_WAIT 等。
結(jié)合 cron
進(jìn)行定時(shí)監(jiān)控
將 netstat
命令放入 cron
任務(wù)中,可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)狀態(tài)的定時(shí)監(jiān)控。例如,每五分鐘記錄一次當(dāng)前的網(wǎng)絡(luò)連接狀態(tài):
*/5 * * * * /bin/netstat -an > /var/log/netstat.log