DNS解析流程

5,925 阅读3分钟

当浏览器输入一个url的时候,会发生什么事情呢?第一步,当然事DNS解析啦,下面来剖析一下DNS解析的过程。

what

首先,什么事DNS?

DNS 即 Domain Name System,字面上理解,其实就是一个域名的名字系统,用来管理域名:ip的对应关系。通俗来讲,就是一个键值对的列表。

域名

DNS是域名:ip的对应关系,那么我们来看一下域名的结构,举个例子,首先有一个域名:tlab.cloud.tencent.com,我们看到的最后的com就是顶级域名,顶级域名往前就是二、三……级域名,所以tencent就是二级域名,clloud就是三级域名,以此类推。

DNS解析

那么,在浏览器输入域名的时候,DNS是怎样解析的呢?分以下几步:

  1. 本地hosts文件
  2. 本地DNS缓存
  3. DNS服务器缓存
  4. DNS服务器递归查找

本地hosts文件

修改hosts文件对于开发者来说并不陌生,这样我们可以不改变线上域名的配置,然后直接通过域名访问我们想要访问的机器。

本地DNS缓存

如果hosts文件没有的话,那么DNS就会查看本地的DNS缓存,如果有的话就直接返回对应的ip即可。下面是我本地对tlab.cloud.tencent.com的DNS解析,因为之前已经解析过来,所以缓存里就有对应的ip地址:193.112.230.97。

DNS服务器缓存

如果是第一次访问某个域名的话,那本地缓存肯定是没有的。

所以就会到DNS服务器查找,链接网络之后,我们的电脑就会有对应的DNS服务器的地址,下图:

这个时候,由于前两个都走不通,这时就会去询问DNS服务器:请问tlab.cloud.tencent.com对应的ip是多少呢?

这个时候,DNS服务器首先是查看自己的缓存,如果有的话,就可以直接返回。

DNS服务器递归查找

如果DNS服务器也没有缓存的话,那就要进行递归查找了。

首先,我们先dig math tlab.cloud.tencent.com 可以看到answer

这里我们会看到域名最后加了一个. 其实所有域名后面其实都是有.的,即.root,表示根域名,因为大家都一样,所以省略了。

tlab.cloud.tencent.com. 600 IN A 193.112.230.97

继续,我们来看以下DNS服务器是怎么递归查找的。

  1. 询问根域名,获取顶级域名 .com 的 NS(Name Server) 和 A(Address),NS为顶级域名的名字,A即NS对应的ip地址
  2. 询问顶级域名,获取二级域名 .tencnet.com 的NS 和 A
  3. 询问二级域名,获取三级域名 .cloud.tencent.com 的NS 和 A
  4. 询问三级域名,获取四级域名 .tlab.cloud.tencent.com 的NS 和 A
  5. 最后,将tlab.cloud.tencent.com的ip地址返回给用户,并且缓存
  6. 用户获取到真正的ip地址,并且缓存

写在最后

DNS缓存是我们每天都会用到的,当然,我们也不会每天都用到,了解之后也有助于我们更加熟悉开发流程。