首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Linux 網路效能三劍客:route、netstat、tcpdump 實戰詳解

     編輯:MySQL 資料庫相關知識

前言

排查網路效能、連線異常、流量分析,route、netstat、tcpdump 是 Linux 系統管理員必備的三大核心工具。本文系統整理用法、輸出解讀與實戰場景。

一、route:靜態路由表管理

查看路由表

route -n
# -n 直接顯示 IP,不做 DNS 反解,速度快
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
10.10.8.0       0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

欄位解讀

欄位含義
Destination目標網路/主機位址
Gateway下一跳閘道,* 表直連
Genmask網路遮罩,與 Destination 決定匹配範圍
FlagsU=Up, H=Host, G=Gateway, R=Reinstate, D=Dynamic, M=Modified, !=Reject
Metric路由成本,越小優先級越高
Ref引用計數
Use查找次數
Iface輸出介面

常用操作

# 新增主機路由
route add -host 192.168.5.10 gw 192.168.1.254 dev eth0

# 新增網路路由
route add -net 10.20.30.0 netmask 255.255.255.0 gw 10.10.8.1 dev eth0

# 設定預設閘道
route add default gw 192.168.1.1 dev eth0

# 刪除路由
route del -net 10.20.30.0 netmask 255.255.255.0
route del default gw 192.168.1.1

# 拒絕路由 (黑洞)
route add -net 192.168.100.0 netmask 255.255.255.0 reject

持久化:編輯 /etc/sysconfig/network-scripts/route-eth0 (RHEL/CentOS) 或 /etc/network/interfaces (Debian/Ubuntu) 加入 up route add ...。

二、netstat:網路連線、監聽、統計總覽

注意:netstat 屬於 net-tools 套件,已停止維護。現代系統建議使用 ss (iproute2),語法類似但效能更好。本文仍以 netstat 為主,並標註 ss 對應指令。

核心參數組合

  • -t TCP、-u UDP、-l 監聽、-n 數位顯示、-p 顯示 PID/程式名 (需 root)、-a 所有 (含監聽/非監聽)、-r 路由表、-i 介面統計、-s 協定統計、-e 延伸資訊。

實戰範例

# 1. 查看所有 TCP/UDP 監聽埠及進程
netstat -tulpn
# ss -tulpn

# 2. 查看所有 ESTABLISHED 連線
netstat -tn | grep ESTABLISHED
# ss -tn state established

# 3. 統計連線狀態分布
netstat -tan | awk '/^tcp/ {print $6}' | sort | uniq -c | sort -rn
# ss -tan state all | awk 'NR>1 {print $2}' | sort | uniq -c | sort -rn

# 4. 找出佔用特定埠的進程
netstat -tulpn | grep :3306
# ss -tulpn sport = :3306

# 5. 查看介面統計 (錯誤、丟包、碰撞)
netstat -i
# ss -i

# 6. 協定層統計 (TCP 重傳、ICMP、IP 碎片等)
netstat -s
# ss -s

輸出欄位關鍵解讀

欄位含義
Proto協定 (tcp, udp, raw)
Recv-Q接收佇列位元組數 (未被應用讀取)
Send-Q發送佇列位元組數 (未被對端確認)
Local Address本地 IP:Port
Foreign Address對端 IP:Port
StateTCP 狀態 (LISTEN, SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1/2, TIME_WAIT, CLOSE_WAIT, LAST_ACK, CLOSED)
PID/Program name進程 ID 與名稱 (-p 需 root)

三、tcpdump:封包捕獲與深度分析

基本語法

tcpdump [選項] -i 介面 '過濾運算式'
# 常用選項:
# -n  不解析主機名/埠名
# -nn 不解析主機名/埠名/協定名
# -X  顯示封包內容 (Hex + ASCII)
# -XX 含鏈路層頭部
# -S  顯示絕對序號
# -v/-vv/-vvv 詳細程度
# -c N 捕獲 N 個封包後結束
# -w 檔案 寫入 pcap 檔 (供 Wireshark 分析)
# -r 檔案 讀取 pcap 檔
# -s N 捕獲長度 (預設 262144,0 表完整封包)

BPF 過濾運算式精選

場景運算式
特定主機host 192.168.1.100
特定埠port 80 / portrange 8000-8080
來源/目的src host 1.2.3.4 / dst port 443
協定tcp / udp / icmp
TCP 旗標tcp[tcpflags] & tcp-syn != 0 (SYN), tcp[tcpflags] & tcp-fin != 0 (FIN)
複合host 192.168.1.100 and port 3306 and tcp
排除not port 22 (排除 SSH 雜訊)

實戰範例

# 1. 捕獲 80 埠流量並存檔分析
tcpdump -i eth0 -nn -s0 -w http.pcap 'port 80'

# 2. 即時顯示 HTTP GET 請求 (簡易)
tcpdump -i eth0 -nn -A -s0 'port 80 and tcp[((tcp[12]>>2)*4)] = 0x47'  # G=0x47

# 3. 分析 MySQL 慢查詢封包 (需解析協定,建議用 Wireshark)
tcpdump -i eth0 -nn -s0 -w mysql.pcap 'port 3306'

# 4. 統計連線建立速率 (SYN 計數)
tcpdump -i eth0 -nn -c 1000 'tcp[tcpflags] & tcp-syn != 0' | wc -l

# 5. 排除 SSH 觀察其他流量
tcpdump -i eth0 -nn 'not port 22'

進階:Wireshark 圖形化分析

  1. tcpdump -i eth0 -s0 -w capture.pcap 'port 3306'
  2. 下載 capture.pcap 到本機,用 Wireshark 開啟。
  3. 套用顯示過濾器:mysql.query、tcp.analysis.retransmission、tcp.stream eq 0。
  4. 右鍵 Follow > TCP Stream 重組完整會話。

四、綜合排查流程範例:網站間歇性超時

  1. netstat -s | grep -i retrans 觀察 TCP 重傳率是否異常升高。
  2. netstat -tan | awk '$6=="TIME_WAIT"{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn 檢查 TIME_WAIT 暴增 (短連線風暴)。
  3. tcpdump -i eth0 -nn -c 500 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0' 捕獲 SYN/RST 封包,分析握手失敗/連線重置。
  4. route -n 確認回程路由正確 (非對稱路由導致單向通)。
  5. ss -ti 觀察 TCP 資訊 (rtt, cwnd, retrans 等)。

結語

熟練 route (路由)、netstat/ss (連線狀態)、tcpdump (封包真相),能解決 90% 以上的 Linux 網路效能與連線異常問題。建議將 ss、ip route 納入日常工具箱,並善用 Wireshark 進行深度封包分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved