乐闻世界logo
搜索文章和话题

DNS 缓存机制是如何工作的,TTL 有什么作用

3月6日 22:52

DNS 缓存是提升 DNS 解析效率的关键机制,通过在多个层级存储 DNS 查询结果,减少对权威 DNS 服务器的重复查询,从而加快解析速度并减轻服务器负载。

DNS 缓存的层级结构

DNS 缓存在以下多个层级发挥作用:

1. 浏览器缓存

  • 位置:浏览器内部
  • 特点:最靠近用户,响应最快
  • 控制:用户可通过清除浏览器数据清空
  • 典型 TTL:几分钟到几小时

2. 操作系统缓存

  • 位置:操作系统 DNS 客户端服务
  • Windows:DNS Client 服务
  • Linux:nscd(Name Service Cache Daemon)或 systemd-resolved
  • 查看命令
bash
# Windows ipconfig /displaydns # Linux systemd-resolve --statistics

3. 本地 DNS 服务器缓存

  • 位置:ISP 或企业内部的 DNS 服务器
  • 作用:为多个用户共享缓存,提高命中率
  • 软件:BIND、dnsmasq、Unbound 等

4. 递归 DNS 服务器缓存

  • 位置:公共 DNS 服务(如 8.8.8.8、114.114.114.114)
  • 特点:用户量大,缓存命中率高

TTL(Time To Live)详解

什么是 TTL

TTL 是 DNS 记录中的一个重要字段,表示该记录可以被缓存的最大时间(秒)。当 TTL 过期后,缓存必须被清除,重新进行 DNS 查询。

TTL 的工作原理

shell
权威服务器设置 TTL = 3600 秒(1小时) 本地 DNS 服务器获取记录并缓存 1 小时内,所有查询都从缓存返回 1 小时后,缓存过期,重新查询权威服务器

TTL 的典型值

记录类型典型 TTL适用场景
A/AAAA 记录300-3600 秒经常变动的服务器
CNAME 记录3600-86400 秒相对稳定的别名
MX 记录3600-86400 秒邮件服务器
NS 记录86400-172800 秒域名服务器,很少变动
TXT 记录300-3600 秒SPF、DKIM 等验证记录

TTL 设置的最佳实践

稳定服务

  • 使用较长的 TTL(24-48 小时)
  • 减少 DNS 查询流量
  • 提高解析速度

频繁变更的服务

  • 使用较短的 TTL(5-15 分钟)
  • 便于快速切换服务器
  • 适用于蓝绿部署、故障转移

变更前的准备

shell
变更前 24 小时:降低 TTL 到 300执行变更操作 变更后 24 小时:恢复 TTL 到原值

缓存刷新和清除

客户端刷新

bash
# Windows 清除 DNS 缓存 ipconfig /flushdns # macOS 清除 DNS 缓存 sudo killall -HUP mDNSResponder # Linux (systemd-resolved) sudo systemd-resolve --flush-caches

服务器端刷新

  • 重启 DNS 服务
  • 使用 rndc flush(BIND)
  • 等待 TTL 自然过期

缓存带来的问题

1. 缓存不一致

  • 不同层级的缓存 TTL 可能不同
  • 导致用户访问到不同版本的服务

2. 变更延迟

  • DNS 变更需要等待所有缓存过期
  • 全球生效可能需要 TTL × 2 的时间

3. 缓存投毒攻击

  • 攻击者伪造 DNS 响应污染缓存
  • 解决方案:DNSSEC 数字签名

缓存优化策略

1. 合理设置 TTL

dns
; 高可用性服务 - 短 TTL www.example.com. 300 IN A 192.0.2.1 ; 稳定服务 - 长 TTL static.example.com. 86400 IN A 192.0.2.2

2. 使用 CDN

  • CDN 边缘节点缓存 DNS 结果
  • 智能调度用户到最近节点

3. 预解析和预连接

html
<!-- HTML DNS 预解析 --> <link rel="dns-prefetch" href="//cdn.example.com"> <link rel="preconnect" href="//api.example.com">

总结

方面说明
缓存层级浏览器 → OS → 本地 DNS → 递归 DNS
TTL 作用控制缓存有效期,平衡性能和一致性
优化方向根据服务特性设置合理的 TTL 值
注意事项变更前降低 TTL,避免缓存不一致

标签:DNS