DNS 默认查询超时,强制 TCP 却成功?正确使用 -TcpOnly
同一个域名,普通查询报超时,加入 -TcpOnly 后得到结果,这提供了一个可追查的差异。但默认查询并不保证“只用了 UDP”,所以不能只看两条命令就宣布 UDP 被封。
本文用于 Windows PowerShell 的 DNS 对照,查询你有权限使用的 DNS 服务,不扫描陌生服务器,也不改写系统 DNS 设置。

示意图:默认查询与强制 TCP 查询是两种条件,默认模式不等于已证明只用 UDP。
TCP 是 DNS 的正规传输方式
RFC 7766要求通用 DNS 实现支持 UDP 与 TCP,并把 TCP 作为有效的传输选择,而不是仅供特殊故障使用。部分响应大小、网络路径和设备行为会影响传输结果,实际原因仍需要证据。
微软命令文档说明,-TcpOnly 让本次查询只使用 TCP;-DnsOnly 限定 DNS 协议;-Server 指定要查询的服务器。它们并不会启用 DoH、DoT 或加密 DNS。
固定三个条件再比较
先选择同一域名、同一记录类型、同一个 DNS 服务器。当前默认接口服务器和公网解析服务不是同一个对照条件;不要一边增加 TCP 参数,一边更换服务器。
下面用公开域名演示结构,由你输入当前使用且允许查询的 DNS 服务器地址:
$dnsServer = Read-Host '输入本次要核对的 DNS 服务器地址'
Resolve-DnsName -Name example.com -Type A -Server $dnsServer -DnsOnly -NoHostsFile
Resolve-DnsName -Name example.com -Type A -Server $dnsServer -DnsOnly -NoHostsFile -TcpOnly
example.com 只是示例。排查实际问题时,用不含秘密的目标域名替换,两轮保持一致。查询成功返回哪些地址,由实际响应决定,本文不编造预期 IP。
输出差异怎样记录
| 默认查询 | TCP 查询 | 先记录的结论 |
|---|---|---|
| 成功 | 成功 | 两种命令条件下均得到结果 |
| 超时 | 成功 | 存在传输或查询条件差异,原因未确认 |
| 成功 | 超时 | TCP 查询路径或服务器条件需进一步检查 |
| 都失败 | 都失败 | 不能仅归因于 UDP;检查服务器、域名和网络 |
缓存可能减少实际网络请求;默认模式也可能重试或选择不同传输。若你没有受控日志或经过授权的抓包证据,就把第一轮写成“默认查询”,不要写成“纯 UDP 实测”。DNS 返回 NXDOMAIN 等错误响应,也应与“完全收不到响应”分别记录。
不要把解析结果扩大成连通性保证
普通 HTTP/SOCKS 代理不会自动接管这两条系统 DNS 命令;TUN 或其他系统接管是否影响它们,取决于实际配置。记录所处网络与客户端状态,避免把直连 DNS 的结果写成节点的实测结果。
得到地址后,还应验证原目标的 HTTPS 请求或应用任务。DNS 成功不代表目标端口可达、TLS 验证通过或账号有权限。做机场推荐与网络排障记录时,先保留传输差异,再用真实任务确认问题是否恢复。
来源与核验日期
官方资料核验日期:2026-10-07。本文提供自行操作与记录的方法,不代表本站对某家机场的实测结论。


评论