DNS递归和迭代原理
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递归和迭代原理的更多相关文章
- DNS 递归/迭代 原理
递归查询 递归:客户端只发一次请求,要求对方给出最终结果.一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结 ...
- 详解DNS域名解析系统(域名、域名服务器[根、顶级、授权/权限、本地]、域名解析过程[递归与迭代])
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105583806 学习课程:<2019王道考研计算机网络> 学习目的 ...
- DNS查询的工作原理
二.DNS查询的工作原理 1.DNS查询过程按两部分进行 1.名称查询从客户端计算机开始, 并传送给本机的DNS客户服务程序进行解析 2.如果不能再本机解析查询, 可根据设定的查询DN ...
- DNS递归查询与迭代查询
注:一般TCP/IP的应用层或者OSI的会话.表示.应用层把数据称为数据或者信息,到了传输层把数据称为报文,到了最底层就是比特流了也就是字节流 DNS递归查询与迭代查询 基础知识 1.域名系统 2 ...
- Windows下DNS ID欺骗的原理与实现
域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息.通常,网络用户通过UDP协议和DNS服务器进行通信,而服务器在特定的53端口监听,并返回用户所需 ...
- 关于dns服务工作的原理,和配置的细节理解。
dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...
- 二叉树的遍历(递归,迭代,Morris遍历)
二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...
- C自学笔记-递归与迭代的使用方法笔记与两者的使用场合
递归和迭代在刚开始学C语言的时候就学过,但是不知道怎么使用.今天遇到一个题目分析过后 我瞬间想起来之前学过递归的方法,做完题后顺便翻了翻书整理了这个笔记.题目大概是这样的. 题目:猴子吃桃问题:猴子第 ...
- 二叉树的遍历(递归,迭代,Morris遍历)
二叉树的遍历: 先序,中序,后序: 二叉树的遍历有三种常见的方法, 最简单的实现就是递归调用, 另外就是飞递归的迭代调用, 最后还有O(1)空间的morris遍历: 二叉树的结构定义: struct ...
随机推荐
- C++中delete和 delete[]的区别
总的原则是,如果是用new[]创建的,则用delete[]删除,如果是用new创建的,则用delete删除. 对于基本类型,比如char *p=new char[20];如果删除时,delete p和 ...
- JAVA工程师面试总结
HR面: 你为什么要离职?如果是公司层面的,公司为什么要这么做? 你的理想薪资?你觉得你有什么优势胜任你应聘的工作? 你的未来发展规划? BOSS面: 项目的东西,hibernate调优?使用了什么数 ...
- SRM 504(2-1000pt)
DIV2 1000pt 题意:对于一个n*m的矩阵,每个格子都有一个颜色B或者W.对矩阵A执行以下程序后变成矩阵B.给出矩阵B,求A.(若有多种情况,输出字典序最小的).(n,m <= 16) ...
- hdu 4619 二分图最大匹配 ——最大独立集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4619 #include <cstdio> #include <cmath> # ...
- ubuntu12编译openwrt
搭建编译环境 Ubuntu x64 12.04下的命令: sudo apt-get install subversion sudo apt-get install git sudo apt-get i ...
- Python随机生成验证码的两种方法
Python随机生成验证码的方法有很多,今天给大家列举两种,大家也可以在这个基础上进行改造,设计出适合自己的验证码方法方法一:利用range Python随机生成验证码的方法有很多,今天给大家列举两种 ...
- 15、Cocos2dx 3.0游戏开发找小三之Sprite:每一个精灵都是上辈子折翼的天使
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30475395 Sprite Sprite 能够说是 ...
- JAVA中的继承和覆盖
java里面的继承是子类继承父类的一些方法和属性(除private属性和方法之外):对于父类的私有属性和方法子类是没有继承的.可是要想子类也能訪问到父类的私有属性,必须给私有属性以外界訪问的方法接口. ...
- C++中模板类使用友元模板函数
在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...
- [转] Java中ArrayList类的用法
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...