在定位网络或应用问题时, tcpdump 是工程师的第一道利器:它能在流量发生处立刻抓取原始包,为后续在 Wireshark 中做深度分析提供证据。本文从实战出发,讲清常用命令与过滤器、如何把抓到的 pcap 快速定位到“重传 / 握手 / RST / 分片 / MTU”类问题,给出系统化排查流程,并说明在 iOS 真机或代理不可用时如何用 USB 直连抓包工具作为补充(如抓包大师 Sniffmaster),把诊断做到端到端。
一、抓包准备与基本命令
抓包前先确认抓点(客户端 / 服务端 / 网关)与时间窗口。常用命令:
1# 抓指定主机与端口,完整包,写入文件2sudo tcpdump -i eth0 host 10.0.0.5 and port 443 -s 0 -w /tmp/cap.pcap3# 环形缓冲:每个文件 100MB,保留 10 个4sudo tcpdump -i any -s 0 -C 100 -W 10 -w /tmp/cap%03d.pcap
-s 0 是关键,确保抓取完整报文以便 TLS/HTTP 重组。若只需头部,可把 snaplen 缩小以节省 IO。
二、实用过滤表达式与快速查看
显示层过滤常用:
tcp、
udp、
icmp:按协议筛选。tcp[tcpflags] & (tcp-syn) != 0:只看 SYN 包(握手)。host a.b.c.d and port 80:按主机端口过滤。
tcp.analysis.retransmission、
tcp.analysis.duplicate_ack 快速定位问题流。三、典型问题的抓包判断逻辑
ICMP Fragmentation Needed,并检查 Path MTU。bad_certificate)或 ClientHello/ServerHello 差异,判断是否为证书/ALPN/cipher 不兼容。
四、多点抓包与对比法
最可靠的方法是“客户端、中间节点、服务端”三点同时抓包,然后对比序号与时间线:如果客户端发送但中间未见,问题在接入链路;若中间可见但服务端未见,问题在上游设备。用
tshark -r cap.pcap -Y "tcp.analysis.retransmission" 批量统计重传率,做量化判断。
五、移动真机与代理受限场景的补充手段
当目标是 iOS 真机 App,且代理(Charles / mitmproxy)因 Pinning / mTLS 无法解密时,仍需底层证据。此时可以:
六、实战排查流程(模板化)
-s 0、限流过滤),同时在另一端抓取对比包。ping -M do -s 测试。
七、合规与工程化建议
抓包会暴露敏感数据(token、个人信息),生产抓包前务必审批并做脱敏。把标准抓包脚本、过滤器与分析模板纳入团队知识库,定期用自动化脚本统计重传率、握手失败率并上报告警,形成闭环运维能力。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047459/viewspace-3097172/ ,如需转载,请注明出处,否则将追究法律责任。