例说DNS递归/迭代名称解析原理

简介:

以下内容摘自笔者最新年度巨作,广受好评的——《深入理解计算机网络书中。本书详细内容及读者评价可从这里了解:http://item.jd.com/11165825.htmlhttp://product.dangdang.com/23166396.html

另外,笔者最新的网络设备四大金刚图书在京东网、当当网、卓越网、互动出版网等全面热销中,详情点击:http://item.jd.com/11299332.html(京东网上购买此套装,7折促销中,还折后再减30元,7折活动可能随时结束),http://book.dangdang.com/20130730_aife当当网上购买此套装直减30元


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域名所对应的顶级名称服务器地址”。
10659021_1379292178QkLq.jpg

图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查询请求的应答),具体描述如下:
10659021_1379292200BKjO.jpg

图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服务器查询的。

本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/1297540如需转载请自行联系原作者


茶乡浪子

相关文章
|
10月前
|
域名解析 存储 网络协议
域名解析的终极指南:从基础到进阶,彻底搞懂 DNS 记录
域名解析是网站运行的基础,正确配置DNS记录至关重要。本文从基础到进阶全面解析DNS知识,涵盖A、AAAA、CNAME、MX、TXT、CAA等常见记录类型及其应用场景。通过学习,你将了解DNS的工作原理,掌握如何优化域名配置,确保网站与邮件服务高效运行。无论搭建个人博客还是企业官网,本文都能助你轻松搞定域名解析!
2331 0
|
9月前
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
970 2
|
11月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
11月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
732 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
11月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
1352 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
9月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
2569 0
|
11月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
871 2
|
11月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
12月前
|
负载均衡 网络协议 容灾
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
【飞天技术沙龙】云解析 DNS 上海站《多云+IDC 融合场景下的 DNS 最佳实践》圆满落幕
283 0
|
11月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1057 29

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS