理解DNS服务器的工作方式

1.. DNS客户端完整的DNS解析过程

  1..1 检查自己的本地DNS名字缓存

  1..2 联系自己的DNS服务器

2.. 查询响应类型 权威答复 正向答复 参考答复 否定答复

3.. 理解缓存的工作方式

DNS客户端需要为某个应用程序查询名字时,它将联系自己的DNS服务器来解析此名字。DNS客户发送的解析请求包含以下三种信息:

需要查询的域名。如果原应用程序提交的不是一个完整的FQDN,则DNS客户端加上域名后缀以构成一个完整的FQDN

指定的查询类型。指定查询的资源记录的类型,如A记录或者MX记录等等;

指定的DNS域名类型。对于DNS客户端服务,这个类型总是指定为 Internet [IN]类别。

1.. DNS 客户端完整的 DNS 解析过程如下:


1 ..1 检查自己的本地 DNS 名字缓存 DNS 客户端需要解析某个 FQDN 时,先检查自己的本地 DNS 名字缓存。本地的 DNS 名字缓存由两部分构成: Hosts 文件中的主机名到 IP 地址映射定义; 前一次 DNS 查询得到的结果,并且此结果还处于有效期; 如果 DNS 客户端从本地缓存中获得相应结果,则 DNS 解析完成。


1..2 联系自己的 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 服务器工作在迭代方式,即向原 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工作在迭代模式,完整的解析过程如下:
  1. DNS客户端检查自己的本地名字缓存,没有找到对应的记录;

  2. 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服务器缓存;默认情况下,TTL3600秒(1小时)。需要注意的是,由于缓存的作用,DNS服务器上对于资源记录的修改可能不能立即生效。并且对于Internet域名来说,资源记录的修改可能会需要超过24小时的时间才能在所有DNS服务器上完成更新。只有Windows 2000及以后版本操作系统的客户端计算机才能执行动态更新,低版本的Windows系统(NT49x/ME)不支持动态更新。不过,你可以通过DHCP服务器为这些低版本客户端计算机代理进行动态更新。当DHCP服务器在代理低版本客户端计算机注册A记录时,会将自己设置为此A记录的所有者。而在安全动态更新方式中,只有资源记录的所有这才能修改此记录,这样在其他DHCP服务器为此低版本客户端计算机代理注册时会出现拒绝访问的问题。因此,你需要将此DHCP服务器加入到DnsUpdateProxy安全组中,这样当DHCP服务器更新A记录时,不会记录下此A记录的所有者信息,从而允许其他DHCP服务器来修改此A记录。