tcpdump 抓包入门:看一次完整握手
发布时间:2026-09-21 16:52       
更新时间:2026-09-22 03:53
网络问题吵不出结果的时候,抓包是最硬的证据。tcpdump 是 Linux 上最常用的命令行抓包工具,直接记录网卡上的原始数据包,在传输层看问题,比应用日志更靠近底层。
准备:yum install -y tcpdump 或 apt install -y tcpdump;用 ip addr 确认网卡名,云主机一般是 eth0。
一、抓一次握手
执行 tcpdump -i eth0 -nn host 203.0.113.10 and tcp port 443,另开终端对该地址发起一次访问。输出里依次出现 Flags [S]、[S.]、[.],就是 SYN、SYN/ACK、ACK 三次握手,说明链路双向都通。只看到 [S] 反复重发没有回应,多半是对端端口不通或防火墙拦截;时间戳列还能看出重试间隔是不是指数退避。握手完成只说明链路通,业务层的问题还要看后续数据包。包量大时先用 -c 参数限制条数,看个开头再决定要不要细抓。-nn 表示不做名称解析,输出更干净也更快。
二、存成文件交给 Wireshark
命令行看大流量不方便,保存再分析:tcpdump -i eth0 -w /tmp/cap.pcap host 203.0.113.10 and tcp port 443,抓几十秒按 Ctrl+C 停止。pcap 文件用时间命名,事后对时间线方便。把文件下载到本地,用 Wireshark(图形化协议分析工具)打开,过滤栏输入 tcp.analysis.flags 能直接标出重传和异常包;过滤出单条流来读,一来一回的对话清楚可见,比肉眼翻文本高效得多。重传密集、零窗口、RST 接连出现,都是值得记下的异常形态。
三、抓包的礼仪
过滤条件要写精确,避免裸跑 tcpdump -i any;生产高峰期尽量不抓,抓之前限制文件大小,比如加 -C 20 让每 20MB 分一个文件;抓完立即退出,别让工具整夜挂着。抓包会看到线路上的明文内容,遵守最小必要原则,敏感数据文件用完即删,不要长期留在服务器上。
两个常见报错:提示权限不足,命令前加 sudo;抓不到包,多半是网卡选错,换正确的接口再试。抓不到期待的数据,先检查过滤表达式里的端口和协议有没有写对。
握手通不通,抓包见分晓。留一份 pcap 文件,和对方沟通时也省去口水,把抓包当成排障的常规手段,网络争议会少很多。