網路故障排查與效能分析核心工具鏈:route 靜態路由管理、netstat 連線/監聽/介面統計、tcpdump 封包級深度抓包。本文提供實戰指令庫與輸出解讀。
route -n
# 或現代指令
ip route show
# 輸出欄位
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Flags:U Up、G Gateway、H Host、D Dynamic、M ModifiedGenmask:網路遮罩,核心用 目標 IP & Genmask 比對路由# 新增靜態路由
route add -net 10.10.20.0 netmask 255.255.255.0 gw 192.168.1.254 dev eth0
ip route add 10.10.20.0/24 via 192.168.1.254 dev eth0
# 新增預設閘道
route add default gw 192.168.1.1
ip route add default via 192.168.1.1
# 刪除路由
route del -net 10.10.20.0 netmask 255.255.255.0
ip route del 10.10.20.0/24
# 永久生效 (RHEL/CentOS)
# /etc/sysconfig/network-scripts/route-eth0
10.10.20.0/24 via 192.168.1.254 dev eth0
# 永久生效 (Debian/Ubuntu)
# /etc/network/interfaces
up ip route add 10.10.20.0/24 via 192.168.1.254 dev eth0
ss (socket statistics) 為現代替代品,速度更快、輸出更豐富,語法高度相容。
| 需求 | netstat | ss (推薦) |
|---|---|---|
| 所有監聽埠 | netstat -tuln | ss -tuln |
| 所有 TCP 連線 | netstat -tn | ss -tn |
| 所有 UDP 連線 | netstat -un | ss -un |
| 含進程資訊 (需 root) | netstat -tulpn | ss -tulpn |
| 連線狀態統計 | netstat -s | ss -s |
| 路由表 | netstat -rn | ip route |
| 介面統計 | netstat -i | ip -s link |
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp ESTAB 0 0 192.168.1.10:22 192.168.1.100:54321 users:(("sshd",pid=5678,fd=4))
State:LISTEN 監聽、ESTAB 已建立、SYN-SENT/RECV 握手中、FIN-WAIT 關閉中、TIME-WAIT 等待超時Recv-Q/Send-Q:接收/發送緩衝區堆積量 (非 0 可能擁塞)# 只看特定埠口
ss -tn sport = :22
ss -tn dport = :80
# 只看特定狀態
ss -tn state established
ss -tn state time-wait
# 統計各狀態連線數
ss -tn state connected | awk '{print $1}' | sort | uniq -c
tcpdump -i 介面 -n -s0 -w 檔案.pcap 過濾表達式
-i eth0:指定介面 (any 所有)-n:不解析主機名 (快)-s0:抓完整封包 (預設 262144 Bytes)-w file.pcap:寫入檔案供 Wireshark 分析-X:十六進制 + ASCII 輸出-v/-vv/-vvv:詳細度| 需求 | 表達式 |
|---|---|
| 主機 192.168.1.10 所有流量 | host 192.168.1.10 |
| 來源主機 | src host 192.168.1.10 |
| 目的主機 | dst host 192.168.1.10 |
| 埠口 80 | port 80 |
| 來源埠 80 | src port 80 |
| 目的埠 443 | dst port 443 |
| TCP 協議 | tcp |
| HTTP 請求 (埠 80 + SYN/PSH) | tcp port 80 and (tcp[13] & 2 != 0 or tcp[13] & 8 != 0) |
| ICMP (ping) | icmp |
| 特定網段 | net 192.168.1.0/24 |
| 排除 SSH 雜訊 | not port 22 |
| 組合:主機 1.2.3.4 的 HTTP 流量 | host 1.2.3.4 and port 80 |
# 1. 抓取 HTTP 請求頭 (分析 API 呼叫)
tcpdump -i eth0 -n -s0 -A 'tcp port 80 and (tcp[13] & 8 != 0)'
# 2. 疑似 DNS 劫持/解析異常
tcpdump -i eth0 -n -s0 'port 53' -w dns.pcap
# 3. 分析 TCP 重傳/擁塞
tcpdump -i eth0 -n 'tcp[13] & 4 != 0' # RST
tcpdump -i eth0 -n 'tcp[13] & 16 != 0' # ACK 重傳特徵
# 4. 限制抓包數量/大小
tcpdump -i eth0 -c 1000 -w capture.pcap
# 5. 即時顯示封包大小分布
tcpdump -i eth0 -n -c 1000 -tttt | awk '{print $NF}' | sort -n | uniq -c
ss -tulpn 確認服務監聽埠口與進程ip route 確認路由可達ping/traceroute 基礎連通性tcpdump -i eth0 host 目標 IP 抓取雙向封包掌握 ip route/ss/tcpdump 現代三劍客,配合 BPF 過濾表達式與 Wireshark 深度分析,可解決 95% 網路故障與效能瓶頸。棄用 netstat/route/ifconfig 舊工具組,擁抱 ip/ss 原生支援命名空間、JSON 輸出、高效能核心介面。
Linux crontab 定時執行 PHP 程式正確姿勢:Shebang、CLI 模式、環境變數與常見坑點
為什麼 Linux 不需要碎片整理?ext4 檔案系統設計原理與 Windows NTFS 深度對比
awk 型別轉換與字串操作:字串轉數字、數字轉字串、連接技巧一覽
MySQL Auto Increment 故障排查:當自增 ID 觸頂整數上限
Linux UDP 網路程式設計:recvfrom 與 sendto 實作範例
Linux VI 編輯器完全入門指南:三大模式切換、游標移動、編輯刪除、複製貼上、搜尋取代、儲存離開全技巧