
你每天可能要进行数百次 DNS 查询却浑然不知——每次打开网站、每个 API 请求、每条消息推送,背后都有 DNS 在默默工作。本文带你深入了解这个互联网最重要的基础设施之一。
一、为什么需要 DNS?
计算机之间通信用的是 IP 地址 (如 142.250.190.46),但人类记不住这些数字。于是 DNS(Domain Name System)应运而生——它是一个 分布式的域名到 IP 地址的映射系统,相当于互联网的电话簿。
没有 DNS 的话,你得记住所有网站的 IP 地址才能上网。想象一下如果打电话前要先背对方的手机号有多痛苦 😅
二、域名层级结构
DNS 采用 树状的层级结构,以 www.example.com 为例:
. ← 根域(Root)└── com ← 顶级域(TLD)└── example ← 二级域(由注册商管理)└── www ← 子域(主机名 / 三级域)
每一级由不同的组织管理,这种分散式设计保证了系统的 可靠性 和扩展性。
常见顶级域(TLD)分类:
• 通用顶级域:.com .org .net .dev .app
• 国家 / 地区代码顶级域:.cn(中国) .jp(日本) .uk(英国)
• 新通用顶级域:.xyz .top .shop 等 2000+ 种
三、完整的 DNS 解析过程
当你在浏览器输入 www.example.com 并回车:
Step 1:浏览器缓存检查
浏览器先查自己的 DNS 缓存。最近访问过的域名会在这里找到记录,命中则立即返回(耗时 < 1ms)。Chrome 可以在 chrome://net-internals/#dns 查看 DNS 缓存。
Step 2:操作系统缓存
浏览器没找到就问操作系统。Windows 的 DNS Client Service、Linux 的 nscd / systemd-resolved 都维护着 DNS 缓存。
Step 3:本地 DNS 服务器(递归解析器)
前面都没命中,请求就发到了你配置的本地 DNS 服务器(通常是运营商提供的,如 114.114.114.114 或公共 DNS 如 8.8.8.8)。
这个服务器会进行 递归查询——它会代替你去一层一层地问,直到拿到结果再返回给你。
Step 4-7:逐级权威查询
- 问根域名服务器:「com 域谁来管?」→ 返回 .com 名字服务器地址
- 问 TLD 服务器:「example.com 谁来管?」→ 返回 example.com 的 NS 记录
- 问权威名称服务器:「www.example.com 的 IP 是多少?」→ 返回 A 记录(IP 地址)
- 本地 DNS 缓存结果并返回 给你的浏览器
| 步骤 | 查询对象 | 返回信息 | 典型耗时 |
|---|---|---|---|
| 1 | 浏览器缓存 | A 记录或 miss | < 1ms |
| 2 | OS 缓存 | A 记录或 miss | < 1ms |
| 3 | 本地 DNS(递归器) | 开始递归查询 | 1~5ms |
| 4 | 根域名服务器 | TLD NS 地址 | 10~50ms |
| 5 | TLD 名称服务器 | 域 NS 地址 | 10~50ms |
| 6 | 权威名称服务器 | 最终 A 记录 | 10~100ms |
| 7 | 返回给浏览器 | IP 地址 | 1~5ms |
整个过程理想情况下在 50-200ms 内完成。
四、常见的 DNS 记录类型
DNS 不只是把域名映射到 IP,它支持多种记录类型:
| 记录类型 | 全称 | 作用 | 示例 |
|---|---|---|---|
| A | Address | 域名 → IPv4 地址 | example.com → 93.184.216.34 |
| AAAA | Address v6 | 域名 → IPv6 地址 | example.com → 2606:2800:220:1:… |
| CNAME | Canonical Name | 域名别名 | www.example.com → example.com |
| MX | Mail Exchange | 邮件服务器 | example.com → mail.example.com |
| NS | Name Server | 指定 DNS 服务器 | example.com → ns1.example.com |
| TXT | Text | 文本信息(SPF/DKIM/ 验证) | v=spf1 include:_spf.google.com ~all |
| SOA | Start of Authority | 区域起始授权信息 | 包含序列号、刷新间隔等 |
CNAME 的坑:CNAME 不能与其他记录共存(除了 DNSSEC 和 RRSIG)。所以一般建议只在子域名(如 www)上用 CNAME,根域名用 A 记录。
五、DNS 安全威胁
DNS 作为基础设施,也是攻击者的重点目标:
- DNS 劫持(Spoofing):攻击者伪造 DNS 响应,把用户引导到恶意网站
- DNS 缓存投毒:污染本地 DNS 服务器的缓存,让后续所有查询都返回错误结果
- DNS 隧道:利用 DNS 查询通道外传敏感数据(常用于绕过防火墙)
- DDoS 放大攻击:利用 DNS 的放大效应发起大规模 DDoS 攻击
防御方案包括:DNSSEC(签名验证)、DoH(DNS over HTTPS)和 DoT(DNS over TLS)加密 DNS 查询。
「DNS 的设计哲学是:没有中心化的控制点,任何地方出了问题都不会导致全网瘫痪。」— Paul Mockapetris,DNS 之父
写在最后
DNS 是互联网最成功的基础设施设计之一——分布式、容错、高效、可扩展。理解 DNS 的工作原理,不仅能帮你更快地定位网络问题,还能让你在设计高可用架构时有更全面的考量。
每一次域名解析都是一场精密协作