短记录能解析,大响应却超时:DNS 截断与 TCP 回退
部分域名能解析,另一些却超时,可能不是换一个 DNS 地址就能解决的问题。如果较大的回复被截断,客户端需要改用 TCP 取得完整结果;这一步受阻,就可能出现“小响应正常、大响应失败”。先对同一解析器、域名和记录类型比较 UDP、TCP 及自动回退,再判断应该检查哪一段。
截断和超时不是同一种结果
DNS 回复中的 TC 标志表示消息被截断。传统 UDP 响应存在长度限制,收到 TC 后改用 TCP 获取完整消息,是正常的协议处理。TCP 不只用于区域传送,通用 DNS 实现也需要支持它。来源:RFC 7766
EDNS 可以声明愿意接收的 UDP 消息大小,但这个数字不等于路径实际能承受的大小。较大 UDP 报文仍可能遇到分片或中间设备处理问题。这里讨论的是回复内容的大小,不是域名字符数;域名很短,也可能对应较大的记录集合。来源:RFC 6891 第 6.2.3 节
因此,“收到截断回复”“完全没有收到回复”和“收到 SERVFAIL”要分开记录。后者的检查方法见DNS 返回码与校验失败排查。
第一步:固定实际解析路径
记录设备、接入方式、代理模式、解析器地址及端口。应用可能使用浏览器安全 DNS,代理客户端也可能接管查询;向指定地址测试,不等于已经证明故障应用使用同一路径。
如果连接的是本机 DNS 转发器,先测本机入口,再由管理者核对它到上游的连接。一次客户端查询无法覆盖递归解析器到权威服务器的全部过程。相关路径概念可参考DNS 与 Fake-IP 的排查方法。
不要一边换节点、一边换解析器再比较结果。这样即使恢复,也不知道哪个变化起了作用。
第二步:分别观察 UDP 和 TCP
下面适用于已经具备 dig 的终端环境。DNS服务器IP 和 故障域名都是占位内容,替换后再执行;A 也要改成实际失败的记录类型,例如 TXT。实际请求使用的 EDNS、DNSSEC 相关选项也应记录并保持一致,不能仅因域名相同就认定已经复现。内网名称应使用相应内部解析器,不要发往无关的公共服务。
保留截断现象
dig @DNS服务器IP 故障域名 A +notcp +ignore +bufsize=512 +time=2 +tries=1
+notcp 先使用 UDP,+ignore 阻止因截断自动重试 TCP,便于观察原始结果。+bufsize=512 是本次对照声明的 UDP 大小,不是建议永久套用的最佳值;其余选项限制等待和尝试次数。保留完整输出,不要只截取最后的地址。
如果输出的 flags 包含 tc,说明这次确实观察到截断;若直接超时,没有收到 TC,就不能写成“已经证实回退失败”。小响应可能根本不会触发截断。
单独查询 TCP
dig @DNS服务器IP 故障域名 A +tcp +time=2 +tries=1
保持目标、名称和类型不变,仅比较传输方式。参数含义以及默认遇到截断会重试 TCP 的行为,见 BIND dig 官方手册。本机版本或自定义选项不同时,应先检查帮助与配置。
| 对照结果 | 优先继续检查什么 |
|---|---|
| UDP 有 TC,TCP 有完整回复 | 再检查自动回退及故障应用路径 |
| UDP 有 TC,TCP 超时 | TCP 53 端口过滤、转发环节或服务端监听 |
| UDP 无回复,TCP 正常 | UDP 路径、报文大小或服务端处理,暂不能认定截断 |
| 两种方式都超时 | 地址、路由、服务状态及端口,不能只归因于回退 |
表格是下一步方向,不是责任判定。例如 TCP 超时既可能发生在路径中,也可能来自目标服务本身,不能单凭这一条结果认定运营商或节点故障。
第三步:让工具执行正常回退
dig @DNS服务器IP 故障域名 A +notcp +noignore +bufsize=512 +time=2 +tries=1
这次允许收到截断回复后重试。观察输出中是否出现重试提示、最终状态,以及是否得到完整回答。若“单独 TCP 正常、自动回退失败”,保留两份输出,继续检查工具设置与转发器日志,避免直接修改全局配置。
改变声明大小时,每次只改一个值。结果变好只能说明这个变量值得调查,不能据此算出精确 MTU。涉及隧道包大小时,可结合路径 MTU 的探测与边界进一步核对。
代理与 VPN 环境还有哪些边界?
如果本机查询成功而浏览器仍失败,先确认浏览器是否走另一套解析方式;如果本机转发器失败,但直接指定其上游成功,应检查转发链,而不是把两次结果混成同一个测试。
换设备或换到子系统执行命令,也可能改变路由与代理接入。无法确认路径一致时,应把结论限定为“这个测试环境可用”。清缓存、调整验证开关或更换协议,都不应该代替对 UDP 与 TCP 两条路径的检查。
需要调整防火墙或转发器时,由管理者检查所需方向的规则和 DNS 服务监听,不建议为测试直接关闭整套防护。修改前保留配置,每次只改一项,再用同样的查询复查。
反馈时附上这张记录表
| 项目 | 待填写内容 |
|---|---|
| 环境 | 日期、时段、接入方式、代理模式 |
| 查询目标 | 解析器地址与端口、域名、记录类型、查询选项 |
| UDP 结果 | 返回码、是否含 TC、消息大小或超时 |
| TCP 结果 | 是否连接、返回码、是否获得完整回答 |
| 自动回退 | 重试提示、最终结果与耗时 |
| 路径依据 | 本机转发器、上游日志或尚未确认的环节 |
这是可填写的诊断记录,不是本站实测数据。分享输出前遮住内部名称和敏感地址;能复现问题的最少几次查询,通常比连续大量探测更便于分析。
资料核对日期:2026-10-15。
评论