DNS 解析
校招考察频度:☆ 中频(原理扩展·协议解析) 生产导向主线:DNS 将人类可读的域名解析为机器可识别的 IP 地址。在生产环境中,面试官不仅关注域名层级与递归/迭代查询流程,更看重DNS 缓存 TTL、DNS 污染与劫持防御,以及微服务内网 DNS 漂移与负载均衡。
一、域名层级结构
www.example.com.
│ │ │ └─ 根域(.)
│ │ └────── 顶级域 TLD(.com / .cn)
│ └─────────── 二级权威域(example.com)
└──────────────── 主机名(www)- 层级从右到左:根域名服务器(全球 13 组逻辑根)→ 顶级域 TLD 服务器 → 权威域名服务器。
二、DNS 解析全流程
DNS 解析流程: 客户端到 LDNS 递归,LDNS 对外逐级迭代
- 查本地缓存:浏览器 DNS 缓存 → 操作系统 Hosts 文件及 OS 缓存。
- 递归查询(Recursive Query):客户端向本地 DNS(LDNS,如运营商 DNS 或云厂商
8.8.8.8)发请求,LDNS 承担“跑腿包办”职责,不拿到最终结果不罢休。 - 迭代查询(Iterative Query):LDNS 依次向根域名服务器、TLD 服务器、权威服务器询问。上一级不直接返回结果,而是“指路”给下一级服务器地址。
- 逐级写入缓存并返回:权威服务器返回 IP 及 TTL(存活时间),LDNS 与客户端分别缓存该映射。
三、生产实践与故障排查
- 生产 TTL 设定策略:
- 业务稳定期:TTL 设为较长(如 1 小时 ~ 1 天),减轻权威 DNS 压力,降低客户端延迟。
- 计划切机房/服务下线迁移:提前 24 小时将 TTL 缩短为 60 秒,待大部分客户端缓存过期后快速生效新 IP。
- DNS 劫持与安全防范:
- 传统 DNS 基于纯文本 UDP 53 端口,极易被中间人篡改或运营商劫持插广告。
- 工业级解法:采用 DoH(DNS over HTTPS) 或 DoT(DNS over TLS) 加密通信,或在移动端 App 采用 HttpDNS(绕过本地运营商 LDNS,直接通过 HTTPS API 获取权威解析)。
- 微服务与 K8s CoreDNS 瓶颈:
- K8s 内部集群解析大量依赖 CoreDNS,若出现高并发服务频繁解析外部域名,可能导致 CoreDNS 超载。
- 生产优化:开启 NodeLocal DNSCache(节点本地 DNS 缓存),缩短链路并防止 UDP 丢包。
面试高频追问
- 递归查询和迭代查询的区别? 递归查询是“一包到底”,客户端只问一次 LDNS,LDNS 负责查出最终结果;迭代查询是“自己跑腿指路”,LDNS 逐级询问根域、顶级域并拿到下一跳地址。
- HttpDNS 解决什么问题? 解决移动端运营商 DNS 劫持、跨网调度不准(跨运营商解析到偏远节点)以及域名更新缓存延迟问题。通过 HTTP 接口直连大厂权威 DNS 获取准确 IP。
- 为什么根域名服务器只有 13 个 IP 地址? 早期 DNS 报文受限于以太网 MTU 和 UDP 报文 512 字节的上限限制,只能容纳 13 个 IPv4 根服务器地址。现代通过 Anycast(任播)技术,每个根 IP 地址背后都有遍布全球的成百上千台物理镜像服务器支撑。