DNS解析流程
完整解析过程(迭代查询)
以解析 www.abc.xyz.com 为例:
用户程序(客户端)
│ 1. DNS查询请求
▼
本地域名服务器(Local DNS,最重要的服务器)
│ 2. 本地缓存未命中,向根服务器查询
▼
根域名服务器(Root DNS Server)
│ 3. 告知:.com的顶级域服务器地址是 X.X.X.X
▼
本地域名服务器(迭代:自己继续查)
│ 4. 向TLD服务器查询
▼
顶级域名服务器(TLD Server for .com)
│ 5. 告知:xyz.com的权限服务器是 Y.Y.Y.Y
▼
本地域名服务器
│ 6. 向权限服务器查询
▼
权限域名服务器(Authoritative for xyz.com)
│ 7. 返回 www.abc.xyz.com 的IP地址
▼
本地域名服务器(缓存结果,按TTL计时)
│ 8. 返回IP给客户端
▼
用户程序(得到IP,建立TCP连接)
四类DNS服务器角色
| 服务器类型 | 数量 | 作用 | 特殊说明 |
|---|---|---|---|
| 根域名服务器 | 13套装置(实际1098+节点) | 知道所有TLD服务器 | 任播技术,不直接返回IP |
| TLD服务器 | 数千 | 管理.com/.cn等注册域名 | 可能直接回答或转给权限服务器 |
| 权限域名服务器 | 数十万 | 对某区有最终权限 | 一个域可分多个区 |
| 本地域名服务器 | 每个ISP/大学一个 | 代理客户端查询 | 最重要,客户直接联系 |
高速缓存机制
- 每次解析结果缓存,设置 TTL(Time To Live) 计时器
- TTL大:减少查询量;TTL小:域名更新快
- 大大减轻根服务器负荷(全球1098个根节点每天仍处理数十亿查询)
递归查询(对比)
本地服务器让根服务器代为查询(根服务器问TLD,TLD问权限服务器,逐层回答): - 使用较少(增加根/TLD服务器负担) - 某些情况下客户直接发起递归查询到本地服务器
DNS安全问题
DNS缓存中毒(Cache Poisoning):攻击者伪造DNS响应,将域名指向恶意IP - 防御:DNSSEC(DNS安全扩展)对响应进行数字签名
参见
- [[06-应用层]] — DNS完整章节
- [[06-应用层|HTTP协议]] — HTTP请求前必须先进行DNS解析
- [[04-网络层]] — DNS查询底层使用UDP(端口53)