为什么是 Wireshark
网络出问题的时候,“感觉很慢"“连不上"这类描述基本没法排查,真正有用的是抓包看数据到底发生了什么。Wireshark 是这个领域的事实标准——开源、免费、跨平台,协议库覆盖了几乎所有你能遇到的协议,从最基础的 TCP/IP 到 HTTP/2、TLS、DNS,甚至各种私有协议都能解析。
它不只是排障工具。想理解 TCP 三次握手到底长什么样、TLS 握手交换了什么、DNS 查询的完整过程,打开 Wireshark 抓一次包,比看十篇文章都直观。
安装
Windows、macOS、Linux 都有官方安装包,官网下载即可。
Linux 下有个细节:普通用户默认没有抓包权限,需要把自己加入 wireshark 用户组:
sudo usermod -aG wireshark $USER
加完组之后要重新登录才生效,不然会发现列表里的网卡全是灰的,点不动。
界面速览:从打开到抓到第一个包
打开 Wireshark,首页是网络接口列表——有线网卡、WiFi、还有一些虚拟网卡(VPN、虚拟机网卡等)。每个接口旁边有个实时流量的小波形图,大致能看出哪个接口当前有流量。
双击想抓的接口,立刻开始实时捕获,界面会不断刷新滚动。这时候数据包已经在飞了,接下来的重点是怎么从里面找到你要的东西。
主界面分三块:
- 上方包列表:每一行是一个数据包,显示时间、源地址、目的地址、协议、长度和简要信息
- 中间包详情:点击某一行,下方展开这个包的分层结构——以太网帧 → IP 层 → TCP/UDP 层 → 应用层协议,逐层可以点开看具体字段
- 下方十六进制视图:包的原始字节内容,对应详情面板里选中的字段会高亮
刚开始不用管十六进制视图,重点在过滤器和包详情。
过滤器:真正的核心功能
不用过滤器直接看几万个包是没法工作的。顶部的过滤器输入框(display filter)是 Wireshark 最重要的功能,输入表达式后按回车即可筛选。
常用过滤器示例:
ip.addr == 192.168.1.1 # 只看某个 IP 相关的包(双向)
ip.src == 192.168.1.1 # 只看从这个 IP 发出的包
tcp.port == 443 # 只看某端口(不区分源/目的)
http # 只看 HTTP 流量
dns # 只看 DNS 请求和响应
tcp.flags.syn == 1 # 只看 TCP 握手中的 SYN 包
http.response.code == 404 # 只看 404 响应
tls.handshake.type == 1 # 只看 TLS Client Hello
过滤器支持逻辑组合:
ip.addr == 192.168.1.1 && tcp.port == 443
http || dns
输入过滤条件时框内会有颜色提示——绿色是语法正确,红色是错误,这个反馈很及时,写复杂表达式时不用等按回车才知道对不对。
Follow Stream:还原一次完整会话
排障时经常需要的不是单个包,而是"这次 HTTP 请求到底发生了什么”。右键任意一个包,选择 Follow → TCP Stream(或 HTTP Stream),Wireshark 会把这次会话的所有往来数据拼在一起,按时间顺序展示,客户端发的和服务端回的用不同颜色区分。
这个功能对调试接口问题特别有用——比如怀疑某个请求头没发对,或者想确认服务端返回的响应体内容,Follow Stream 比逐个包翻快得多。
统计功能:宏观视角
单个包看多了容易只见树木不见森林,Statistics 菜单提供了几个有用的宏观视图:
- Protocol Hierarchy:这次抓包里各协议分别占多少流量,一眼看出主要流量类型
- Conversations:按 IP 对或端口对聚合,看谁跟谁通信最多
- I/O Graph:流量随时间变化的图表,判断是持续高流量还是某个时间点突发
实战案例:排查一次"网站打不开”
假设遇到某个网站间歇性打不开,用 Wireshark 排查的大致思路:
- 先抓包再复现问题:打开抓包,然后立刻访问那个网站,让 Wireshark 记录完整过程
- 过滤 DNS:输入
dns,确认域名解析是否正常返回、有没有超时重试 - 过滤目标 IP:解析出 IP 后,用
ip.addr == 目标IP单独看这次连接 - 看 TCP 握手:搜索
tcp.flags.syn == 1,确认 SYN 包发出后有没有收到 SYN-ACK。如果只有 SYN 没有回应,说明是网络层或防火墙问题,跟应用层无关 - 看有没有重传:过滤
tcp.analysis.retransmission,如果这里有大量结果,说明链路存在丢包,是"慢"和"偶尔连不上"的常见原因 - 看 TLS 握手(如果是 HTTPS):过滤
tls.handshake,确认握手是否顺利完成,有没有在某个阶段卡住或被重置
按这个顺序走一遍,通常能把问题定位到具体哪一层——是 DNS、是网络连通性、是丢包,还是应用层本身的问题。
小结
Wireshark 的学习曲线主要在过滤器语法和协议知识上,但入门门槛不高:先学会几个常用过滤器、学会 Follow Stream,遇到具体问题就够用了。协议细节可以在实际抓包中慢慢积累,不需要一开始就系统学完 TCP/IP。
它也是免费学协议最直观的方式——与其看文字描述三次握手,不如自己抓一次包,亲眼看着 SYN、SYN-ACK、ACK 三个包依次出现。