DNS 解析是分层的:浏览器缓存与操作系统 hosts 命中就直接返回,否则从本地域名服务器出发,依次向根域名服务器、顶级域名服务器、权威域名服务器查询,拿到 IP 后逐层缓存。每层都有 TTL 有效期,递归查询发生在客户端与本地服务器之间,迭代查询发生在各级服务器之间。
CDN 的原理是 DNS 把域名解析到离用户最近的边缘节点,节点缓存了静态资源,命中就直接返回,未命中再回源站拉取。面试答题时把两者串起来:DNS 决定去哪台机器,CDN 决定那台机器有没有缓存。优化手段包括 DNS 预解析与静态资源上 CDN。
// DNS 分层解析示意 const steps = [ '1. 查浏览器 DNS 缓存,未命中继续往下', '2. 查操作系统 hosts 与本地缓存', '3. 本地域名服务器递归查询:根、顶级、权威三级', '4. 拿到 IP 后逐层缓存,TTL 到期前不再查询' ]; steps.forEach(s => console.log(s)); // CDN:DNS 返回最近的边缘节点 IP,缓存命中直接返回,否则回源 console.log('优化:静态资源上 CDN,link 标签的 dns-prefetch 提前解析域名');