名词分析
- 域名:`www.google.com`
- 客户端配置的本地名称服务器:`dns.google.com`
- 域名根目录名称服务器`a.rootserver.net`
- 主要角色
- DNS 客户 -> `DNS 客户`
- 本地名称服务器 -> `Local DNS`
- 根名称服务器 ->`.`
- 一级(顶级)名称服务器 -> `com`
- 二级名称服务器 -> `google.com`
- 权威名称服务器 -> `www.google.com`
基本
DNS,即域名系统,是互联网上用于域名和 IP 地址相互映射的分布式数据库。它是一个以树形结构记录和映射域名和 IP 地址的分布式系统。DNS 查询使用 UDP 协议。
为什么需要DNS?因为终端之间的数据交互是通过IP地址来定位目标的,比如192.168.8.8。由于不规则的IP地址不容易被人记住,所以一般会使用域名地址来代替IP地址进行搜索。但实际上终端之间的访问,最终都是通过域名地址映射来获取IP地址的。
用户习惯使用域名地址访问终端,当浏览器发送请求时,操作系统会通过DNS查询该域名地址对应的IP地址,查询成功后,操作系统就会通过IP地址访问终端,获取资源。
域名DNS名称服务器查询都是从根开始,按照从右到左的顺序进行的。
通常情况下,主机一般使用递归查询来查询本地名称服务器,本地名称服务器则使用迭代查询来查询DNS(主、辅、三级……)名称服务器。
查询主机的DNS主要有两种方式,递归查询和迭代查询,主要区别在于:
递归查询以本地名称服务器为中心,DNS客户端只发送原始域名查询请求报文,然后等待本地名称服务器发送最终的查询结果,此时本地名称服务器相当于一个中介代理的角色。
递归查询触发条件:1、默认触发;2、RD设置为1才触发;
迭代查询是以DNS客户端本身为中心,所有的查询工作都由DNS客户端自己完成。DNS客户端会依次向本地名称服务器、主名称服务器、辅助名称服务器、权威名称服务器发送DNS查询请求信息。在这个过程中,每一级服务器都会返回一个可以回答本次查询的下一个名称服务器的列表A。DNS客户端在获得下一个查询列表信息A之后,会再次向返回的列表A发送请求,直到找到最终负责所查询域名的名称服务器并从中获取最终结果。
迭代查询的触发条件:1、在配置的本地名称服务器上查询时触发(因为本地名称服务器禁止使用递归查询);2、通过将RD设置为0来触发;
递归查询和迭代查询从主域名服务器到权威域名服务器的步骤类似,主要区别在于递归查询以本地名称服务器为中心,而迭代查询以DNS客户端本身为中心。
DNS 迭代查询
迭代查询,又称迭代解析。采用迭代解析时,所有查询工作都由DNS客户端自己完成,如果其配置的主域名服务器(如系统中的首选DNS服务器)无法解析,则客户端会继续查询其他配置的域名服务器(如系统中的备份DNS服务器)。
如果考虑到本地名称服务器的缓存技术(在DNS服务器上保存一定数量的查询记录一段时间,以便后续查询时可以直接从缓存中获取相同的域名信息,加快查询效率),迭代名称解析的基本过程如下(这里仅以第一台DNS服务器作为本地名称服务器为例,其他备用DNS服务器的解析过程完全相同):
DNS客户端向本机配置的本地名字服务器发送DNS域名查询请求。
本地名称服务器收到请求后,首先查询本地缓存,如果有该域名的记录,则直接将查询结果返回给客户端;如果本地缓存中没有该域名的记录,则向DNS客户端返回DNS响应报文,该报文中会提供一些参考信息,比如本地名称服务器上的根名称服务器地址等。
DNS客户端收到本地名称服务器的应答报文后,会根据根名称服务器地址信息,再次向对应的根名称服务器发送相同的DNS查询请求报文。
根名称服务器收到DNS查询请求报文后,通过查询自己的DNS数据库,获得所请求的DNS域名中的顶级域名对应的顶级名称服务器信息,然后在DNS响应报文中返回给DNS客户端。
DNS客户端根据根名称服务器回复报文中对应的顶级名称服务器地址信息,向顶级名称服务器发送与之前相同的DNS查询请求报文。
顶级名称服务器接收到DNS查询请求后,首先查询自己的缓存,如果存在所请求的DNS域名的记录项,则直接将对应的记录项返回给DNS客户端;否则,查询后在DNS响应报文中将对应域名中二级域名对应的二级名称服务器地址信息返回给DNS客户端。
DNS客户端分别按照步骤5、6的方法继续向三级和四级名称服务器进行查询,直到找到最终的权威名称服务器并返回最终的记录。
如果相应域名的权威名称服务器在上述步骤中表示找不到相应的域名记录,则会返回 DNS 响应消息,表示查询未找到 DNS 客户端。当然,如果权威名称服务器配置了指向其他名称服务器的转发器,权威名称服务器还会进一步重复上述步骤,在转发器指向的名称服务器上进行查询。另外,如果 DNS 客户端上配置了多个 DNS 服务器,则会继续查询其他 DNS 服务器。
这里的DNS搜索基本可以得到域名对应的IP,除非要搜索的域名没有配置的IP,那么查询失败。
DNS 迭代查询 - 示例
为了方便理解,我们通过一个具体的例子来看一下DNS迭代解析的工作流程:
DNS客户端向配置的本地名字服务器发送DNS请求报文,进行域名解析。
本地名称服务器收到客户端的DNS查询请求报文后,首先在本地缓存中查询,如果没有查询到该域名对应的记录,则在DNS应答报文中向DNS客户端返回配置的根名称服务器地址信息。
DNS客户端收到本地名称服务器的DNS应答报文后,根据报文中给出的根名称服务器地址信息,再次向相应的根名称服务器发送DNS请求报文来解析域名。
根名称服务器接收到DNS查询请求后,通过查询获得.com顶级域名对应的顶级名称服务器,然后将查询得到的对应顶级域名信息在DNS响应报文中返回给DNS客户端。
DNS客户端收到根名字服务器的DNS应答报文,获得.com顶级域名对应的顶级名字服务器的地址后,再次向对应的顶级名字服务器发送DNS请求报文,进行域名解析。
.com顶级域名服务器收到DNS客户端的DNS查询请求报文后,首先查询自己的缓存,如果没有该域名的记录条目,则查询相应的二级域名服务器,并在DNS响应报文中将相应的二级域名信息返回给DNS客户端。
DNS客户端收到.com顶级名称服务器的DNS应答报文,获得该二级域名对应的二级名称服务器地址后,再次向对应的二级名称服务器发送DNS请求报文,对该域名进行解析。
辅助名称服务器收到DNS客户端的DNS查询请求报文后,首先查询自己的缓存,假设没有该域名的记录条目,则向相应的权威名称服务器进行查询(因为此名称服务器已经包含了整个域名区域),然后以DNS响应报文的形式将相应的权威域名信息返回给DNS客户端。
DNS客户端收到二级域名服务器的DNS应答报文,获得该三级域名对应的权威域名服务器的地址后,再次向对应的权威域名服务器发送DNS请求报文,对该域名进行解析。
权威域名服务器收到DNS客户端的DNS查询请求消息后,在其DNS区域数据库中进行查找,最终得到该域名对应的IP地址,并向DNS客户端返回DNS响应消息,这样DNS客户端在得到IP地址后就可以正常访问网站了。
DNS 递归查询
递归查询(递归解析)是默认的DNS解析方式,这种解析方式下,如果客户端配置的本地名称服务器遇到无法解析的名称,那么后续的查询将由本地名称服务器代替DNS客户端进行查询,直到本地名称服务器从权威名称服务器获得正确的解析结果,然后本地名称服务器将查询结果告诉DNS客户端。
在递归查询过程中,本地名称服务器始终是中心,DNS客户端只发送原始域名查询请求报文,然后等待本地名称服务器返回最终的查询结果,此时本地名称服务器相当于一个中介代理的角色。
如果考虑到本地名称服务器的缓存技术(在DNS服务器上保存一定数量的查询记录一定时间,以便后续查询时可以直接从缓存中获取相同的域名信息,加快查询效率),递归解析的基本过程如下(这里仅以第一台DNS服务器作为本地名称服务器为例,其他备用DNS服务器的解析过程完全相同):
客户端向本机配置的本地名称服务器发送DNS域名查询请求。
本地名称服务器收到请求后,首先查询本地缓存,如果有该域名的记录,则直接将查询结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器以DNS客户端的身份向根名称服务器发送与之前相同的DNS域名查询请求。
根名称服务器接收到DNS请求后,向本地名称服务器返回该请求的DNS域名中的顶级域名对应的顶级名称服务器地址。
本地名称服务器根据根名称服务器返回的顶级名称服务器地址,向对应的顶级名称服务器发送与之前相同的DNS域名查询请求。
顶级名称服务器收到DNS查询请求后,也会先查询自己的缓存,如果有所请求的DNS域名的记录项,则直接将对应的记录项返回给本地名称服务器,本地名称服务器再返回给DNS客户端;否则,将所请求的DNS域名中的二级域名对应的二级名称服务器地址返回给本地名称服务器。
本地名称服务器根据根名称服务器返回的辅助名称服务器地址,向相应的辅助名称服务器发送与之前相同的DNS域名查询请求。
二级名称服务器收到DNS查询请求后,同样先查询自己的缓存,如果有所请求的DNS域名的记录项,则直接将对应的记录项返回给本地名称服务器,本地名称服务器再返回给DNS客户端;否则,将所请求的DNS域名中的三级域名对应的三级名称服务器地址返回给本地名称服务器。
如此反复,本地名称服务器重复第6、7步,向三级、四级名称服务器进行查询,直到该域名所在地区的权威名称服务器将最终的记录返回给本地名称服务器。
本地名称服务器再将其返回给DNS客户端,本地名称服务器缓存本次查询所得到的记录项。
如果相应域名的权威名称服务器在上述步骤中表示找不到相应的域名记录,则会返回 DNS 响应消息,表示查询未找到 DNS 客户端。当然,如果权威名称服务器配置了指向其他名称服务器的转发器,权威名称服务器还会进一步重复上述步骤,在转发器指向的名称服务器上进行查询。另外,如果 DNS 客户端上配置了多个 DNS 服务器,则会继续查询其他 DNS 服务器。
简单来说,递归查询的步骤;
客户端向本机配置的本地名称服务器发送DNS域名查询请求。发送请求后,客户端处于等待状态,等待本地名称服务器返回查询结果。本地名称服务器收到DNS请求后,先查询本地缓存,若发现域名记录存在,则立即返回结果,否则,本地名称服务器会继续向DNS名称服务器发送DNS请求查询,直至找到该域名对应的权威名称服务器,并获取记录结果。本地名称服务器解析结果后,将结果返回给客户端。DNS递归查询-示例
为了方便理解,我们通过一个具体的例子,看一下DNS递归解析的工作流程:
DNS客户端向配置的本地名字服务器发送DNS请求报文,进行域名解析。
本地名称服务器接到请求后,首先查询本地的缓存,如果没有查询到该域名对应的记录,则本地名称服务器向配置的根名称服务器发送DNS请求报文,请求解析该域名(相当于对本地名称服务器说:“请给我对应的IP地址”)。
根名称服务器接收到客户端的DNS查询请求报文后,通过查询获得.com顶级域名对应的顶级名称服务器,然后向本地名称服务器返回响应报文(相当于说“我不知道域名对应的IP地址,但是我现在告诉你.com域名对应的顶级名称服务器的地址”)。
本地名称服务器收到根名称服务器的DNS应答报文,获得.com顶级域名对应的顶级名称服务器的地址后,再次向对应的顶级名称服务器发送DNS请求报文,请求进行域名解析。
.com顶级名称服务器收到DNS请求报文后,首先查询自己的缓存,假设没有该域名的记录条目,则查询相应的二级名称服务器,然后向本地名称服务返回DNS响应报文(相当于对本地名称服务器说:“我不知道该域名对应的IP地址,但是我现在告诉你该域名对应的二级名称服务器的地址。”)。
本地名称服务器收到.com顶级名称服务器的DNS应答报文,获得该二级域名对应的二级名称服务器的地址后,再次向对应的二级名称服务器发送DNS请求报文,请求进行域名解析。
二级域名服务器收到DNS请求消息后,首先查询自己的缓存,假设没有该域名的记录,则查询相应的权威域名服务器,然后向本地域名服务器返回DNS响应消息(相当于本地域名服务器说“我不知道该域名对应的IP地址,但是我现在告诉你该域名对应的权威域名服务器的地址”)。
本地名称服务器收到二级名称服务器的DNS应答报文,获得该三级域名对应的权威名称服务器的地址后,再次向对应的权威名称服务器发送DNS请求报文,请求域名解析。
”权威名称服务器收到DNS请求后,搜索其DNS区域数据库,最终获得该域名对应的IP地址。然后向本地名称服务器返回DNS响应消息(相当于告诉本地名称服务器:“该域名的IP地址是xxx.xxx.xxx.xxx”)。
本地名称服务器收到权威名称服务器的回复消息后,向DNS客户端返回DNS回复消息,告诉DNS客户端获取到的域名的IP地址,这样DNS客户端就可以正常访问网站了。
PS:DNS是基于UDP查询的,大家可能也会想为什么之前没有考虑用TCP来实现。
相关文献
扫一扫在手机端查看
-
Tags : 域名查询网站入口_DNS递归查询与迭代查询的详细流程
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。