您的位置  > 互联网

名词解析基础知识,DNS查询使用UDP协议的触发条件

- 域名:`www.google.com`
- 客户端配置的本地名称服务器:`dns.google.com`
- 域名根目录名称服务器`a.rootserver.net`
- 主要角色
  - DNS 客户 -> `DNS 客户`
  - 本地名称服务器 -> `Local DNS`
  - 根名称服务器 ->`.`
  - 一级(顶级)名称服务器 -> `com`
  - 二级名称服务器 -> `google.com`
  - 权威名称服务器 -> `www.google.com`

基础知识

DNS,Name/ Name ,是一个面向互联网的分布式数据库,将域名和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客户端。

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响应报文,并获取.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域名中的-level域名被返回到本地名称服务器。

本地域名服务器根据根域名服务器返回的二级域名服务器地址,向对应的二级域名服务器发送与之前相同的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。

相关文献