Skip to content

模块导航: 总入口 · 总纲与方法 · 后端场景 · AI与算法工程 · 国企与金融 · 网络问答


8. DNS 解析过程与缓存(热度 318 · 高频选考) ​

Q: 域名是怎么解析成 IP 的?递归查询和迭代查询有什么区别?

A:

查询链(完整) ​

diagram
浏览器缓存 → OS 缓存 / hosts → 本地域名服务器 LDNS
    → (迭代)根服务器 → 顶级域服务器(TLD, 如 .com)
        → 权威域名服务器 → 返回 IP/A/AAAA/CNAME
  1. 浏览器缓存: Chrome 等有内置 DNS 缓存。
  2. 操作系统缓存 / hosts: nscd、systemd-resolved、Windows DNS Client;hosts 静态优先。
  3. 本地域名服务器(LDNS): 常是运营商或企业 DNS;对主机通常是递归服务器。
  4. 根域名服务器: 返回 TLD 服务器地址(不直接给 IP)。
  5. 顶级域服务器: 如 .com 返回该域名权威 NS 地址。
  6. 权威域名服务器: 返回最终记录(A/AAAA/CNAME 等)。
  7. 逐级缓存: 每一跳按 TTL 缓存(浏览器→系统→LDNS→…)。

递归 vs 迭代 ​

递归查询迭代查询
含义「你帮我查到底,给我最终结果」「你告诉我下一步该问谁」
常见位置主机 → LDNSLDNS → 根/TLD/权威
负担查询代理承担完整查询每级只回答线索,LDNS 自己继续问
为什么不全程递归根/TLD 若替全世界递归将无法扩展用迭代分散负担

记录类型 ​

类型作用
A域名 → IPv4
AAAA域名 → IPv6
CNAME别名 → 另一个域名(CDN 常用)
MX邮件交换服务器
NS域名服务器
TXT文本(SPF、验证等)
PTRIP → 域名(反向解析)

设计动机 ​

  • 为什么分布式数据库: 单点无法承受全球查询;分层+缓存把负载摊到边缘。
  • 为什么 TTL: 缓存权衡:太久更新不及时,太短增加权威负载与延迟。
  • 为什么 UDP 53: 查询报文小、一问一答、要低延迟;超时由应用重传兜底。
  • 何时 TCP: 区域传送(AXFR/IXFR)、响应超过 512 字节(RFC 1035 规定的传统软上限;RFC 1035 §4.2.1 同时要求不设 EDNS0 时 UDP 数据报至少应支持到 576 字节)→ 截断并置 TC=1,客户端改用 TCP 53 重查;EDNS0(RFC 6891)就是用来抬高这个上限的、DNSSEC 较大记录。

加分点 ​

  • DNS 预解析 / HTTPDNS: 移动端弱网下传统 DNS 劫持/调度不准,可用 HTTPDNS 或 DoH/DoT。
  • CNAME 与 CDN: 站点域名 CNAME 到 CDN 调度域名,由 CDN 权威返回边缘节点 IP。
  • 根服务器: 逻辑 13 组标识(A–M),实际由全球上千个 anycast 实例承载(数量随年份增长,公开统计已逾 1500,答题按「十几台逻辑机构、上千物理实例」表述)。
  • 与 URL 过程联动: DNS 解析失败 vs 连接超时 vs TLS 失败,排查命令不同。

常见追问 ​

追问 1:递归查询和迭代查询的区别是什么?主机到 LDNS 是哪种?

  • 答题要点: 递归=受托方必须查到最终结果;迭代=返回「下一步问谁」。主机→LDNS 通常是递归;LDNS→根/TLD/权威通常是迭代。

追问 2:DNS 用 UDP 还是 TCP?为什么?

  • 答题要点: 默认 UDP 53(小查询、低延迟);区域传送或大响应用 TCP 53。防火墙需两者都考虑。

追问 3:DNS 缓存命中还会有网络 RTT 吗?各级 TTL 如何影响更新?

  • 答题要点: 浏览器/系统/LDNS 命中则不走权威,延迟极低。TTL 到期后向上重新查询;运维改记录后需等各层缓存过期,或调低 TTL 预热变更。可 dig +trace 观察链。

易错点 ​

易错说法纠正
「根服务器直接返回 IP」根返回 TLD 服务器地址;权威才给记录
「递归都在全链路」主机→LDNS 递归,其后多为迭代
「DNS 只有 UDP」大响应/区域传送用 TCP
「hosts 优先级最低」本机 hosts 通常优先于向 LDNS 发起的查询(视 OS)
「CNAME 返回 IP」CNAME 返回另一个域名,还要继续解析

与选择题对照 ​

  • 主库 150: 第 79 题(DNS 主要功能)、第 80 题(DNS 错误叙述)、第 81 题(域名层次最高)、第 82 题(迭代查询中 LDNS 行为)、第 83 题(A 记录)、第 94 题(URL 最先 DNS)、第 65 题(DNS 用 UDP)。
  • 补题 16: 无直接 DNS 题;应用层对照见补-14(邮件协议,非 DNS)。
  • 口述联动: 选择题考功能/层次/迭代;面试要完整讲查询链 + UDP/TCP + 缓存/TTL + 排障。

工程 / 抓包背景 ​

  • 命令: dig +trace example.com、dig example.com A、nslookup、host、cat /etc/resolv.conf、ipconfig /displaydns(Windows)、resolvectl statistics(旧命令名 systemd-resolve,systemd 239 起更名)。
  • Wireshark: 过滤 dns;看 Query/Response、TTL、CNAME 链。
  • curl: curl --resolve example.com:443:1.2.3.4 https://example.com 绕过 DNS 测源站;curl -v 可显示解析到的 IP。
  • Nginx: resolver 8.8.8.8 valid=30s; 动态解析 upstream 域名;proxy_pass 变量时需要 resolver。

持续学习,持续积累。