域名解析偶尔慢半拍:用 Wireshark 找到 DNS 慢响应并对应原始查询

2026-10-31 / 0 评论 / 2 阅读

域名解析偶尔慢半拍:用 Wireshark 找到 DNS 慢响应并对应原始查询 教程示意图

编写日期:2026-10-31。

适用场景

网页偶尔停顿几秒才开始加载,但稍后查询域名又能得到地址。你希望知道故障时是否出现了偏慢的 DNS 查询,而不是只得到“现在可以解析”的结论。本教程在 Windows 本机使用 Wireshark,捕获少量自己发出的普通 DNS 请求,找到响应耗时,并返回对应的查询帧核对。

实验目标是形成一条包含查询名称、记录类型、请求帧、响应帧和响应时间的证据。它能缩小排查范围,但不能仅凭客户端抓包认定 DNS 服务器本身有故障。

原理:观察请求与响应之间的间隔

DNS 查询与响应具有可用于关联的信息。Wireshark 在能够配对时,会在响应中提供关联请求及时间字段。官方字段参考列出了请求帧字段 dns.response_to、响应时间字段 dns.time,以及表示是否为响应的 dns.flags.response。Wireshark DNS 字段参考

客户端看到的时间间隔可能包含网络传输、解析器处理以及解析器等待上游的时间,不等于服务器 CPU 实际处理时长。丢包和重试还会让一次用户操作对应多个查询。因此分析时必须同时看名称、类型和完整时间顺序。

准备工作

安装官方 Wireshark 发行版及其所需抓包组件,使用允许抓包的账户。只捕获自己的设备和已获授权的网络。提前关闭无关网页与应用,减少抓到无关域名。

打开欢迎页面,观察接口旁的活动曲线,选择实际联网的以太网或无线接口。若 DNS 请求经本机代理、回环接口或虚拟网络转发,实际捕获位置可能不同。不要因为常用物理网卡上没有记录,就立即认定系统没有发出查询。抓包接口、启动与停止方法可参阅Wireshark 官方用户指南。

分步骤操作

第一步:开始短时捕获

双击选中的接口开始捕获。本次实验只运行几条查询,完成后立即停止,不需要长期保存整个网络活动。首次练习可以先不设置捕获过滤条件,避免因条件写错漏掉响应。

第二步:产生可辨认的查询

在命令提示符(Command Prompt)中执行:

nslookup -type=A www.iana.org.

这里查询公开域名 www.iana.org 的 IPv4 地址记录,结尾的点表示完整域名;没有指定第二个服务器参数,因此使用工具默认选择的 DNS 服务器。命令格式和记录类型选项由微软 nslookup 文档说明。

隔几秒手动重复两三次即可,不要创建高速循环。这个命令产生的是用于练习分析的查询,并不保证与浏览器采用相同的解析路径。浏览器可能使用自己的缓存或加密 DNS,因此实验结果不能直接替代对浏览器实际故障的分析。

第三步:停止后筛选响应

点击停止(Stop),在显示过滤器(Display Filter)中输入:

dns.flags.response == 1 && dns.qry.name == "www.iana.org"

这个表达式不是终端命令,应粘贴到 Wireshark 的过滤栏。查询命令末尾的根域点通常不会出现在这里显示的名称中。若没有结果,先简化条件检查是否捕获到了普通 DNS:

dns

观察实际查询名称后再恢复精确条件,不要为了配合示例而修改系统 DNS 设置。

第四步:把响应时间加入列表

选中一个响应,在分组详情(Packet Details)中展开域名系统(Domain Name System),找到时间(Time)字段。右键该字段,选择应用为列(Apply as Column),然后按新列排序。

如果详情中没有时间字段,先检查是否捕获到对应请求,以及该响应是否已经被关联。只看到响应的一半抓包,不足以计算完整间隔。不要把空白字段解释成零耗时。

需要临时找出超过二百毫秒的响应时,可以输入:

dns.flags.response == 1 && dns.qry.name == "www.iana.org" && dns.time > 0.2

这里时间单位为秒,二百毫秒只是本次练习的筛选门槛,不是通用故障标准。不同网络和首次递归解析的正常时间可能不同。

第五步:返回原始请求

打开偏慢响应的详情,找到请求所在帧(Request In),跳转到该请求。核对查询名称和类型,再查看请求至响应之间是否出现相同名称、相同类型的重复查询。不要只根据事务编号相同就把相隔很远的包强行认作同一次操作。

验证方法

至少选择一对能明确关联的请求和响应,记录二者帧号,并比较包列表中的时间差与响应时间列是否一致。再检查响应码字段:收到响应不代表查询成功,错误响应同样可能很快返回。

如果二百毫秒条件没有结果,结论应是“本次样本未发现超过该门槛的已配对响应”,不能写成“DNS 永远正常”。若发现只有请求没有响应,应先确认捕获覆盖了等待时段、接口正确且没有漏包,再把它记为本次抓包未观察到响应。

常见错误

显示过滤器只隐藏列表中的包,不会减少此前已捕获的数据;捕获过滤器则决定哪些包会被收集,两者语法不同。另一个误区是认为所有域名查询都能用普通 DNS 过滤器看到:加密 DNS 不能按这里的方法直接读取查询内容。也不要把同一名称的 A 与 AAAA 查询混在一起计算等待时间。

安全与回退

实验只观察流量,不更改服务器、网关或解析器配置。完成后停止捕获,清空显示条件即可恢复视图。保存抓包文件前检查其中是否包含无关业务数据;分享时优先整理必要的帧号和时间记录。抓包中可能包含访问习惯和域名信息,应按排障需要保留,结束后及时清理。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消