连载中 14/20

DNS 解析:一次域名查询的奇幻漂流

2026-10-07 · 10 阅读 · 0 评论 · 0 赞

查询链:像查户口一样逐级问

浏览器拿到域名后,先翻自己的缓存,再问操作系统(hosts 文件、系统缓存),都没有就交给本地 DNS 服务器(运营商分配或手动配的 114/223.5.5.5/8.8.8.8)。接下来才是正戏:

本地DNS ──问根──→ 根服务器:「.com 谁管?问这个地址」
本地DNS ──问顶级─→ .com 顶级域:「note.example.com 的权威 DNS 在哪」
本地DNS ──问权威─→ 权威服务器:「A 记录 203.0.113.10」
本地DNS ──返回──→ 客户端(顺手缓存,按 TTL 过期)

// 递归查询:客户端只对本地 DNS 说「帮我查到底」
// 迭代查询:本地 DNS 对各级服务器说「你不用查完,告诉我下一个该问谁」
// 全世界每天数百亿次查询,靠的是这套分工 + 缓存

13 个根服务器不是性能瓶颈——绝大多数查询根本到不了根,各级缓存层层拦截。真正会到根的,只有缓存全 miss 的冷门域名。

TTL:缓存的生命周期

每条 DNS 记录带 TTL(秒),各层缓存都遵守它。这是把双刃剑:TTL 长,解析快、查询少,但换 IP 后全球生效要等满 TTL;TTL 短,切换灵活,查询量翻倍。实践:平时 TTL 设 1 小时,计划切换前 24 小时先调低到 60 秒,切换完再调回去。很多“改了解析怎么还没生效”,答案就是某一层缓存还没过期。

劫持与 HttpDNS

UDP 明文查询意味着链路上谁都可能动手脚:运营商 DNS把广告插进解析结果、把 CDN 域名解析到自家缓存,甚至直接返回错误 IP。应对方案:HttpDNS——绕过 UDP 53 端口,用 HTTPS 直接请求解析服务拿结果,App 类产品标配。通用域名还可以上 DoH/DoT(DNS over HTTPS/TLS)加密查询。内网注意另一类“劫持”:公司内网解析器把内部域名转给公网查,内网服务解析失败先查 split-horizon 配置。

实战:dig 看清每一跳

$ dig note.example.com +noall +answer
note.example.com.  300  IN  A  203.0.113.10
                       ↑ TTL(秒)      ↑ 当前解析结果

$ dig note.example.com @8.8.8.8          # 指定解析器对比结果
$ dig +trace note.example.com            # 完整走一遍根→顶级→权威
$ dig -x 203.0.113.10 +short             # 反向解析

# 排障口诀:
#   本地 dig 结果异常 → @8.8.8.8 对比 → 还异常就是权威配置问题
#   时好时坏         → 看权威 DNS 是否有多条记录、健康检查是否飘

DNS 记录不止 A 记录

常用记录类型记四个就够:A(域名→IPv4)、AAAA(→IPv6)、CNAME(别名,指向另一个域名,CDN 接入全靠它)、MX(邮件路由)。负载均衡玩法也在这里:一个域名配多个 A 记录轮询是最朴素的多机房分流,结合 GeoDNS 还能按地区返回就近 IP——下一讲的 CDN,就是把这套玩法做到极致。下一篇:CDN——静态资源为什么能快到离谱。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#DNS解析#递归迭代#TTL#HttpDNS#dig

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞