Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 網絡性能調試三板斧:route、netstat、tcpdump 實戰指南

編輯:關於 Linux

網絡故障排查是 Linux 運維的核心技能。route 管理路由表、netstat 監視連接狀態、tcpdump 抓包分析報文,三者互補,構成網絡調試鐵三角。本文通過實戰場景詳解三大工具核心用法與組合拳打法。

一、route:靜態路由管理與路由表分析

1. 基本語法與常用操作

# 查看完整路由表
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

2. 路由表字段深度解讀

執行 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出接口

3. 實戰場景:多網卡策略路由

雙網卡服務器(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:連接狀態與端口監聽全景圖

注意:netstat 已被 ss(socket statistics)取代,後者性能更高、輸出更豐富,建議養成使用 ss 習慣。

1. 核心參數對照表

功能netstatss (推薦)
所有連接(含監聽)netstat -anss -an
TCP 連接netstat -tnss -tn
UDP 連接netstat -unss -un
監聽端口 + 進程netstat -tnlpss -tnlp
連接狀態統計netstat -sss -s
持續監控watch -n 1 'netstat -an'watch -n 1 'ss -an'

2. 關鍵狀態碼含義

  • LISTEN:服務端監聽中
  • ESTABLISHED:連接已建立,數據傳輸中
  • TIME_WAIT:主動關閉方等待 2MSL 確保對方收到 ACK(高併發下易耗盡端口)
  • CLOSE_WAIT:被動關閉方等待應用層發起關閉(常見洩漏點,表明應用未調用 close())
  • SYN_RECV:服務端收到 SYN,已回 SYN+ACK,等待 ACK(SYN Flood 攻擊特徵)

3. 實戰:定位佔用端口的進程

ss -tnlp | grep :8080
# 輸出:LISTEN 0 128 *:8080 *:* users:(("java",pid=1234,fd=45))
# 即可找到 PID=1234 的 java 進程佔用 8080

三、tcpdump:數據鏈路層抓包分析神器

1. 核心語法結構

tcpdump -i <接口> -nn -s0 -v [過濾表達式] -w <輸出文件.pcap>
參數說明
-i eth0指定抓包接口,any 表示所有接口
-nn不解析主機名/服務名,直接顯示 IP/端口,速度快
-s0抓取完整數據包(預設 262144 字節),避免截斷
-v / -vv / -vvv遞增詳細程度
-w file.pcap寫入二進制文件,供 Wireshark 深度分析
-r file.pcap讀取離線文件分析

2. 經典過濾表達式(BPF 語法)

# 主機過濾
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 包

3. 實戰:排查 HTTP 502 錯誤

# 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 重傳、亂序、零窗口等異常

四、三劍客組合拳:端到端故障定位流程

  1. 連不通? ping → tracepath → route -n 檢查路由 → tcpdump -i any icmp 看封包去向。
  2. 端口不通? ss -tnlp 確認服務監聽 → firewall-cmd --list-all/iptables -nL 檢查防火牆 → tcpdump -i eth0 port 80 看 SYN 是否到達、是否回 SYN+ACK。
  3. 延遲高/丟包? mtr -rwzbc 100 target 定位跳點 → tcpdump -i eth0 -w latency.pcap 分析重傳、RTT、窗口縮放。
  4. 應用報錯? strace -p PID -f -e trace=network 看系統調用 → 結合 tcpdump 對應報文時序。

網絡調試工具架構圖

熟練掌握 route/ss/tcpdump 三大工具,並能靈活組合,將讓您從「網絡不通」的模糊恐慌,轉變為基於證據的精準定位與快速修復。

Copyright © Windows教程網 All Rights Reserved