11.3.7 DNS递归解析原理

“递归解析”(或叫“递归查询”,其实意思是一样的)是最常见,也是默认的解析方式。在这种解析方式中,如果客户端配置的本地名称服务器不能解析的话,则后面的查询全由本地名称服务器代替DNS客户端进行查询,直到本地名称服务器从权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉DNS客户端查询的结果。

1.    DNS递归解析基本流程

在这个查询过程中,一直是以本地名称服务器为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理的作用。如果考虑了本地名称服务器的缓存技术(也就是在DNS服务器上对一定数量的以前查询记录保存一定时间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,则递归解析的基本流程如下:

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

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

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

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

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

2.    DNS递归解析示例

为了方便大家理解,下面举一个实例进行介绍。本示例中假设客户端想要访问自己并不识别的example.microsoft.com站点,并假设此客户端配置的本地名称服务器假设为dns.company.com(通常是以IP地址方式配置的),本地名称服务器上配置的根名称服务器是a.rootserver.net。整个递归名称解析过程如图11-15所示(其中的Q1~Q5表示发送DNS查询请求,A1~A5是DNS查询应答),具体描述如下:

(1)DNS客户端向所配置的本地名称服务器dns.company.com发出解析example.microsoft.com域名的DNS请求报文(图中的Q1)。相当于对本地名称服务器说“请给我example.microsoft.com所对应的IP地址”。

(2)本地名称服务器收到请求后,先查询本地缓存。假设没有查到该域名对应记录,则本地名称服务器向所配置的根名称服务器a.rootserver.net发出解析请求解析example.microsoft.com域名的DNS请求报文(图中的Q2)。

(3)根名称服务器收到查询请求后,通过查询得到.com顶级域名所对应的顶级名称服务器,然后向本地名称服务器返回一条应答报文(图中的A1)。相当说“我不知道example.microsoft.com域名所对应的IP地址,但我现在告诉你.com域名所对应的顶级名称服务器地址”。

图11-15 DNS递归名称解析示例

(4)本地名称服务器在收到根名称服务器的DNS应答报文,得到.com顶级域名所对应的顶级名称服务器地址后,再次向对应的顶级名称服务器发送一条请求解析example.microsoft.com域名的DNS请求报文(图中的Q3)。

(5).com顶级名称服务器在收到DNS请求报文后,先查询自己的缓存,假设也没有该域名的记录项,则查询microsoft.com所对应的二级名称服务器,然后也向本地名称服务返回一条DNS应答报文(图中的A2)。相当于说“我不知道example.microsoft.com域名所对应的IP地址,但我现在告诉你microsoft.com域名所对应的二级名称服务器地址”。

(6)本地名称服务器在收到.com顶级名称服务器的DNS应答报文,得到microsoft.com二级域名所对应的二级名称服务器地址后,再次向对应的二级名称服务器发送一条请求解析example.microsoft.com域名的DNS请求报文(图中的Q4)。

(7)microsoft.com二级名称服务器在收到DNS请求报文后,也先查询自己的缓存,假设也没有该域名的记录项,则查询example.microsoft.com所对应的权威名称服务器(因为这个名称服务器已包括了完整域名example.microsoft.com所在区域),然后也向本地名称服务器返回一条DNS应答报文(图中的A3)。相当于说“我不知道example.microsoft.com域名所对应的IP地址,但我现在告诉你example.microsoft.com域名所对应的权威名称服务器地址”。

(8)本地名称服务器在收到microsoft.com二级名称服务器的DNS应答报文,得到example.microsoft.com三级域名所对应的权威名称服务器地址后,再次向对应的权威名称服务器发送一条请求解析example.microsoft.com域名的DNS请求报文(图中的Q5)。

(9)权威名称服务器在收到DNS请求后,在它的DNS区域数据库中查找,最终得出了example.microsoft.com域名所对应的IP地址。然后向本地名称服务器返回到条DNS应答报文(图中的A4)。相当于说“example.microsoft.com域名的IP地址为xxx.xxx.xxx.xxx”。

(10)本地名称服务器在收到权威名称服务器后,向DNS客户端返回一条DNS应答报文(图中的A5),告诉DNS客户端所得到的example.microsoft.com域名的IP地址。这样DNS客户端就可以正常访问这个网站了。

如果在步骤(9)中的对应域名的权威名称服务器都说找不到对应的域名记录,则会向本地名称服务器返回一条查询失败的DNS应答报文,这条报文最终也会由本地名称服务器返回给DNS客户端。当然,如果这个权威名称服务器上配置了指向其它名称服务器的转发器,则权威名称服务器还会在转发器指向的名称服务器上进一步查询。另外,如果DNS客户端上配置了多个DNS服务器,则还会继续向其它DNS服务器查询的。

11.3.8  DNS迭代名称解析原理

在上节介绍的DNS递归名称解析中,当所配置的本地名称服务器解析不了时,后面的查询工作是由本地名称服务器替代DNS客户端进行的(以“本地名称服务器”为中心),只需要本地名称服务器向DNS客户端返回最终的查询结果即可。而本节所介绍的DNS迭代名称解析(或者叫“迭代查询”)的所有查询工作全部是DNS客户端自己进行(以“DNS客户端”自己为中心)。在条件之一满足时就会采用迭代名称解析方式:

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

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

1.    迭代名称解析的基本流程

使用迭代解析方式时,如果它所配置的主名称服务器(如Windows系统中的“首选DNS服务器”)不能解析的话,客户端还会继续向所配置的其它名称服务器(如Windows系统中的“备用DNS服务器”)查询。迭代名称解析的基本流程如下:

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

(2)本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回一条DNS应答报文,报文中会给出一些参考信息,如本地名称服务器上的根名称服务器地址等。

(3)DNS客户端在收到本地名称服务器的应答报文后,会根据其中的根名称服务器地址信息,向对应的根名称服务器再次发出与前面一样的DNS查询请求报文。
  (4)根名称服务器在收到DNS查询请求报文后,通过查询自己的DNS数据库得到请求DNS域名中顶级域名所对应的顶级名称服务器信息,然后以一条DNS应答报文返回给DNS客户端。

(5)DNS客户端根据来自根名称服务器应答报文中的对应顶级名称服务器地址信息,向该顶级名称服务器发出与前面一样的DNS查询请求报文。

(6)顶级名称服务器在收到DNS查询请求后,先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给DNS客户端,否则通过查询后把对应域名中二级域名所对应的二级名称服务器地址信息以一条DNS应答报文返回给DNS客户端。

然后DNS客户端继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的权威名称服务器返回到最终的记录。

2. DNS迭代解析示例

同样,为了方便大家理解,也例举一个具体的示例,看一下DNS迭代解析的工作流程。本示例也与上节介绍的DNS递归解析一样,假设客户端想要访问自己并不识别的example.microsoft.com站点,并假设此客户端配置的本地名称服务器假设为dns.company.com(仅以一个为例进行介绍),在该本地名称服务器上配置的根名称服务器是a.rootserver.net。整个迭代名称解析过程如图11-16所示(其中的Q1~Q5表示发送DNS查询请求,A1~A5是对应序号DNS查询请求的应答),具体描述如下:

图11-16 DNS迭代名称解析示例

(1)DNS客户端向所配置的本地名称服务器dns.company.com发出解析example.microsoft.com域名的DNS请求报文(图中的Q1)。

(2)本地名称服务器收到DNS客户端的DNS查询请求报文后,先查询本地缓存。假设没有查到该域名对应记录,则本地名称服务器把所配置的根名称服务器a.rootserver.net地址信息以DNS应答报文返回给DNS客户端(图中和A1)。

(3)DNS客户端在收到本地名称服务器的DNS应答报文后,根据其中给出的根名称服务器地址信息,向对应的根名称服务器再次发送解析example.microsoft.com域名的DNS请求报文(图中的Q2)。

(4)根名称服务器在收到DNS查询请求后,通过查询得到.com顶级域名所对应的顶级名称服务器,然后把查询到的对应顶级域名信息以一条DNS应答报文返回给DNS客户端(图中的A2)。

(5)DNS客户端在收到根名称服务器的DNS应答报文,得到.com顶级域名所对应的顶级名称服务器地址后,再次向对应的顶级名称服务器发送一条解析example.microsoft.com域名的的DNS请求报文(图中的Q3)。

(6).com顶级名称服务器在收到DNS客户端的DNS查询请求报文后,先查询自己的缓存,假设也没有该域名的记录项,则查询microsoft.com所对应的二级名称服务器,然后把查询到的对应二级域名信息以一条DNS应答报文返回给DNS客户端(图中的A3)。

(7)DNS客户端在收到.com顶级名称服务器的DNS应答报文,得到microsoft.com二级域名所对应的二级名称服务器地址后,再次向对应的二级名称服务器发送一条解析example.microsoft.com域名的DNS请求报文(图中的Q4)。

(8)microsoft.com二级名称服务器在收到DNS客户端的DNS查询请求报文后,也先查询自己的缓存,假设也没有该域名的记录项,则查询example.microsoft.com所对应的权威名称服务器(因为这个名称服务器已包括了整个域名example.microsoft.com所在区域),然后把查询到的对应权威域名信息以一条DNS应答报文返回给DNS客户端(图中的A5)。

(9)DNS客户端在收到microsoft.com二级名称服务器的DNS应答报文,得到example.microsoft.com三级域名所对应的权威名称服务器地址后,再次向对应的权威名称服务器发送解析example.microsoft.com域名的DNS请求报文(图中的Q5)。

(10)权威名称服务器在收到DNS客户端的DNS查询请求报文后,在它的DNS区域数据库中查找,最终得出了example.microsoft.com域名所对应的IP地址。然后向DNS客户端返回一条DNS应答报文(图中的A5)。这样DNS客户端就可以正常访问这个网站了。

如果在步骤(10)中的对应域名的权威名称服务器都说找不到对应的域名记录,则会向DNS客户端返回一条查询失败的DNS应答报文。当然,如果这个权威名称服务器上配置了指向其它名称服务器的转发器,则权威名称服务器还会在转发器指向的名称服务器上进一步查询。另外,如果DNS客户端上配置了多个DNS服务器,则还会继续向其它DNS服务器查询的。

dd

DNS递归和迭代原理的更多相关文章

  1. DNS 递归/迭代 原理

    递归查询 递归:客户端只发一次请求,要求对方给出最终结果.一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结 ...

  2. 详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105583806 学习课程:<2019王道考研计算机网络> 学习目的 ...

  3. DNS查询的工作原理

    二.DNS查询的工作原理 1.DNS查询过程按两部分进行     1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析     2.如果不能再本机解析查询, 可根据设定的查询DN ...

  4. DNS递归查询与迭代查询

    注:一般TCP/IP的应用层或者OSI的会话.表示.应用层把数据称为数据或者信息,到了传输层把数据称为报文,到了最底层就是比特流了也就是字节流 DNS递归查询与迭代查询   基础知识 1.域名系统 2 ...

  5. Windows下DNS ID欺骗的原理与实现

    域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息.通常,网络用户通过UDP协议和DNS服务器进行通信,而服务器在特定的53端口监听,并返回用户所需 ...

  6. 关于dns服务工作的原理,和配置的细节理解。

    dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...

  7. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...

  8. C自学笔记-递归与迭代的使用方法笔记与两者的使用场合

    递归和迭代在刚开始学C语言的时候就学过,但是不知道怎么使用.今天遇到一个题目分析过后 我瞬间想起来之前学过递归的方法,做完题后顺便翻了翻书整理了这个笔记.题目大概是这样的. 题目:猴子吃桃问题:猴子第 ...

  9. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的遍历: 先序,中序,后序: 二叉树的遍历有三种常见的方法, 最简单的实现就是递归调用, 另外就是飞递归的迭代调用, 最后还有O(1)空间的morris遍历: 二叉树的结构定义: struct ...

随机推荐

  1. div+css模式编写html静态网页例子_仿照网页制作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. SRM 391(1-250pt)

    DIV1 250pt 题意:给两个'a'-'z'的字符串,是否存在一个'a'-'z'的置换,使得能将一个字符串转化成另一个字符串. 解法:题意即是求,s1和s2对应位置出现的字符在原字符串中出现的次数 ...

  3. 理解RESTful架构(转)

    理解RESTful架构   作者: 阮一峰 http://www.ruanyifeng.com/blog/2011/09/restful 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这 ...

  4. python环境配置selenium与IE、Chrome、Firefox、PhantomJS

    安装.升级selenium pip install -U selenium 下载对应平台最新版的browser driver chrome: http://chromedriver.storage.g ...

  5. FreeRTOS学习笔记——任务间使用队列同步数据

    1.前言 在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分.FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用. 2.参考代 ...

  6. 如何由XSD自动生成XML和实体类

    项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后 ...

  7. poj2239 Selecting Courses --- 二分图最大匹配

    匈牙利算法模板题 有n门课程,每门课程可能有不同一时候间,不同一时候间的课程等价. 问不冲突的情况下最多能选多少门课. 建立二分图,一边顶点表示不同课程,还有一边表示课程的时间(hash一下). #i ...

  8. RJ45口线序的理解

    RJ45线序就是TX_P / TX_N / RX_P / RX_N 四根线,分别用到的是1,2,3,6 因为TX要匹配RX,所以 线1 变成 另一端的 线3, 线2 变成 另一端的 线6 反过来也一样

  9. POJ 2653 Pick-up sticks (判断线段相交)

    Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10330   Accepted: 3833 D ...

  10. AS Gradle构建工具与Android plugin插件【大全】

    Android plugin version 与 gradle version 的关系 Gradle是一种构建工具,它通过编写一个名为build.gradle的脚本文件对项目进行设置,再根据这个脚本对 ...