域名解析是访问互联网服务第一道关卡,域名解析质量(成功率,耗时)直接影响用户体验。域名通过DNS服务完成解析,DNS服务是互联网服务所依赖的基础服务之一。因此正确理解域名解析与DNS服务是程序员必备的技能之一。
域名结构
典型的一个域名:www.baidu.com,是一个结构化的字符串,我们需要先理解域名的结构。
www.baidu.com 完整的表达是 www.baidu.com.,通常表达时候将最后的.省略掉了。
域名结构,从后往前,是一个名字空间逐步具体化的过程。
- 根域名:最后一个
.字符串表示根域。 - 顶级域名:
.com为顶级域,类似的还有.org,.net等。 - 二级域名:
.baidu为二级域名,二级域名名称拥有者申请时候自定义。 - 三级域名:
www为三级域名,二级域名之下的三级域名由域名拥有者自定义。同理还可以有四级域名等等。
域名解析
域名解析的目的是将域名字符串翻译为IP地址,这个工作由DNS(Domain Name System)完成。在理解域名解析过程之前,先了解DNS的层级结构。
DNS服务器层级

- Root DNS Server 根域名解析服务器 (.): 全球13个根域名服务器,不负责域名到IP的解析,返回顶级域名服务器地址。基本被美国垄断。
- Top Level Domain Server 顶级域名解析服务器(.com, .org等): 不负责域名到IP的解析,返回权威域名服务器地址。各个国家都有。
- Authoritative DNS Server 权威域名服务器: (如baidu.com): 负责域名到IP的解析。通常由互联网厂商提供,如万网、各大云厂商。
- Local DNS Server 本地域名服务器(递归域名服务器): 负责接收终端域名解析请求,完成域名查找。通常由ISP提供(如国内三大运营商)。
域名解析过程
Client Local DNS Root DNS TLD Authoritative DNS
| | | | |
|--1. 请求解析www.baidu.com-->| | | |
| | | | |
| |--2.请求根DNS-------------------->| | |
| |<--3.返回TLD地址------------------| | |
| | | | |
| |--4.请求.com TLD----------------->| | |
| |<--5. 返回.com TLD地址------------| | |
| | | | |
| |--7. 请求baidu.com--------------------------------->| |
| |<--8. 返回baidu.com权威DNS地址-----------------------| |
| | | |
| |--9. 请求权威DNS,解析域名--------------------------------------->|
| |<--10. 权威DNS返回域名解析结果------------------------------------|
|<--11. 得到域名解析结果------>| |
上述域名解析流程是一个很耗时的过程,耗费的时间估计到秒级别,不可能每次访问一个站点都执行一次解析流程,因此域名解析缓存就非常重要。
域名解析缓存
由于域名与IP地址映射关系变化频度低,同时全流程解析时间长,为了减少域名解析耗时,域名解析各个节点,都可使用缓存技术 。
- Client(App): 在应用层缓存解析结果。TTL的时间可设置为应用进程生命周期,当解析结果(IP地址)不可达时,缓存失效。应用层缓存可实现域名解析耗时接近0。
- 操作系统:在操作系统DNS服务会缓存解析记录。
- Local DNS:运营商的本地缓存,Local DNS缓存的TTL通常为10分钟,缓存命中场景下域名解析耗时10ms左右。
- Authoritative DNS:权威DNS缓存通常为10分钟,Local DNS缓存未命中场景下请求权威DNS解析,权威DNS解析耗时通常达百毫秒级别。
Reference
DNS 原理入门 DNS TTL最佳实践 DNS详解,权威DNS,递归DNS,转发DNS,公共DNSDNS TTL最佳实践 What Is DNS? | How DNS Works