DNS 协议全详解
DNS 协议部分知识详解
DNS 是什么
DNS 全称为 Domain Name System,即域名解析系统。它是一种将 IP 地址转换成对应的主机名(或将主机名转换成与之相对应的 IP 地址)的系统。可以抽象类比为互联网的电话簿,它记录着域名和 IP 地址的映射关系,能够方便我们快速地访问某个网站。
核心概念
系统角色
DNS 系统主要由两种服务器构成,它们各司其职,共同完成域名解析任务:
| 角色 | 作用 |
|---|---|
| 递归服务器 | 代表用户去查找域名对应 IP 地址。接受用户的查询,并一步步向上迭代查询,直到拿到 IP 地址为止 |
| 权威服务器 | 负责管理某个域名的权威解析,只负责回答自己负责的域名查询 |
查询流程
对于你在浏览器输入一个网址:www.example.com,DNS 查询的工作流程如下:
流程详解:
-
递归查询:你的电脑问递归解析器,
www.example.com的 IP 地址是多少?(这是唯一的递归查询,其他的都是迭代查询) -
迭代查询:递归解析器开始“问路”:
问根服务器:
.com的权威服务器在哪里?问
.com服务器:example.com的权威服务器在哪里?问
example.com的权威服务器:www.example.com的 IP 地址是多少? -
返回结果:权威服务器返回 IP 地址
1.2.3.4,递归解析器将其缓存并返回你的电脑
记录类型
由 DNS 构建起的域名与 IP 地址之间的对应关系,称为“DNS 记录”。通过设置不同的解析记录,可以实现对主机名不同的解析效果,从而满足不同场景下的域名解析需求。而域名解析记录,主要有以下几种类型:
| 记录类型 | 作用 |
|---|---|
| A | 将域名指向一个 IPv4 地址 |
| AAAA | 将域名指向一个 IPv6 地址 |
| CNAME | 将域名指向另一个域名 |
| MX | 邮件交换记录,指定负责接收邮件的服务器地址 |
| TXT | 文本记录,常用于验证域名所有权,SPF 反垃圾邮件等 |
| NS | 指定该域名由哪台权威服务器来解析 |
而在解析记录中,有一列为 TTL,其全称为:Time To Live,即存活时间,用于告诉递归解析器,该条记录在缓存中可以存活多久。当 TTL 过期后,递归解析器会重新向权威服务器查询该条记录。
TTL 实践
IP 预热
在运维实践中,一个至关重要的实践是:变更 IP 前的“预热”:
场景:需要将 www.example.com 的 IP 解析从 1.2.3.4 变更为 5.6.7.8,当前的 TTL 是 24h
错误做法:直接在权威服务器上把 IP 变为 5.6.7.8,那么在接下来的 24h 内,全球会有大量的用户因为缓存了旧 IP 而无法访问您的网站
正确做法:
提前一段时间(例如:提前 48h),将 www.example.com 的 TTL 变为与i给很短的值,例如:300s
等待 48h(远远大于旧的 TTL 值的时间),以确保全球所有递归服务器的旧缓存都已过期,并获取了短的 TTL
执行 IP 地址的变更
因为现在 TTL 缓存只有 5min,所以很快就会刷新,全球用户可以很快地获取到新的 IP 地址
等待变更稳定后,再将 TTL 恢复为原来较长的值,以提升性能
生产规范
生产环境中的 TTL 设置是一门艺术,也是平衡之术,对于不同的场景需求,需要不同的 TTL 设置:
| 服务类型 | TTL 设置 | 生产实践理由 |
|---|---|---|
| 静态官网/宣传页 | 12h ~ 24h | 内容稳定,IP 几乎不变,长 TTL 带来极佳的访问速度和用户体验 |
| API 服务/核心业务 | 300s | 甜点区。平衡性和灵活性,发生故障时,5min 内可以切换流量 |
| CDN/CNAME 记录 | 300s ~ 1800s | CDN 节点可能调整,需要一定的灵活性,但也不能太短,否则失去了缓存的意义 |
| MX 记录 | 12h 以上 | MX 记录极其稳定,长 TTL 可以避免外域邮件服务器因找不到目标而退信 |
| NS 记录 | 24h ~ 48h | 域名服务器的地址是根基,必须超级稳定。长 TTL 确保解析本身不出问题 |
| 临时活动/灰度发布 | 60s ~ 120s | 需要快速切换、回滚。允许运维人员在 1min ~ 2min 内控制全部用户流量 |
- 分级设置:不要所有记录都使用同一个 TTL。核心 API 使用中等 TTL,基础设施(MX,NS)使用长 TTL
- 默认设置:如果不知道如何设置的业务,300s 的 TTL 是一个安全、通用的起点
- 变更前置:变更 IP 前,必须先调低 TTL
- 监控警告:对 DNS 解析结果进行监控,必须确保变更后解析正确
