DNS
通常基于 UDP 协议(端口 53),用于解决域名和 IP 地址的映射问题。当响应数据过大或进行区域传送时会改用 TCP。
#status / growing
#type / concept
#protocol / dns
#tech / network
[!info] related notes
- 所属 MOC: computer-networking-moc
- 相关协议: tcp, udp, https
- 安全相关: dns-hijacking
DNS
DNS(Domain Name System,域名管理系统):将人类可读的域名(如 www.example.com)翻译为机器可寻址的 IP 地址(如 93.184.216.34)的分布式数据库系统,通常基于 UDP 协议(端口 53),当响应数据超过 512 字节或进行区域传送时改用 TCP。
DNS 解析过程
一次完整的 DNS 查询经历以下层级,采用递归 + 迭代混合模式:
用户浏览器 → OS 缓存 → 本地递归解析器(ISP/8.8.8.8)
→ 根域名服务器(.)
→ TLD 域名服务器(.com)
→ 权威域名服务器(example.com)
→ 返回最终 IP
| 阶段 | 查询方式 | 说明 |
|---|---|---|
| 客户端 → 递归解析器 | 递归 | 客户端要求解析器”帮我查到底” |
| 递归解析器 → 根/TLD/权威 | 迭代 | 解析器逐级问,每级只返回”去问下一级” |
DNS 记录类型
| 记录类型 | 作用 | 示例 |
|---|---|---|
| A | 域名 → IPv4 地址 | example.com → 93.184.216.34 |
| AAAA | 域名 → IPv6 地址 | example.com → 2606:2800:220:1:... |
| CNAME | 域名别名(指向另一个域名) | www.example.com → example.com |
| MX | 邮件交换服务器 | example.com → mail.example.com (优先级 10) |
| NS | 该域名由哪些 DNS 服务器解析 | example.com → ns1.example.com |
| TXT | 文本信息(SPF/DKIM/验证等) | "v=spf1 include:_spf.google.com ~all" |
| SRV | 服务发现(协议+端口) | _sip._tcp.example.com → sipserver:5060 |
| SOA | 起始授权记录(区域管理信息) | 主 DNS、刷新间隔、过期时间等 |
| PTR | IP → 域名(反向解析) | 34.216.184.93.in-addr.arpa → example.com |
DNS 缓存层级
DNS 响应带有 TTL(Time To Live),各级缓存按 TTL 过期:
浏览器缓存(几秒~几分钟)
→ OS 缓存(/etc/resolv.conf 或系统 DNS 缓存)
→ 递归解析器缓存(ISP DNS,几分钟~几小时)
→ 各级权威服务器不缓存,直接返回权威数据
修改 DNS 记录后,全球生效时间取决于各级缓存的 TTL 过期时间,通常 5 分钟 ~ 48 小时。
DNS over HTTPS / DNS over TLS
传统 DNS 查询以明文 UDP/TCP 传输,存在窃听和篡改风险:
| 方案 | 协议 | 端口 | 特点 |
|---|---|---|---|
| DoT (DNS over TLS) | TLS over TCP | 853 | 专用端口,容易被封锁 |
| DoH (DNS over HTTPS) | HTTPS | 443 | 与普通 HTTPS 流量混在一起,难以区分封锁 |
两者都对 DNS 查询内容加密,防止中间人窃听或劫持。
常用调试命令
# 查询 A 记录
nslookup example.com
dig example.com A
# 追踪完整解析路径
dig +trace example.com
# 指定 DNS 服务器查询
dig @8.8.8.8 example.com
# 查看 TTL
dig example.com | grep -A1 "ANSWER SECTION"
# Windows 下
nslookup -type=MX example.com
边界与常见误解
- DNS 不只做域名→IP:还支持反向解析(PTR)、邮件路由(MX)、服务发现(SRV)等
- DNS 本身不负责负载均衡:但可以通过轮询 A 记录实现简单的 DNS 负载均衡
- 修改 DNS 记录不是即时生效的:受各级缓存 TTL 影响,需要等待缓存过期
- DNS 不保证安全性:传统 DNS 无加密无签名,需要 DoH/DoT 或 DNSSEC 来增强安全
- 一次查询可能不需要访问所有层级:缓存命中时直接返回,无需递归查询
相关笔记
- 计算机网络 MOC
- tcp / udp — 传输层协议
- https — TLS 加密的 HTTP
- dns-hijacking — DNS 劫持原理与防范
- what-happens-after-entering-url — URL 输入后的完整流程