DNS 概念与应用:从域名解析到 CDN
DNS(Domain Name System)是互联网的“电话簿”,把人类好记的域名翻译成机器使用的 IP 地址。408 里它属于应用层协议,但理解它需要结合传输层和工程实践。
为什么需要 DNS
IP 地址不稳定、难记忆、一台服务器也可能对应多个 IP。域名提供了稳定标识,DNS 负责在域名和 IP 之间做动态映射。
域名层级结构
域名是树状结构,从右往左逐级细分:
www.example.com.
│ │ │
│ │ └── 顶级域 com
│ └──────── 二级域 example
└───────────── 主机名 www根域名是所有域名解析的起点,由根服务器和根提示文件维护。
解析过程
DNS 解析分两种角色:
- 递归解析:用户把完整查询交给本地递归服务器,由它帮你查到底。
- 迭代解析:递归服务器依次询问根服务器、顶级域服务器、权威服务器,逐步获得答案。
完整流程可以简化为:
浏览器
→ 本地缓存
→ 递归 DNS 服务器
→ 根服务器(返回 .com 服务器)
→ .com 顶级域服务器(返回 example.com 权威服务器)
→ example.com 权威服务器(返回 A/AAAA 记录)
→ 浏览器发起 HTTP 请求实际请求里缓存无处不在,所以不会每次都走完整链路。
常用记录类型
| 记录 | 作用 |
|---|---|
| A | 域名 → IPv4 地址 |
| AAAA | 域名 → IPv6 地址 |
| CNAME | 域名 → 另一个域名 |
| MX | 邮件服务器,带优先级 |
| NS | 指定该域名的权威服务器 |
| TXT | 文本信息,常用于域名验证 |
其中 CNAME 只适合指向域名,不能指向 IP;MX 记录决定邮件投递到哪台服务器。
缓存与 TTL
每条 DNS 记录都有 TTL(Time To Live),告诉下游能缓存多久:
- TTL 越长,查询越快,但修改域名后生效越慢。
- TTL 越短,变更越灵活,但权威服务器压力越大。
生产环境常见的做法是:变更前先降低 TTL,等旧缓存过期后再改记录,最后再恢复 TTL。
工程应用
1. 负载均衡
一个域名配置多个 A 记录,DNS 轮询可以把流量分散到不同服务器。缺点是 DNS 缓存会让流量分布不够实时。
2. CDN
CDN 通过 CNAME 把业务域名指向 CDN 服务商的调度域名,再根据用户地理位置返回最近的节点 IP。用户看到的始终是同一个域名,实际访问的却是边缘节点。
3. 地域调度
权威 DNS 根据发起查询的递归服务器位置返回不同结果,实现就近接入或区域差异化部署。
4. 域名验证
在 TXT 记录里放入随机字符串,用于验证域名所有权,是证书签发、邮箱服务配置的常见步骤。
面试高频追问
Q: DNS 用的是 TCP 还是 UDP? A: 传统查询主要使用 UDP 53;响应超过 512 字节或传输区域数据时会使用 TCP。DNS over HTTPS/TLS 则在 443 端口上运行。
Q: 为什么修改 DNS 后不是立刻生效? A: 因为各级递归服务器和客户端都有缓存,必须等 TTL 过期后才重新查询。
Q: DNS 劫持是什么? A: 用户发起的解析请求被中间设备或恶意服务器篡改,返回了错误的 IP。HTTPS 可以降低后果,但无法解决解析本身被篡改的问题,因此需要 DNSSEC 做来源验证。
Q: CNAME 和 A 记录怎么选? A: 需要指向固定 IP 用 A/AAAA;需要指向另一个域名、由别人维护 IP 时用 CNAME。注意 CNAME 不能和同名的 MX 等记录冲突。
DNS 看起来只是“查一下地址”,但缓存、调度、安全和网络性能都绕不开它。