DNS解析过程

"之理解迭代查询和递归查询"

Posted by isQ on May 3, 2019

DNS解析过程

前言

为了了解DNS解析的整个过程,但是我查看了一些博文,但都不是我想要的结果,要么讲的很浅显,要么就是那种专门做计算机网络才能看得懂得文章,因此为了避免以后自己忘掉,把这次的理解总结一下。

迭代查询和递归查询

DNS大致解析过程如下:

DNS解析流程 首先我先说一下我对DNS递归查询以及迭代查询的理解:DNS的解析过程默认是采用递归查询,也就是一层一层的传递下去,但是如果遇到某个服务器的RA字段(表示是否支持递归查询)为0,或者DNS域名查询请求中RD字段(表示是否期望使用递归查询)为0时,此时将会采用迭代查询,迭代查询就是每次查询到的结果不是由你递交请求的服务器代你继续查询,而是将查询结果返回给当前发出请求的机器。上图客户端将域名查询请求交给本地DNS服务器之后是由本地DNS服务器代替客户端继续查询,而不是将根域名服务器的地址返回给客户端,再让客户端请求,因此该阶段就是递归查询;本地DNS服务器后面的过程就是迭代查询过程。

从一个域名到一个IP地址到底发生了什么

当客户端需要通过一个域名请求资源时,必须知道该域名对应的IP地址是什么;为什么一定要知道请求目的地的IP才能发送请求?因为我们现有的网络几乎都是基于TCP/IP协议的,而TCP/IP协议是基于IP地址的进行通讯的。假设现在客户端要访问www.google.com,发生的DNS解析过程大致如下:

  1. 客户端首先查询自己的缓存中是否有该域名的访问记录,如果有的话直接访问对应的IP地址,否则进行下一步。
  2. 在缓存没有查询到要访问域名的记录,则去查询主机下面的host文件(记录一些常用网址域名对应的ip地址的一个文件)是否有记录,如果有的话直接访问对应的IP地址,否则进行下一步。
  3. host文件中也未找到,则像本地配置的DNS服务器进行查询(这里只以首选DNS服务器为例,备用DNS服务的过程基本相同),本地DNS服务器接收到域名解析请求之后查询自己的缓存是否有该域名的记录,如果有直接返回域名对应的IP地址;如果没有,则去查询根域名服务器(这里本地DNS域名服务器采用迭代查询,递归查询的过程更简单一层一层查到底直至返回结果)。
  4. 根域名服务器收到该域名解析请求后,查询该域名对应的顶级域名服务器,将顶级域名服务的IP地址返回给本地DNS服务器。
  5. 本地DNS服务器将结果缓存,同时向该域名的顶级域名服务器发出请求;顶级域名服务器收到请求后,首先查看自己的缓存是否有该域名的记录,如果有则直接返回,否则将查询该域名的二级域名服务器,并将IP地址返回给本地DNS域名服务器。
  6. 后面的查询过程都类似于第五步直至返回最终结果,将结果缓存并将IP地址返回给客户端。
  7. 客户端将访问IP地址并将查询结果进行缓存。