知识与指南

短记录能解析,大响应却超时: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。

评论

搜索文章

正在加载搜索…