DNS客户端完整的DNS解析过程如下:
1 检查自己的本地DNS名字缓存
当DNS客户端需要解析某个FQDN时,先检查自己的本地DNS名字缓存。本地的DNS名字缓存由两部分构成:
Hosts文件中的主机名到IP地址映射定义;
前一次DNS查询得到的结果,并且此结果还处于有效期;
如果DNS客户端从本地缓存中获得相应结果,则DNS解析完成。
2 联系自己的DNS服务器
如果DNS客户端没有在自己的本地缓存中找到对应的记录,则联系自己的DNS服务器,你必须预先配置DNS客户端所使用的DNS服务器。
当DNS服务器接收到DNS客户端的解析请求后,它先检查自己是否能够
权威的答复此解析请求
,即它是否管理此请求记录所对应的DNS区域;如果DNS服务器管理对应的DNS区域,则DNS服务器对此DNS区域具有权威。此时,如果本地区域中的相应资源记录匹配客户的解析请求,则DNS服务器权威的使用此资源记录答复客户的解析请求(权威答复);如果没有相应的资源记录,则DNS服务器权威的答复客户无对应的资源记录(否定答复)。
如果没有区域匹配DNS客户端发起的解析请求,则DNS服务器检查自己的本地缓存。如果具有对应的匹配结果,无论是
正向答复还是否定答复,DNS服务器非权威的答复客户的解析请求。此时,DNS解析完成。
如果DNS服务器在自己的本地缓存中还是没有找到匹配的结果,
此时,根据配置的不同,
DNS
服务器执行请求查询的方式也不同:
3 递归或迭代查询其他DNS服务器
默认情况下,DNS服务器使用递归方式来解析名字。递归方式的含义就是DNS服务器作为DNS客户端向其他DNS服务器查询此解析请求,直到获得解析结果,在此过程中,原DNS客户端则等待DNS服务器的回复。
如果你禁止DNS服务器使用递归方式,则DNS服务器工作在迭代方式,即向原DNS客户端返回一个参考答复,其中包含有利于客户端解析请求的信息(例如根提示信息等),而不再进行其他操作;原DNS客户端根据DNS服务器返回的参考信息再决定处理方式。但是在实际网络环境中,禁用DNS服务器的递归查询往往会让DNS服务器对无法进行本地解析的客户端请求返回一个服务器失败的参考答复,此时,客户端则会认为解析失败。
递归
方式和迭代方式的不同之处就是当DNS服务器没有在本地完成客户端的请求解析时,由谁扮演DNS客户端的角色向其他DNS服务器发起解析请求。通常情况下应使用递归方式,这样有利于网络管理和安全性控制,只是递归方式比迭代方式更消耗DNS服务器的性能,不过在通常的情况下,这点性能的消耗无关紧要。
根提示信息是Internet命名空间中的根DNS服务器的IP地址。为了正常的执行递归解析,DNS服务器必须知道从哪儿开始搜索DNS域名,而根提示信息则用于实现这一需求。全世界范围内的根DNS服务器总共有13个,它们的名字和IP地址信息保存在%systemroot%system32dnscache.dns文件中,每次DNS服务器启动时从cache.dns文件中读取。一般情况下,不需要对此文件进行修改;如果你的DNS服务器是在内部网络中部署并且不需要使用Internet的根DNS服务器,则可以根据需要进行修改,将其指向到某个内部根域DNS服务器。
========================================
举例=====================================
例如,当某个DNS客户端请求解析域名
www.winsvr.org并且DNS服务器(Nameserver)工作在递归模式下时和上级DNS工作在迭代模式,完整的解析过程如下:
- DNS客户端检查自己的本地名字缓存,没有找到对应的记录;
- DNS客户端联系自己的DNS服务器NameServer1,查询域名 [url]www.winsvr.org[/url];
3.NameServer1检查自己的权威区域和本地缓存,没有找到对应值。于是,联系根提示中的某个根域服务器,查询域名
www.winsvr.org
4.根域服务器也不知道
[url]www.winsvr.org[/url]的对应值,于是,向NameServer1返回一个参考答复,告诉NameServer1 .org顶级域的权威DNS服务器;
5.NameServer1联系.org顶级域的权威DNS服务器,查询域名
www.winsvr.org
6.org顶级域服务器也不知道
www.winsvr.org的对应值,于是,向NameServer1返回一个参考答复,告诉NameServer1 Winsvr.org域的权威DNS服务器;
7.NameServer1联系Winsvr.org域的权威DNS服务器,查询域名
www.winsvr.org;
8.Winsvr.org域的权威DNS服务器知道对应值,并且返回给NameServer1;
9.NameServer1向原DNS客户端返回
[url]www.winsvr.org[/url]的结果,此时,解析完成。
2.. 查询响应类型
DNS
服务器对于客户请求的答复具有多种类型,常见的有以下四种:
权威答复
:权威答复是返回给客户的正向答复,并且设置了
DNS
消息中的权威位。此答复代表从具有权威的DNS服务器处发出;
正向答复
:正向答复包含了匹配客户端解析请求的资源记录;
参考答复
:参考答复只在
DNS
服务器工作在迭代模式下使用,包含了其他有助于客户端解析请求的信息。例如,当
DNS
服务器不能为客户端发起的解析请求找到某个匹配值时,则向
DNS
客户端发送参考回复,告诉它有助于解析请求的信息;
否定答复
:否定答复指出权威服务器在解析客户端的请求时可能遇到了以下两种情况之一:
- 权威DNS服务器报告客户端查询的名字不存在;
- 权威DNS服务器报告存在对应的名字但是不存在指定类型的资源记录。
无论正向答复还是否定答复,
DNS
客户端都将结果保存在自己的本地缓存中。
===============================================================================
3.. 理解缓存的工作方式
DNS
客户端和
DNS
服务器都会缓存获得的解析结果,这样可以提高
DNS
服务性能和减少
DNS
相关的网络流量。
DNS客户端缓存
当
DNS
客户端服务启动时,会读取
Hosts
文件中的所有主机名和
IP
地址的映射,并且保存在缓存中。
Hosts
存放在
%systemroot%system32driversetc
目录,当你修改
Hosts
文件后,
DNS
客户端会立即读取
Hosts
文件并且对本地缓存进行更新。
另外,
DNS
客户端会缓存过去的查询结果,当
DNS
客户端服务停止时,将清空本地缓存。
DNS服务器缓存
DNS
服务器像
DNS
客户端一样缓存名字解析结果,并且可以使用缓存中的信息来答复其他客户端的请求。你可以在
DNS
服务器管理控制台或者使用
DNSCMD
命令行工具手动清空缓存,另外当
DNS
服务器停止时,同样会清空
DNS
服务器缓存。
资源记录的生存时间(
TTL
)指定了资源记录可以缓存的时间的长短,而无论是
DNS
客户端缓存还是
DNS
服务器缓存;默认情况下,
TTL
是
3600
秒(
1
小时)。需要注意的是,由于缓存的作用,
DNS
服务器上对于资源记录的修改可能不能立即生效。并且对于
Internet
域名来说,资源记录的修改可能会需要超过
24
小时的时间才能在所有
DNS
服务器上完成更新。