DNS 域名解析
DNS 如何把域名解析成地址?
- DNS: 分层、分布式的命名系统,把便于记忆的域名映射到地址等资源记录;
- 递归解析器: 代客户端完成查询,先查缓存,未命中才继续询问 DNS 层级;
- 根服务器: 返回相关顶级域的服务器线索,13 个根标识由许多 Anycast 实例承载,并非全球仅 13 台机器;
- 顶级域服务器: 负责指向
.com、.org或国家代码顶级域下域名的权威服务器; - 权威服务器: 保存所负责区域的正式记录,回答地址或别名等结果;
客户端 → 递归解析器 → 根 → 顶级域 → 权威服务器
客户端 ← 最终结果或错误 ← 地址记录或需继续解析的别名
递归查询和迭代查询有什么区别?
| 查询方式 | 请求方要求 | 响应行为 |
|---|---|---|
| 递归 | 请替我查到底 | 返回最终结果或错误 |
| 迭代 | 请给你知道的最好答案 | 返回答案或下一站线索 |
| 无需继续递归 | 当前即可回答 | 依据缓存或权威数据直接响应 |
- 典型组合: 客户端要求递归解析器完成任务,解析器通常通过迭代询问根、顶级域和权威服务器;
常见资源记录分别表达什么?
| 记录 | 含义 |
|---|---|
| A / AAAA | IPv4 / IPv6 地址 |
| CNAME | 指向另一个域名的别名,不直接提供 IP |
| MX | 邮件交换服务器 |
| TXT | 文本信息,也常用于域验证和邮件策略 |
| NS / SOA | 权威名称服务器 / 区域管理与版本信息 |
| SRV | 服务的目标主机、端口等定位信息 |
| PTR | 反向查找的域名 |
| CERT | 公钥证书相关信息 |
区域与缓存怎样影响解析结果?
- 子域:
blog.example.com在example.com下进一步划分名称,可用于产品或组织分区; - DNS 区域: 委派给某个管理方维护的名称空间范围,子域是否单独成区取决于委派;
- TTL: 记录允许缓存的秒数,缓存倒计时后需要重新解析,变更不会瞬间传播到所有客户端;
- 缓存位置: 浏览器、操作系统和解析器都可能缓存,排错时要识别实际命中的层;
- 反向查询: 根据 IP 查 PTR 得到域名,常用于邮件校验;缺少 PTR 不妨碍普通正向解析;
- 实现示例: 原文列举 Route 53、Cloudflare DNS、Google Cloud DNS、Azure DNS、NS1,产品名单不表示固定能力或排名;