tcpdump核心在于抓得准、看得懂、判得清,需结合场景选参数、用过滤器、理解输出;先查网卡与流量,再精准定位IP/端口/协议,支持保存pcap供Wireshark分析或远程实时解析。
Linux 下用 tcpdump 抓包,核心不是“抓得到”,而是“抓得准、看得懂、判得清”。它不提供图形界面,但胜在轻量、可靠、可脚本化,是服务器端网络排障的第一把刀。关键在于结合场景选对参数、用好过滤器、理解输出含义。
刚登录一台陌生服务器,先搞清有哪些网卡、当前有没有活跃流量:
tcpdump -D 查看所有可用接口(如 eth0、ens33、lo)sudo tcpdump -i eth0 -c 5 抓 5 个包,确认网卡能收发(避免误选 down 状态或 loopback 接口)-nn 防止 DNS/端口反解拖慢输出:sudo tcpdump -i eth0 -nn -c 10
-t 去掉时间戳前缀,让日志更紧凑不是所有流量都要看,缩小范围才能高效分析:
sudo tcpdump -i eth0 host 10.20.30.40
sudo tcpdump -i eth0 dst 10.20.30.40
sudo tcpdump -i eth0 src 10.20.30.40
sudo tcpdump -i eth0 -nn "host 10.20.30.40 and port 80"
Web 响应慢、SSH 登录卡顿
、DNS 解析超时——这类问题基本靠端口+协议过滤定位:
sudo tcpdump -i eth0 -nn dst port 80
sudo tcpdump -i eth0 -nn src port 443
sudo tcpdump -i eth0 -nn udp port 53
sudo tcpdump -i eth0 -nn "not port 22"
-v 显示标志位:sudo tcpdump -i eth0 -nn -v "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"
终端滚动太快记不住细节,或需多人协作/复现问题,务必保存为标准 pcap 文件:
sudo tcpdump -i eth0 -s 0 -w debug.pcap port 80(-s 0 表示捕获完整包,不截断)wireshark debug.pcap
ssh user@server 'sudo tcpdump -s 0 -c 1000 -nn -w - not port 22' | wireshark -k -i -
sudo tcpdump -i eth0 -nn -A -s 1500 port 80 | grep -i "GET\|POST\|Host:"
tcpdump 不需要学完所有参数才上手。从 -i、-nn、host、port 这几个关键词开始,配合 -c 和 -w 控制数量与落盘,就能覆盖 90% 的线上排查场景。真正难的不是命令,是读懂包里的时间差、重传、RST、窗口变化这些信号——那需要你多看几次三次握手和 HTTP 交互的实际输出。