DNS查询的两种方式:递归查询和迭代查询

发布时间 2023-12-31 14:34:50作者: .dier

1、递归解析 当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式,如图所示的是递归方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。

2、迭代解析 当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析,如图所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。也就是说,迭代解析只是帮你找到相关的服务器而已,而不会帮你去查。比如说:baidu.com的服务器ip地址在192.168.4.5这里

以上两种方式,在实际场景下都不会单独存在;
常见的场景是,当所有DNS服务器都没有缓存时候,客户端向本地DNS服务器请求,本地DNS向根服务器、顶级域名服务器、权威DNS服务器分别请求,拿到相应A记录后,本地DNS服务器把A记录响应给客户端,并将A记录缓存到本地;(这个就是一次递归,多次迭代,见下图;1&8是递归查询、2-7是迭代查询)

另一种常见的场景是,当本地DNS服务器没有缓存,但是上游某个DNS服务器有缓存,且本地DNS配置了递归解析功能,该DNS请求会转发给上游DNS服务器,如果上游DNS服务器本地存在缓存,则直接返回缓存给本地DNS服务器/LDNS,如果没有命中缓存且也配置了递归解析功能,会将该DNS请求再转发给上游的DNS服务器,一级一级的转发上去,直到命中某个上游DNS服务器的缓存,然后逐级返回解析记录,并在缓存中添加该记录。

最上边两种模式介绍可以帮助我们了解什么是递归查询(当LDNS收到客户端的DNS请求之后,本地DNS记录或者缓存中没有,就向上游查询,上游也会向上上游查询,直到缓存命中或查到具体信息,然后再逐级返回解析记录,一定返回一个具体的结果/IP地址给客户端)和什么是迭代查询(当LDNS收到客户端的DNS请求之后,会直接向根服务器查询,根服务器不会返回具体信息,而是返回一个NS记录,指向到顶级域名服务器;LDNS服务器再向顶级域名服务器查询,顶级域名服务器也不会返回具体信息,也是返回一个NS记录,指向到该域名的权威域名服务器;LDNS再向权威域名服务器查询,然后查到相应的A记录,最后LDNS将该A记录返回客户端并添加缓存),但是实际环境中不会单独存在,接下来说说具体看法。

递归查询,说它不会单独存在,是因为我没有遇到过,这个说服力并不强。可以帮忙指正,多谢。

迭代查询,说它不会单独存在,是因为没有哪家企业会允许自己的真实服务器不断的尝试访问外部的DNS,都是依靠LDNS解析完成之后,将A记录缓存到本地,内网真实服务器想LDNS进行域名解析请求。所有内网服务器具有公网访问权限,是不符合安全管理规范的。

参考链接:https://cloud.tencent.com/developer/article/2166580