[转]DNS的工作原理

  DNS是Internet上非常重要的服务,因为现在人们在使用Internet时,几乎都在使用域名而非IP地址访问资源。可以说,人们在访问Internet资源的过程中始终需要DNS服务帮助将目标计算机名转换成IP地址,一旦DNS服务出现故障,将会导致lnternet的瘫痪。
  为了向用户提供完全合格域名的解析,需要在网络中安装和配置DNS服务器,并且将用户的计算机配置成某台或几台DNS服务器的客户机。DNS客户机向DNS服务器提出查询请求,DNS服务器对请求做出相应的应答。
DNS查询以各种不同的方式进行解析。客户机有时可从以前查询获得的缓存中得到查询结果。DNS服务器可以使用其自身缓存来应答查询,也可以通过查询或联系其他DNS服务器来解析客户机的查询,并将应答返回给客户机,这个过程称为递归(查询)。此外,客户机本身也可尝试联系其他服务器来解析名称,这个过程称作迭代(查询)。
总之,DNS查询过程按以下两部分进行:

  1. 询传送至解析器进行解析,如果能在本地解析则返回结果。
  2. 如果不能在本地解析,则查询DNS服务器来解析名称。

下图显示了完整的DNS查询过程。

  本地解析的过程如图4-38所示中的Q1和A1两过程所示。假如用户在浏览器地址栏中输入www.example.com,浏览器则会在与该地址所对应的主机通信前先向解析器查询该主机的IP地址。查询请求Q1传送至解析器,解析器检查本地缓存看能否进行就地解析。如果在缓存中找到相应的结果,则将结果发送给浏览器(A1),本次查询结束。本地解析缓存中的名称信息可能有以下两个来源:

  1. hosts文件。如果该文件存在,则其中的任何主机名称到IP地址的映射在DNS客户服务启动时会预先加载到缓存中。
  2. 将在以前的DNS查询应答响应中获取的记录存储在本地DNS缓存中并保留一段时间。

  如果在缓存中找不到匹配的信息,则解析过程继续进行,客户机将通过查询DNS服务器来解析名称。
  如图4-38所示,客户机将查询主DNS服务器(Q2)。当DNS服务器收到查询时,首先检查它的本地配置区域中有没有与查询匹配的信息(Q3)。如果有,则服务器做出应答A3,并且使用该信息来解析查询的名称(A2)。如果没有,服务器则检查它能否通过其缓存的先前查询信息来解析名称(Q4)。如果从中发现匹配的信息(A4),服务器将向客户机返回该信息(A2),查询完成。
  如果通过上述步骤均未能找到匹配的信息,则查询过程继续进行。主DNS服务器将使用递归过程来从其他DNS服务器上获得信息,帮助其解析名称。在大多数情况下,DNS服务器的默认配置支持递归过程,整个过程如图4-39所示。

  如图4-39所示,假设客户机要查询的主机地址是host.hello.example.com。首先,主服务器分析全名并确定对顶级域com具有绝对控制权的DNS服务器的IP地址。随后,对该服务器进行查询,以获取example.com子域DNS服务器的地址。接着再对example.com子域的DNS服务器进行查询,以获取hello.example.com DNS服务器的地址。最后,与hello.example.com子域的DNS服务器联系上。该服务器从其配置区域中查询到主机host.hello.example.com所对应的IP地址,并将结果返回给主DNS服务器,主服务器再将此应答转发给客户机,这样整个递归查询过程就完成了。
  如果客户机使用迭代过程,则主DNS服务器就不需要像在递归方式下做那么多的工作,只需向客户机返回一个参考答复,其中包含有利于客户机解析请求的信息(如根提示信息等),而不再进行其他操作;客户机根据DNS服务器返回的参考信息再决定处理方式。但是在实际网络环境中,禁用DNS服务器的递归查询往往会让DNS服务器对无法进行本地解析的客户端请求返回一个服务器失败的参考答复,此时,客户机则会认为解析失败。
  递归方式和迭代方式的不同之处就是当DNS服务器没有在本地完成客户机的解析请求时,由谁扮演DNS客户机的角色向其他DNS服务器发起解析请求。通常情况下应使用递归方式,这样有利于网络管理和安全性控制。只是递归方式比迭代方式更消耗DNS服务器的性能,不过在通常的情况下,这点性能的消耗无关紧要。

猜你喜欢

转载自www.cnblogs.com/rockyching2009/p/11748245.html