DNS解析过程-你的电脑到底是怎样解析域名的

当你在浏览器地址栏敲下https://www.bilibili.com并回车,你是否想过域名bilibili.com是如何解析到IP地址的呢

DNS是什么

域名系统(英文:Domain Name System,缩写DNS )是互联网的一项服务。它作为将域名IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

–来自 百度百科

DNS是怎样解析的

浏览器缓存

当你按下回车的那一刻,浏览器会首先检查自己有没有缓存过这个域名的记录。如果缓存命中那么就直接使用缓存的IP地址,反之继续往下走

扩展:浏览器DNS缓存的时间跟DNS服务器返回的TTL值无关。浏览器在获取网站域名的实际IP地址后会对其IP进行缓存,减少网络请求的损耗。每种浏览器都有一个固定的DNS缓存时间,如Chrome的过期时间是1分钟,在这个期限内不会重新请求DNS。

本地系统Host和缓存

与浏览器一样,本地操作系统也会对DNS进行缓存,除此之外,Windows系统下的 C:\Windows\System32\drivers\etc\host 文件和Linux系统下的 /etc/hosts 文件中也可以自定义域名与IP的映射关系

DNS迭代查询

前两步如果都没有结果,那么系统就会向本地DNS服务器发送查询请求,进入DNS迭代查询阶段,这个阶段用一张图可以很直观的表示出来

迭代查询

DNS迭代查询又会细分为很多步骤,这里我们使用 space.bilibili.com 作为例子,使用dig工具进行辅助分析

本地DNS服务器

DNS服务器有很多级,更靠近用户的那级服务器就叫做本地DNS服务器,也叫 递归解析器 。本地DNS服务器一般是网络服务商提供的DNS,也可以手动修改为公共DNS,国内常用的公共DNS服务器有:

阿里公共DNS 223.5.5.5
腾讯公共DNS 119.29.29.29
百度公共DNS 180.76.76.76

本地服务器通常也被称为 非权威DNS服务器 ,与之对应的 权威DNS服务器 则指的是特定域名在域名注册商处所设置的 DNS 服务器,用于特定域名本身的管理(增加、删除、修改等)也就是后面提到的 权限域名服务器

你可以理解为本地DNS服务器就是一个大型的DNS缓存库,里面缓存着从权威服务器查询到的DNS记录结果

根域名服务器

当本地DNS服务器中没有目标缓存,本地DNS服务器就会开始向根域名服务器查询,根域名服务器是整个DNS系统的基础,它们被标识为字母 A 到 M 的13个字母,每个字母对应一个根服务器。这些字母是在 ASCII 码中连续排列的,因此得名 A 到 M。每个字母对应的根服务器通常由不同的组织负责运营。

根服务器

通过dig工具我们可以发现,根域名服务器返回的查询结果是一堆 NS 记录

根域名服务器

根域名服务器中存储的是各个顶级域名对应的顶级域名服务器地址,也就是说,根域名服务器告诉我们,如果想查询 space.bilibili.com 的解析记录,就需要去这些DNS服务器查找

想想也很好理解,要是根域名服务器保存着全世界所有的DNS信息,先不说数据量,就是查询时间估计都够泡壶茶喝了

顶级域名服务器

现在,我们拿到了顶级域名服务器的地址,就要向顶级域名服务器去查询 space.bilibili.com

顶级域名服务器

可以看到,返回的结果和根域名服务器很像,也是NS记录,但是区别是这次返回的是 bilibili.com 这个一级域名的DNS服务器地址

就像是剥洋葱,一层一层剥开域名

权限域名服务器

此后的二级域名甚至三级域名的解析记录,都将会在这,权限域名服务器 中被查询到

权限域名服务器

通过dig工具我们可以看到,space.bilibili.com 解析到了一个 CNAME 记录,这时候,就需要继续从根域名服务器开始查询,但这次,要查询的不再是 space.bilibili.com ,而是 a.w.bilicdn1.com

最终查询结果

再次经过了一轮的DNS查询,我们可以看到, a.w.bilicdn1.com 解析到了一堆的 A记录

最终结果

完成DNS迭代查询

自此,本地DNS系统就知道了,我们要查询的 space.bilibili.com 实际上对应的,就是这一堆IP地址,然后会根据查询到的IP地址的权重,随机返回一个IP给客户端(也就是我们的电脑)

思考

那么现在,问题来了,既然十三台根域名服务器都不在中国,但是为什么却每次DNS查询都非常快呢,查询根域名服务器的时候应该会严重拖垮查询性能才对 [手动狗头]