题目重点:按一次查询解释DNS分层解析,区分名称解析、网络连接和服务切换。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 题目只问什么是DNS,追问内容未公开;本文讲公共DNS基础,私有split-horizon与具体云产品配置另核。
- 示例域名example.com为教学,不假定网站实际记录或DNS供应商;协议参考RFC1034。
解题路线
- DNS是分布式分层名称数据库,常用于名字到地址解析,也有MX/TXT/NS等记录;不要只说“URL转IP”,URL还包含scheme/path而DNS主要处理名称。
- 客户端stub交给recursive resolver,resolver利用缓存或按委派找根/TLD/权威服务器。权威答案与递归服务是不同角色,浏览器/OS缓存也会影响观察到的结果。
- A与AAAA分别是IPv4/IPv6地址记录,CNAME提供别名,NS参与委派。具体记录冲突/zone apex政策需按协议与供应商合同,不能随便在所有名字都放同样CNAME。
- TTL控制缓存寿命而非全网同步开关;切IP后旧缓存可能直到其寿命结束,客户端连接也可能继续用旧地址。NXDOMAIN的负缓存和SERVFAIL故障需分清,DNS成功并不证明目标网络/HTTP正常。
- 排错按输入名字/解析器/权威答案/TTL与缓存/返回地址分层,再查路由、端口、TLS/SNI与HTTP。不要因为应用打不开就直接改DNS,也不要ping失败当DNS失败。
- RFC基础参考https://datatracker.ietf.org/doc/html/rfc1034;后续DNSSEC/加密传输是额外主题,DNSSEC验证来源/完整性不等同隐藏查询内容。
手动走一遍
假设地址记录TTL300秒,一个resolver在t=0缓存旧地址,t=100权威改新地址;在无其他策略的训练模型下,它可继续到t=300用旧缓存。切换前降TTL还要等旧高TTL缓存过期,不能在切换瞬间改TTL就保证即时生效。
规模与取舍
查询次数随缓存命中与委派深度,端到端时延包含网络与失败重试;不把查询算法说成固定O(1)真实响应。缓存空间随名称/类型/TTL记录增长。
易错点与追问
容易失分的边界
- DNS处理整个URL。
- 权威与recursive同义。
- TTL改了全网马上生效。
- DNS解析成功等于服务可用。
- DNSSEC等于传输加密。
继续深挖
- NXDOMAIN与SERVFAIL怎样区分?
- 为何同名不同网络返回不同地址?
- 旧DNS缓存与旧TCP连接怎么分别排查?
- A与AAAA都存在时客户端怎么选择?
技术参考
- RFC1034 DNS:公开概念/机制参考,本文容量与故障案例自拟;不代表原面试系统。
