tcpdump是验证已缩小范围的具体网络环节的工具,需先用ping/mtr、nc/curl、ss/netstat定位到丢包、重传、SYN半开等现象,再聚焦抓目标流并分析三次握手、RST、重传等关键行为。

排查高频网络故障时,tcpdump 不是用来“猜问题”的,而是用来验证你已缩小范围后的具体环节。它真正起效的前提,是先用基础命令把问题锁到某一层——比如确认是丢包、重传、SYN 半开、TLS 握手卡住,还是应用层响应异常。盲目抓全量包,只会被噪声淹没。
先定位:别一上来就 tcpdump
高频故障(如偶发超时、504、连接拒绝)往往不是“全挂”,而是局部失稳。建议按顺序快速过三步:
- 用 ping + mtr 看链路是否稳定、有无跳点延迟突增或丢包
- 用 nc -zv host port 或 curl -I http://host:port/health 验证端口可达性与 HTTP 基础通路
- 用 ss -tuln | grep :port 和 netstat -s | grep -i "retransmit\|drop" 检查本机 TCP 重传、套接字丢包、监听状态
只有当这些步骤指向“连接能建但数据异常”“请求发出去没回包”“响应头正常但 body 卡住”等现象时,才轮到 tcpdump 上场。
抓什么:聚焦关键流,避免全量噪音
高频问题常集中在特定连接上,抓包必须带过滤,否则几秒就生成上百 MB 文件。常用组合:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 只抓目标服务的流量:tcpdump -i eth0 -nn -s0 port 8080
- 只抓某个客户端 IP 的交互:tcpdump -i eth0 -nn -s0 host 192.168.1.100 and port 8080
- 只抓 TCP 异常标志位(SYN/FIN/RST):tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'
- 边抓边看、同时存文件(适合远程服务器):sudo tcpdump -i eth0 -nn -s0 -w /tmp/trace.pcap && tail -f /tmp/trace.pcap | tcpdump -r - -A
怎么看:盯住三次握手、重传、分片、RST
打开 pcap 文件(或实时输出)后,重点扫以下模式:
- SYN 发出,无 SYN-ACK 回应 → 问题在服务端防火墙、安全组、服务未监听,或中间设备拦截
- SYN-ACK 发出,客户端不发 ACK → 客户端网络问题或本地防火墙丢包
- 大量重复 ACK 或 retransmission → 网络丢包、MTU 不匹配、中间设备限速
- 刚建连就收到 RST → 端口无进程监听、iptables DROP 规则、云平台安全组拦截
- TCP segment of a reassembled PDU → 数据被分片,可能 MTU 设置不当或路径中某段不支持大包
配合 curl 定向验证
tcpdump 是“录像机”,curl 是“体检机”。高频故障复现难,推荐用 curl 控制变量:
- 加 -v 查看完整请求/响应过程:curl -v http://localhost:8080/api
- 禁用 DNS 缓存和重试:curl --dns-interface lo --retry 0 -v http://127.0.0.1:8080/
- 强制指定源端口(便于 tcpdump 过滤):curl --local-port 12345 http://target:8080/,再用 tcpdump port 12345 抓对应流
这样 curl 触发一次行为,tcpdump 就捕获一次精准流量,比盲抓高效得多。

















