网络抓包
网络抓包是排查连接失败、延迟异常、协议错误等问题的首选手段。命令行使用 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 服务器或网络问题。