Appearance
DNS 基础知识
域名层级
根域名
例:www.baidu.com.顶级域名
- 通用顶级域名:
.com、.net、.edu、.org等 - 国家顶级域名:
.cn、.jp等 - 新顶级域名:
.xyz、.top、.red等
- 通用顶级域名:
二级域名
- 例:
baidu.com、jd.com - 国家顶级域名下的二级域名:
com.cn、gov.cn等
- 例:
三级域名
- 例:
www.baidu.com - 例:
sina.com.cn(一级域名cn,二级域名com.cn)
- 例:
DNS 查询流程
1. 递归查询
查询顺序:
- 浏览器缓存
- 操作系统缓存(如 hosts 文件)
- 本地 DNS 解析器缓存
- 本地 DNS 服务器配置区域资源
- 本地 DNS 服务器缓存(非权威)
本地 DNS 无解时:
- 向 13 台根域名服务器之一发送请求
- 根服务器返回对应顶级服务器地址(如 .com)
- 本地 DNS 访问顶级服务器,获得权威域名服务器地址(如 baidu.com 的权威服务器)
- 本地 DNS 向权威服务器请求,获取目标域名的 A 记录或 CNAME 记录
- 缓存结果并返回客户端,设置 TTL
DNS 记录类型:
- A 记录:域名 → IPv4 地址
- 如:
www.foo.com→111.111.111.111
- 如:
- CNAME 记录:域名 → 另一目标域名,最终由目标域名的 A 记录解析 IP
- 如:
www.foo1.com、www.foo2.com、www.foo3.com都指向www.foo.com,更换服务器 IP 时,仅需修改 CNAME 所指的目标域名(即www.foo.com)的 A 记录即可,便于维护
- 如:
- NS 记录:子域名指向其他 DNS 服务器
- MX 记录:域名指向邮件服务器
- A 记录:域名 → IPv4 地址

2. 迭代查询
- 若开启转发模式,本地 DNS 把请求转发至上游 DNS(称为转发器),由上游 DNS 继续递归查询,最后结果返回给本地 DNS,再返回给客户端。

DNS预解析
原理:提前将 DNS 解析结果缓存到系统缓存中,加快访问速度
现代浏览器会对 a 标签的 href 连接自动预解析,但 HTTPS 不会自动预解析
html
<!-- 对单个域名预解析 -->
<link rel="dns-prefetch" href="//www.baidu.com">
<!-- 开启自动预解析 -->
<meta http-equiv="x-dns-prefetch-control" content="on">
<!-- 关闭自动预解析 -->
<meta http-equiv="x-dns-prefetch-control" content="off">DNS 协议
- DNS 查询:默认使用 UDP 协议(快,只需请求/应答即可)
- 区域传输:用于主/辅 DNS 服务器间数据同步,使用 TCP 协议(大数据量,需可靠传输)
- 特殊情况:
- DNS 响应内容超过 512 字节,自动切换至 TCP
- 随着 EDNS 的引入,UDP 支持更大数据包(最多 4096 字节),但依然可靠性有限
- 现代规范要求 DNS 查询同时支持 UDP 和 TCP
为什么 DNS 要分级递归解析?
- 分级管理:每级域名由上一级管理机构管理,保证全网唯一性和高效分布式管理
- 逐级查找:通过逐级缩小范围,优化查询性能,降低根服务器压力