DNS解析原理:递归 VS 迭代

DNS解析原理:递归 VS 迭代,第1张

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

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

下图是windows下默认获取的运营商Local DNS或者 自己设置的Local DNS

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

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

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

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

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

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

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

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

通过看看他们的不同:

权威 DNS 是特定域名记录(例如“examplecom”)在域名注册商处所设置的 DNS 服务器,用于特定域名本身的管理(增加、删除、修改等)。

权威 DNS 服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝访问。比如,向“examplecom”的权威 DNS 服务器查询“testcom”的域名肯定会查询失败。

递归 DNS(也称本地 DNS 或者缓存 DNS)用于域名查询。递归 DNS 会迭代权威服务器返回的应答,直至最终查询到的 IP 地址,将其返回给客户端,并将请求结果缓存到本地。

对用户发出的域名解析请求,递归 DNS 必须给出一个最终的 IP 地址结果。完整的递归DNS 查询流程需要 DNS 服务器从根域名 “” 服务器,顶级域名服务器(例如“com”),一级域名服务器(例如“examplecom”)等一级一级递归查询,直到最终找到权威服务器取得结果,并返回给客户。同时,递归服务器根据域名 TTL,缓存查询结果,便于相同域名重复查询。
递归 DNS 服务器大多数在运营商端,负责网络接入终端的 DNS 查询,即网络访问设备上配置的 DNS 服务器 IP。

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

>RedHat-Linux服务器搭建DNS服务器;\x0d\DNS domain name system 域名系统\x0d\特点:(1)具备递归查询和迭代查询\x0d\(2)分布式数据库\x0d\(3)将域名解析为IP\x0d\(4)具有主DNS服务器、辅DNS服务器和缓存DNS服务器三种类型\x0d\(5)全球13台根域服务器\x0d\\x0d\以下是搭建步骤:\x0d\1、准备软件包\x0d\bindi386 --主服务软件包 \x0d\bind-chrooti386 -- 笼环境软件包 \x0d\bind-develi386 --开发包\x0d\bind-libsi386 --库文件\x0d\bind-utilsi386 --工具包\x0d\[root@rootbug ~]# rpm -qa |grep ^bind- --rhel63下的包\x0d\bind-utils-982-010rc1el6x86_64\x0d\bind-chroot-982-010rc1el6x86_64\x0d\bind-libs-982-010rc1el6x86_64\x0d\bind-982-010rc1el6x86_64\x0d\bind-dyndb-ldap-110-09b1el6x86_64\x0d\-------------看到软件包有点纠结,为啥呢??因为这些软件包的名字跟DNS这三个词每半点关系---------\x0d\2、安装软件包\x0d\[root@rootbug ~]#yum install bind -y\x0d\3、查看配置文件\x0d\RHEL6下不管是安装了bind-chroot还是不安装,配置文件都是以/var/namedconf文件为主。\x0d\(1)修改/etc/namedconf\x0d\[root@rootbug ~]#vim /etc/namedconf\x0d\-------省略其他万行代码----------------\x0d\\x0d\options {\x0d\listen-on port 53 { any; }; --将原配置文件中的127001改为any,表示监听所有\x0d\listen-on-v6 port 53 { ::1; };\x0d\directory "/var/named"; --域的数据文件存放目录\x0d\dump-file "/var/named/data/cache_dumpdb"; \x0d\statistics-file "/var/named/data/named_statstxt";\x0d\memstatistics-file "/var/named/data/named_mem_statstxt";\x0d\allow-query { any; }; --将配置文件的localhost改为any,表示所有人能查询这台服务器\x0d\recursion yes;\x0d\\x0d\-------省略其他万行代码----------------\x0d\修改之后保存退出\x0d\(2)配置/etc/namedrfc1912zones,增加域的配置\x0d\[root@rootbug ~]#vim /etc/namedrfc1912zones\x0d\按照配置文件格式添加一个域,这里我添加一个rootbugcom的域,域的数据文件放在directory "/var/named"当前目录下的data下,名称为:masterrootbugcomzone。配置域时请注意“;”分号。\x0d\zone "rootbugcom" IN {\x0d\type master;\x0d\file "data/masterrootbugcomzone";\x0d\};\x0d\配置好之后保存退出。\x0d\(3)创建masterrootbugcomzone的数据文件\x0d\[root@rootbug ~]#vim /var/named/data/masterclustercomzone\x0d\$TTL 3600\x0d\@ IN SOA rootbug zhangsan (\x0d\2013090801 --版本号,下面的是各种时间,作用是主从DNS服务器的同步时间\x0d\30\x0d\60\x0d\90\x0d\3600 )\x0d\IN NS 172162151 --这里就是DNS服务器的IP(实际应该是公网IP,但这里是内网环境,所以写的内网IP),但是ip地址最后还有一个“”记得加点,也可以写DNS服务器的外网域名;并且这里可以写多个NS,代表了你公司的多台DNS服务器\x0d\mail IN A 1111 --A记录就是真正的数据,这里代表mailrootbugcom的公网地址为1111\x0d\dns IN A 172162151\x0d\bbs IN A 2222\x0d\\x0d\保存退出\x0d\(4)启动DNS服务器\x0d\[root@rootbug ~]#/etc/initd/named start ----第一次配置开启过程需要等待一段时间\x0d\(5)客户端认证DNS服务器是否正确\x0d\windows客户端认证\x0d\在IP配置DNS栏中将首选DNS填写为172162151即可\x0d\Microsoft Windows XP [版本 512600]\x0d\(C) 版权所有 1985-2001 Microsoft Corp\x0d\\x0d\C:\Documents and Settings\ruutbug>nslookup mailrootbugcom\x0d\ Can't find server name for address 172162151: Server failed\x0d\ Default servers are not available\x0d\Server: UnKnown\x0d\Address: 172162151\x0d\\x0d\Name: mailrootbugcom\x0d\Address: 1111\x0d\C:\Documents and Settings\ruutbug>nslookup dnsrootbugcom\x0d\ Can't find server name for address 172162151: Server failed\x0d\ Default servers are not available\x0d\Server: UnKnown\x0d\Address: 172162151\x0d\\x0d\Name: dnsrootbugcom\x0d\Address: 172162151\x0d\C:\Documents and Settings\ruutbug>nslookup bbsrootbugcom\x0d\ Can't find server name for address 172162151: Server failed\x0d\ Default servers are not available\x0d\Server: UnKnown\x0d\Address: 172162151\x0d\\x0d\Name: bbsrootbugcom\x0d\Address: 2222

客户端按理论上是先把请求迭代给自己的dns服务器,然后就什么都不管了等信了
然后自己的dns服务器进行递归查询,理论上是把你请求发送给根dns服务器(就是)
但实际上根dns是不会去处理这种小的查询的(因为会太多),所以实际上你的dns服务器会有设置
dns转发的,会发放给像电信或者网通之类的dns服务器
查询规则是根据域名查询
利于>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12675773.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存