“递归解析”(或叫“递归查询”,其实意思是一样的)是最常见,也是默认的解析方式。在这种解析方式中,如果客户端配置的本地名称服务器不能解析的话,则后面的查询全由本地名称服务器代替DNS客户端进行查询,直到本地名称服务器从权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉DNS客户端查询的结果。
DNS递归解析基本流程
在这个查询过程中,一直是以本地名称服务器为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理的作用。如果考虑了本地名称服务器的缓存技术(也就是在DNS服务器上对一定数量的以前查询记录保存一定时间(即设置的TTL时间,以秒为单位),这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,则递归解析的基本流程如下:
————————————————
(1)客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求。
(2)本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面一样的DNS域名查询请求发给根名称服务器。
(3)根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中*域名所对应的*名称服务器地址返回给本地名称服务器。
(4)本地名称服务器根据根名称服务器所返回的*名称服务器地址,向对应的*名称服务器发送与前面一样的DNS域名查询请求。
(5)对应的*名称服务器在收到DNS查询请求后,也是先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给DNS客户端,否则向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址。
然后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。然后再由本地名称服务器返回给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域名所对应的*名称服务器地址”。
图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服务器查询的。
————————————————