跳到主要内容

网络抓包

网络抓包是排查连接失败、延迟异常、协议错误等问题的首选手段。命令行使用 tcpdump,图形界面使用 Wireshark,两者底层都依赖 libpcap。

tcpdump 基础

sudo tcpdump -i eth0 # 监听指定网卡
sudo tcpdump -i any -nn # 所有接口,不解析名字
sudo tcpdump -i eth0 -w capture.pcap # 写入文件,供 Wireshark 打开
sudo tcpdump -i eth0 -X port 80 # 十六进制打印载荷
sudo tcpdump -i eth0 -c 100 # 抓 100 个包后退出

nn 禁止把 IP 和端口解析成主机名与服务名,抓包时建议始终带上,避免 DNS 反查干扰。

过滤表达式

tcpdump 使用 BPF 语法过滤:

表达式含义
host 1.2.3.4指定主机
net 10.0.0.0/8指定网段
port 443指定端口
tcp / udp / icmp协议
src 10.0.0.1源地址
dst port 22目的端口
and / or / not逻辑组合

示例:tcpdump -i eth0 tcp and port 443 and host 10.0.0.5

Wireshark 基础

打开 pcap 文件后常用功能:

  • 显示过滤器:在工具栏输入,例如 tcp.port == 443 && ip.addr == 10.0.0.5
  • Follow TCP Stream:右键某包 → Follow,重组完整 TCP 流。
  • Statistics → Conversations:按会话统计流量。
  • Statistics → I/O Graphs:绘制时序图,观察吞吐变化。

常见排查场景

  • 三次握手失败:观察 SYN 是否到达对端、SYN-ACK 是否回包,常见原因是防火墙丢包或 MTU 问题。
  • 重传与乱序:tcp.analysis.retransmission 过滤器快速定位,Wireshark 会在 SEQ/ACK analysis 中标记。
  • 丢包:Dup ACK 数量激增通常意味着接收方出现丢包;Zero Window 表示对端接收缓冲区耗尽。
  • DNS 解析慢:仅看到 DNS 请求但迟迟没有响应,通常是 DNS 服务器或网络问题。