3. 数据包列表:列定制、时间格式与着色规则
数据包列表,说白了就是 Wireshark 的「主战场」。你抓到的所有流量,都会在这里一行一行地展示出来。我见过不少新手,打开 Wireshark 看到满屏的十六进制就慌了——其实真正干活的地方,就是中间那个列表区域。
今天咱们就把它玩透。列定制、时间格式、着色规则,这三样搞定了,你的排查效率至少翻一倍。
3.1 列定制:别让默认布局拖慢你
Wireshark 默认给你展示了 No.、Time、Source、Destination、Protocol、Length、Info 这几列。够用吗?说实话,大部分场景下够用。但你要是做性能分析,或者排查特定协议问题,默认列就有点「不够看」了。
举个例子。我之前排查一个 TCP 重传问题,默认列表里看不到 TCP 序列号,我得点开每个包看详情。几十个重传包,一个个点?那不得点到手抽筋。后来我直接把 TCP Seq 和 Ack 加到列表里,一眼扫过去就知道问题在哪。
3.1.1 添加/删除列
操作很简单:
- 右键点击任意列标题 → Column Preferences
- 在弹出的窗口里,点左下角的 + 添加新列
- 在 Field type 下拉框里选择你要显示的字段
- 拖拽列名可以调整顺序
常用的自定义列我列在下面:
| 字段类型 | 显示内容 | 适用场景 |
|---|---|---|
tcp.seq |
TCP 序列号 | 排查重传、乱序 |
tcp.ack |
TCP 确认号 | 分析确认延迟 |
tcp.window_size_value |
接收窗口大小 | 性能瓶颈分析 |
ip.ttl |
TTL 值 | 判断跳数、路由环路 |
http.response.code |
HTTP 状态码 | Web 调试 |
dns.qry.name |
DNS 查询域名 | DNS 故障排查 |
tcp.window_size_value 和 tcp.seq 固定放在 Info 列前面。这样看 TCP 流的时候,窗口变化和序列号一目了然。
3.1.2 列宽与对齐
列宽可以手动拖拽调整。我个人建议:
- Source/Destination:宽度拉到能完整显示 IP 即可,别太宽
- Protocol:窄一点,4-6 个字符宽度就够了
- Info:尽量宽,这里信息最丰富
还有一个很多人不知道的小技巧:双击列标题之间的分隔线,Wireshark 会自动调整该列到最佳宽度。嗯,这个我经常用。
3.2 时间格式:别让时间戳骗了你
时间格式这个问题,我踩过坑。有一次排查一个跨时区的延迟问题,客户说「延迟 8 小时」,我一看 Wireshark 里的时间,确实差了 8 小时。后来才发现——Wireshark 默认用的是 UTC 时间,而客户看的是本地时间。
所以,时间格式一定要搞清楚。
3.2.1 四种时间格式
在 View → Time Display Format 里,你可以选:
| 格式 | 说明 | 推荐场景 |
|---|---|---|
| Date and Time of Day | 绝对时间,如 2025-01-15 14:23:45 | 跨天分析、日志比对 |
| Seconds Since Beginning of Capture | 相对时间,从抓包开始计时 | 分析延迟、RTT |
| Seconds Since Previous Captured Packet | 与前一个包的间隔 | 观察包间延迟抖动 |
| Seconds Since Previous Displayed Packet | 与上一个显示包的间隔 | 过滤后分析 |
3.2.2 精度设置
默认时间精度是秒级。但做性能分析时,秒级精度根本不够用。我建议:
- 普通排查:毫秒级(3 位小数)
- 性能调优:微秒级(6 位小数)
- 驱动/硬件问题:纳秒级(9 位小数)
设置路径:View → Time Display Format → Display Seconds with...
3.3 着色规则:让问题自己「跳」出来
这个功能是我最喜欢的。Wireshark 默认有一套着色规则,比如 TCP 重传是红色背景、TCP 窗口更新是绿色。但默认规则不一定适合你的场景。
我举个例子。有一次排查 DNS 解析慢的问题,默认着色规则里 DNS 包是浅蓝色,和普通 UDP 包混在一起,根本看不出来。后来我自定义了一条规则:所有 DNS 响应时间超过 100ms 的包,背景染成亮橙色。这样一来,慢的 DNS 包一眼就能看到。
3.3.1 默认着色规则速览
| 颜色 | 含义 | 典型协议/事件 |
|---|---|---|
| 浅紫色 | TCP 流量 | 普通 TCP 数据包 |
| 浅蓝色 | UDP 流量 | DNS、DHCP、NTP |
| 红色 | TCP 问题 | 重传、重复 ACK、零窗口 |
| 绿色 | TCP 状态变化 | SYN、FIN、RST |
| 黄色 | 路由/控制 | ICMP、ARP |
3.3.2 自定义着色规则
路径:View → Coloring Rules
创建规则时,你需要指定:
- 名称:比如「慢 DNS 响应」
- 过滤表达式:比如
dns.time > 0.1 - 前景色:文字颜色
- 背景色:行背景颜色
我常用的几条自定义规则:
| 规则名称 | 过滤表达式 | 背景色 | 用途 |
|---|---|---|---|
| 慢 DNS | dns.time > 0.1 |
亮橙色 | 标记慢查询 |
| 大包 | frame.len > 1400 |
浅灰色 | 标记大包传输 |
| HTTP 错误 | http.response.code >= 400 |
浅红色 | 标记服务端错误 |
| TCP 零窗口 | tcp.window_size == 0 |
深红色 | 标记接收端瓶颈 |
3.4 本章知识体系
下面这张图把数据包列表的三个核心维度串起来了:
3.5 实战技巧:三招组合拳
光知道怎么设置还不够,得会用。我分享三个实战场景:
场景一:快速定位 TCP 重传
- 添加
tcp.seq和tcp.ack列 - 时间格式设为「Seconds Since Beginning of Capture」,精度微秒
- 着色规则里,确保 TCP 重传是红色背景
这样你一眼就能看到:红色背景的包,序列号重复,时间间隔异常——重传无疑。
场景二:分析 DNS 解析慢
- 添加
dns.time列 - 时间格式设为「Seconds Since Previous Displayed Packet」
- 自定义着色规则:
dns.time > 0.1染成橙色
我曾经用这个方法,发现某个 DNS 服务器对特定域名的解析时间高达 2 秒。后来查出来是上游递归服务器配置了错误的转发器。
场景三:排查 HTTP 接口慢
- 添加
http.response.code和http.time列 - 时间格式用绝对时间,方便和日志比对
- 着色规则:
http.response.code >= 400红色,http.time > 1黄色
好了,数据包列表的三大核心能力就这些。列定制让你只看关键信息,时间格式让你精准定位时序,着色规则让问题自己「跳」出来。这三样东西,你花 10 分钟配置好,以后每次排查都能省下半小时。