核心 · Key Idea
一句话:Wireshark 抓下网卡上的每一个数据包,按协议分层展开给你看 —— Frame / IP / TCP / TLS / HTTP 一目了然。所有学过的协议都能在它里面亲眼看到,调试网络问题最强武器。
是什么#
启动后选网卡 → 立刻看到包流过 → 输入过滤表达式定位:
ip.addr == 10.0.0.5
tcp.port == 443
http.request
tls.handshake.type == 1 # ClientHello
tcp.flags.reset == 1 # 找 RST
任何一个包点开都能逐层展开:Ethernet → IP → TCP → 应用层。
打个比方#
打个比方 · Analogy
Wireshark 像网络的高速摄像机:能把肉眼看不见的「这一秒里到底发生了什么」放慢、放大、逐帧回放。
关键概念#
Capture Filter抓取过滤
BPF 语法,决定**抓什么**(如 `tcp port 443`)。捕获时生效,量大时必用。
Display Filter显示过滤
Wireshark 自家语法(如 `tcp.port == 443`),抓完之后筛。
Follow Stream流追踪
右键 → Follow → TCP/HTTP/TLS Stream,把整段对话拼好。
I/O GraphI/O 图
看 RTT / 重传率 / 吞吐随时间变化。
TLS 解密Decryption
导入 SSLKEYLOGFILE 后能解明文(仅本机生成的 TLS 流量)。
tshark命令行版
无 GUI 抓包,CI / 远程服务器上常用。
怎么工作#
驱动层把每个包复制一份给抓包进程,不影响正常通信。
实操要点#
- 服务器无 GUI:用
tcpdump -i any -w out.pcap抓,下载到本机用 Wireshark 打开。 - 常用 capture filter:
host 1.2.3.4 and port 443、tcp[tcpflags] & (tcp-syn|tcp-rst) != 0。 - 解密 HTTPS:Chrome 启动时设环境变量
SSLKEYLOGFILE=/tmp/keys.log,Wireshark 在 Preferences → TLS 里指过去。 - HTTP 抓不到内容:先确认是不是 HTTPS(443 + TLS);HTTP/2 / HTTP/3 / gRPC 都需要在 Preferences 里开对应解析。
- 分析慢请求:
Statistics → Conversations → TCP看每条流的 RTT、字节数;Expert Info直接列出重传 / 失序。 - 抓包是有创成本的高负载:生产环境用
-W限文件 /-G限时长,不要无脑抓到磁盘满。
易混点#
Wireshark
**真实网络层**抓到的字节。
能看 TLS 握手 / 重传 / 丢包。
能看 TLS 握手 / 重传 / 丢包。
curl -v
应用层视角。
看 header 和响应体,看不到 TCP 细节。
看 header 和响应体,看不到 TCP 细节。