3. 数据包列表:列定制、时间格式与着色规则

数据包列表,说白了就是 Wireshark 的「主战场」。你抓到的所有流量,都会在这里一行一行地展示出来。我见过不少新手,打开 Wireshark 看到满屏的十六进制就慌了——其实真正干活的地方,就是中间那个列表区域。

今天咱们就把它玩透。列定制、时间格式、着色规则,这三样搞定了,你的排查效率至少翻一倍。

3.1 列定制:别让默认布局拖慢你

Wireshark 默认给你展示了 No.、Time、Source、Destination、Protocol、Length、Info 这几列。够用吗?说实话,大部分场景下够用。但你要是做性能分析,或者排查特定协议问题,默认列就有点「不够看」了。

举个例子。我之前排查一个 TCP 重传问题,默认列表里看不到 TCP 序列号,我得点开每个包看详情。几十个重传包,一个个点?那不得点到手抽筋。后来我直接把 TCP Seq 和 Ack 加到列表里,一眼扫过去就知道问题在哪。

3.1.1 添加/删除列

操作很简单:

  1. 右键点击任意列标题 → Column Preferences
  2. 在弹出的窗口里,点左下角的 + 添加新列
  3. 在 Field type 下拉框里选择你要显示的字段
  4. 拖拽列名可以调整顺序

常用的自定义列我列在下面:

字段类型 显示内容 适用场景
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 与上一个显示包的间隔 过滤后分析
注意:如果你用「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 本章知识体系

下面这张图把数据包列表的三个核心维度串起来了:

数据包列表核心知识体系 数据包列表三大核心能力 数据包列表 列定制 时间格式 着色规则 添加/删除列 列宽调整 绝对/相对时间 精度设置 默认规则 自定义规则 核心目标:让异常「跳」出来,提升排查效率 列定制 → 只看关键字段 | 时间格式 → 精准定位时序 | 着色规则 → 一眼识别问题 应用场景:TCP 重传分析 · DNS 慢查询 · HTTP 错误排查 · 窗口瓶颈定位 三者配合使用,效果远大于单独使用

3.5 实战技巧:三招组合拳

光知道怎么设置还不够,得会用。我分享三个实战场景:

场景一:快速定位 TCP 重传

  1. 添加 tcp.seq 和 tcp.ack 列
  2. 时间格式设为「Seconds Since Beginning of Capture」,精度微秒
  3. 着色规则里,确保 TCP 重传是红色背景

这样你一眼就能看到:红色背景的包,序列号重复,时间间隔异常——重传无疑。

场景二:分析 DNS 解析慢

  1. 添加 dns.time 列
  2. 时间格式设为「Seconds Since Previous Displayed Packet」
  3. 自定义着色规则:dns.time > 0.1 染成橙色

我曾经用这个方法,发现某个 DNS 服务器对特定域名的解析时间高达 2 秒。后来查出来是上游递归服务器配置了错误的转发器。

场景三:排查 HTTP 接口慢

  1. 添加 http.response.code 和 http.time 列
  2. 时间格式用绝对时间,方便和日志比对
  3. 着色规则:http.response.code >= 400 红色,http.time > 1 黄色
避坑指南:我曾经把着色规则设得太花哨,结果满屏五颜六色,反而看不清重点。我的建议是:自定义规则不超过 5 条,颜色选饱和度低的,别让视觉过载。

好了,数据包列表的三大核心能力就这些。列定制让你只看关键信息,时间格式让你精准定位时序,着色规则让问题自己「跳」出来。这三样东西,你花 10 分钟配置好,以后每次排查都能省下半小时。