DNS解析原理:递归 && 迭代

DNS解析流程分为递归查询和迭代查询,递归查询是以本地名称服务器为中心查询, 递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。windows

先不说那么多,看两张图你应该就明白了。缓存

  • 递归:

  • 迭代:

再介绍几个概念:

本地名称服务器

又称Local DNS, 能够是默认的运营商提供的Local DNS 或者本身设置的DNS。服务器

下图是windows下默认获取的运营商Local DNS或者 本身设置的Local DNS网络

权威DNS

权威 DNS 由域名解析服务商建设,提供域名管理服务,维护域名解析记录。.net

权威 DNS 服务器只对本身所拥有的域名进行域名解析,对于不是本身的域名则拒绝访问。好比,向“example.com”的权威 DNS 服务器查询“test.com”的域名确定会查询失败。代理

递归DNS

递归 DNS 由网络运营商建设,提供域名查询解析服务。递归 DNS 会迭代权威服务器返回的应答,直至最终查询到的 IP 地址,将其返回给客户端,并将请求结果缓存到本地。blog

递归 DNS 的访问过程以下图所示(递归 DNS 在图中表示为 Local DNS):递归

DNS递归解析基本流程

在这个查询过程当中,一直是以本地名称服务器(Local DNS)为中心的,DNS客户端只是发出原始的域名查询请求报文,而后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就至关于中介代理的做用。

(1)客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程彻底同样)发出DNS域名查询请求。get

(2)本地名称服务器收到请求后,先查询本地的缓存,若是有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;若是本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面同样的DNS域名查询请求发给根名称服务器域名

(3)根名称服务器收到DNS请求后,把所查询获得的所请求的DNS域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器。
(4)本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面同样的DNS域名查询请求。

(5)对应的顶级名称服务器在收到DNS查询请求后,也是先查询本身的缓存,若是有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,而后再由本地名称服务器返回给DNS客户端,不然向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址。

而后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。而后再由本地名称服务器返回给DNS客户,同时本地名称服务器会缓存本次查询获得的记录项

递归查询和迭代查询的区别

DNS递归名称解析: 在DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工做是由本地名称服务器替代DNS客户端进行的(以“本地名称服务器”为中心),只须要本地名称服务器向DNS客户端返回最终的查询结果便可。

DNS迭代名称解析:(或者叫“迭代查询”)的全部查询工做所有是DNS客户端本身进行(以“DNS客户端”本身为中心)。在条件之一知足时就会采用迭代名称解析方式:

  • 在查询本地名称服务器时,若是客户端的请求报文中没有申请使用递归查询,即在DNS请求报头部的RD字段没有置1。至关于说“你都没有主动要求我为你进行递归查询,我固然不会为你工做了”。

  • 客户端在DNS请求报文中申请使用的是递归查询(也就是RD字段置1了),但在所配置的本地名称服务器上是禁用递归查询(DNS服务器通常默认支持递归查询的),即在应答DNS报文头部的RA字段置0。

 

 

附:

还有一种说法:DNS客户端和本地名称服务器是递归,而本地名称服务器和其余名称服务器之间是迭代。

哪一个是对的啊?仍是说两个实际上是一个意思??

 

  

参考连接:

1. 简书-DNS解析原理:递归 VS 迭代

2. CSDN-DNS递归查询和迭代查询的区别

相关文章
相关标签/搜索