DNS:域名怎么变成地址,解析在哪些环节会坏
每一次连接的第一步都是把域名换成 IP 地址。这一步出问题时,后面的一切(TCP、TLS、应用协议)都无从谈起——所以 DNS 故障的典型面貌是"彻底连不上"而不是"连得慢"。
一次查询的完整路径
你的程序调用系统解析接口(getaddrinfo)→ 系统先查 hosts 文件和本地缓存 → 没有命中则把查询发给配置的 DNS 服务器(通常由路由器 DHCP 下发)→ 该服务器自己递归查询或转发上游 → 结果原路返回并被逐级缓存。
排查的意义上,这条路径有四个可干预/可损坏的点:
- hosts 文件:手工条目优先级最高,过期条目会持续劫持解析(ENOTFOUND 的常见暗因);
- 本地缓存:包括"否定缓存"——一次失败的结果也会被缓存一段时间;
- DNS 服务器本身:不可达、故障或被劫持;
- 传输路径:查询包被丢弃(表现为超时)或被篡改(表现为解析到错误地址)。
A、AAAA 与双栈
A 记录给 IPv4 地址,AAAA 记录给 IPv6 地址。双栈环境下系统通常两种都查、优先尝试 IPv6——这带来一类新故障:AAAA 解析成功但 IPv6 不可达。ConnProof 的 DNS 检测同时执行 A、AAAA 与系统级 lookup 三种查询,三者的一致性本身就是诊断证据:权威失败而 lookup 成功指向 hosts/缓存干预,只有 AAAA 有结果提示 IPv6-only 风险。
代理环境下的两条解析路径
使用代理时,DNS 有两种走法,混淆它们是排查中最常见的思维陷阱:
- 本地解析:设备自己解析出 IP,再决定连接怎么走。本地网络的污染会影响它,即使代理完全正常;
- 远程解析:域名交给代理节点,由节点在它那侧解析。本地污染失效,但节点侧的 DNS 故障会以"已连接却无法上网"的形态出现。
排查时先固定路径:客户端关闭状态下 connproof dns 测的是纯本地路径;开启后浏览器行为与本地检测矛盾,则差异在远程解析或分流规则。
与错误码的对应
一分钟自查
connproof dns 目标域名三种查询并列返回,任何不一致都值得追问一句"为什么"。