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

























