程序員應(yīng)該掌握的常用網(wǎng)絡(luò)問題定位工具
項目日常運維的過程中,經(jīng)常會遇到各種奇奇怪怪的網(wǎng)絡(luò)問題。那么排查網(wǎng)絡(luò)問題,就成為一個合格的程序員必備技能。這里列舉出一些常用的指令,用于日常工作中快速定位網(wǎng)絡(luò)問題。
ping
這個是大家經(jīng)常用到的一個小工具,用于檢查兩臺服務(wù)器之間是否能夠成功交換數(shù)據(jù)包。 ping
指令向?qū)Ψ街鳈C發(fā)送 ICMP
報文。當(dāng)能成功 ping
通時表示兩臺主機之間的網(wǎng)絡(luò)鏈路是暢通的。如果 ping
不通,首先需要確認對方是否關(guān)停了 ping
服務(wù),如果沒有關(guān)停,就需要檢查雙方的網(wǎng)絡(luò)鏈接問題了。
telnet
該指令主要用于檢查到對方端口的網(wǎng)絡(luò)聯(lián)通性,如果 telnet
能通,一般證明 TCP
三次握手已經(jīng)建立成功,也就是網(wǎng)絡(luò)層是暢通的。如果 telnet
不通,需要確認對方是否已經(jīng)啟動相應(yīng)服務(wù)端口,如果已啟動,那么就要檢查雙方的防火墻策略等問題。
ifconfig
ifconfig
指令除了可以查看網(wǎng)卡信息外,還可以修改網(wǎng)絡(luò)配置。比如查看網(wǎng)卡信息 ifconfig -a
;啟動網(wǎng)卡 ifconfig eth0 up
;關(guān)停網(wǎng)卡 ifconfig eth0 down
等操作。
除了使用 ifconfig
查看及配置網(wǎng)卡信息外,還可以通過 ip link show
查看網(wǎng)卡信息,啟動網(wǎng)卡信息 ip link set down eth0
; 關(guān)停網(wǎng)卡 ip link set up eth1
等操作。
注意:啟動關(guān)停網(wǎng)卡在 SSH
鏈接的情況下,盡量不要操作。
route
route
指令一般用于查看和配置服務(wù)器路由信息。比如查看路由信息 route -n
或者 route -nee
添加或者刪除路由信息 route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} dev {INTERFACE-NAME}
等等。
同樣,除了使用 route
指令外也可以使用 ip route show
查看路由信息;和 route -n
是等效的。這里更推薦使用 ip route
命令。
traceroute
該指令用于查看從源地址到目的地址的路由路徑。比如 traceroute www.baidu.com
用于判斷你和目標(biāo)地址之間經(jīng)過了哪些網(wǎng)絡(luò)設(shè)備。 windows
下是 tracert
netstat
這個指令比較強大,也是程序員日常用的比較多的一個指令。該指令可以顯示服務(wù)器的網(wǎng)絡(luò)狀態(tài),比如,顯示服務(wù)器當(dāng)前所有 socket
鏈接 netstat -a
; 顯示 UDP/TCP
端口的使用情況 netstat -apu/netstat -apt
; 顯示網(wǎng)絡(luò)統(tǒng)計信息 netstat -s
; 查看 8080
端口的狀態(tài) netstat -anp|grep 8080
。
和 netstat
等價的指令是 ss
指令。 ss -l
列出所有本機已經(jīng)打開的端口。 ss -t/u -a
顯示所有 tcp/udp
鏈接。查看某個鏈接屬于哪個進程 ss -tp
。查看本地的端口狀態(tài) ss -t src ip:8080
。這里更推薦使用 ss
指令。
tcpdump
網(wǎng)絡(luò)抓包工具,當(dāng)遇到奇怪的網(wǎng)絡(luò)問題時,通過 tcpdump
進行網(wǎng)絡(luò)抓包,然后進行分析定位問題。根據(jù)源IP進行抓包 tcpdump -i eth2 src 192.168.199.100
即只抓取通過 eth2
這塊網(wǎng)卡的且源地址為 192.168.199.100
的網(wǎng)絡(luò)包。當(dāng)然也可以指定端口抓包,比如 tcpdump src port 8088
??傊撁罘浅姶?,這里不做更多的詳細介紹,感興趣的可以自行了解。
nmap
這是一個網(wǎng)絡(luò)嗅探和掃描工具,做網(wǎng)絡(luò)安全的小伙伴會比較熟悉。經(jīng)常用來檢查對方主機開放了哪些端口。比如查看對方主機開放了哪些端口 nmap -PS 192.168.199.100
,還可以探測目標(biāo)IP的操作系統(tǒng) nmap -O 192.168.199.100
??傊撁钭鼍W(wǎng)絡(luò)安全的會用的比較多,程序員使用的會比較少一些,感興趣的可以深入研究,該指令及其強大。
總結(jié)
上面提到的小工具,對于有些問題的定位,可以通過兩個不同的指令達到同樣的效果。比如 ifconfig -a
和 ip link show
; route -n
和 ip route show
;以及 netstat
和 ss
。出現(xiàn)這樣的情況是因為, ifconfig
和 netstat
等命令來自于 net-tools
工具包,而 ip link
和 ss
等指令來自 iproute2
工具包。 net-tools
已經(jīng)停止開發(fā)了,在很多新版的操作系統(tǒng)里面已經(jīng)不是默認自帶的工具包了,如果想使用需要單獨安裝。 iproute2
是用來替換 net-tools
的,很多新版 linux
都是默認安裝的。而且 iproute2
包中的很多指令在功能和性能上都要比 net-tools
包中提供的指令更強大。我這里從網(wǎng)上找了一張圖片用來說明倆個工具包的指令對比。