域名解析与缓存

域名解析是访问互联网服务第一道关卡,域名解析质量(成功率,耗时)直接影响用户体验。域名通过DNS服务完成解析,DNS服务是互联网服务所依赖的基础服务之一。因此正确理解域名解析与DNS服务是程序员必备的技能之一。

域名结构

典型的一个域名:www.baidu.com,是一个结构化的字符串,我们需要先理解域名的结构。

www.baidu.com 完整的表达是 www.baidu.com.,通常表达时候将最后的.省略掉了。

域名结构,从后往前,是一个名字空间逐步具体化的过程。

  • 根域名:最后一个 . 字符串表示根域。
  • 顶级域名:.com为顶级域,类似的还有.org, .net 等。
  • 二级域名:.baidu 为二级域名,二级域名名称拥有者申请时候自定义。
  • 三级域名:www为三级域名,二级域名之下的三级域名由域名拥有者自定义。同理还可以有四级域名等等。

域名解析

域名解析的目的是将域名字符串翻译为IP地址,这个工作由DNS(Domain Name System)完成。在理解域名解析过程之前,先了解DNS的层级结构。

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