網絡故障排查是 Linux 運維的核心技能。route 管理路由表、netstat 監視連接狀態、tcpdump 抓包分析報文,三者互補,構成網絡調試鐵三角。本文通過實戰場景詳解三大工具核心用法與組合拳打法。
# 查看完整路由表
route -n # -n 直接顯示 IP,不做 DNS 反解,速度更快
# 添加靜態路由
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
route add -host 10.0.0.5 gw 192.168.1.1 dev eth0
# 刪除路由
route del -net 192.168.10.0 netmask 255.255.255.0
# 添加默認網關
route add default gw 192.168.1.1 dev eth0
執行 route -n 輸出示例:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
| 字段 | 含義 | 關鍵標誌位 |
|---|---|---|
| Destination | 目標網絡/主機地址 | 0.0.0.0 表示默認路由 |
| Gateway | 下一跳網關,* 表示直連 | UG = Up + Gateway(需經網關) |
| Genmask | 子網掩碼,用於匹配目標 IP | |
| Flags | 路由屬性標誌 | U=Up, H=Host, G=Gateway, D=Dynamic, M=Modified |
| Metric | 路由度量值(跳數/代價),越小優先級越高 | |
| Ref | 引用計數 | |
| Use | 被查找/使用次數 | |
| Iface | 出接口 |
雙網卡服務器(eth0 內網、eth1 外網),需指定內網流量走 eth0,外網走 eth1:
# 確保各網卡有正確 IP 與網關
# 添加具體網段路由(優先級高於默認路由)
route add -net 10.0.0.0/8 gw 10.0.0.1 dev eth0
route add -net 172.16.0.0/12 gw 10.0.0.1 dev eth0
# 外網默認路由走 eth1
route add default gw 203.0.113.1 dev eth1 metric 100
注意:netstat 已被 ss(socket statistics)取代,後者性能更高、輸出更豐富,建議養成使用 ss 習慣。
| 功能 | netstat | ss (推薦) |
|---|---|---|
| 所有連接(含監聽) | netstat -an | ss -an |
| TCP 連接 | netstat -tn | ss -tn |
| UDP 連接 | netstat -un | ss -un |
| 監聽端口 + 進程 | netstat -tnlp | ss -tnlp |
| 連接狀態統計 | netstat -s | ss -s |
| 持續監控 | watch -n 1 'netstat -an' | watch -n 1 'ss -an' |
LISTEN:服務端監聽中ESTABLISHED:連接已建立,數據傳輸中TIME_WAIT:主動關閉方等待 2MSL 確保對方收到 ACK(高併發下易耗盡端口)CLOSE_WAIT:被動關閉方等待應用層發起關閉(常見洩漏點,表明應用未調用 close())SYN_RECV:服務端收到 SYN,已回 SYN+ACK,等待 ACK(SYN Flood 攻擊特徵)ss -tnlp | grep :8080
# 輸出:LISTEN 0 128 *:8080 *:* users:(("java",pid=1234,fd=45))
# 即可找到 PID=1234 的 java 進程佔用 8080
tcpdump -i <接口> -nn -s0 -v [過濾表達式] -w <輸出文件.pcap>
| 參數 | 說明 |
|---|---|
-i eth0 | 指定抓包接口,any 表示所有接口 |
-nn | 不解析主機名/服務名,直接顯示 IP/端口,速度快 |
-s0 | 抓取完整數據包(預設 262144 字節),避免截斷 |
-v / -vv / -vvv | 遞增詳細程度 |
-w file.pcap | 寫入二進制文件,供 Wireshark 深度分析 |
-r file.pcap | 讀取離線文件分析 |
# 主機過濾
tcpdump -i eth0 host 192.168.1.100
tcpdump -i eth0 src host 192.168.1.100
tcpdump -i eth0 dst host 192.168.1.100
# 端口過濾
tcpdump -i eth0 port 80
tcpdump -i eth0 portrange 8000-8080
# 協議過濾
tcpdump -i eth0 tcp
tcpdump -i eth0 udp port 53
# 組合邏輯
tcpdump -i eth0 'tcp port 80 and host 192.168.1.100'
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' # 只抓 SYN/ACK 包
# 1. 抓取客戶端與 Nginx 交互
tcpdump -i eth0 -nn -s0 -w nginx_502.pcap 'tcp port 80 and host 192.168.1.100'
# 2. 用 Wireshark 打開,關注:
# - Nginx 向上游發送請求後,是否收到 RST/FIN
# - 上游響應時間是否超過 proxy_read_timeout
# - TCP 重傳、亂序、零窗口等異常
ping → tracepath → route -n 檢查路由 → tcpdump -i any icmp 看封包去向。ss -tnlp 確認服務監聽 → firewall-cmd --list-all/iptables -nL 檢查防火牆 → tcpdump -i eth0 port 80 看 SYN 是否到達、是否回 SYN+ACK。mtr -rwzbc 100 target 定位跳點 → tcpdump -i eth0 -w latency.pcap 分析重傳、RTT、窗口縮放。strace -p PID -f -e trace=network 看系統調用 → 結合 tcpdump 對應報文時序。
熟練掌握 route/ss/tcpdump 三大工具,並能靈活組合,將讓您從「網絡不通」的模糊恐慌,轉變為基於證據的精準定位與快速修復。