700bike银河:DNS 查询的工作原理

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 00:17:48
DNS 查询的工作原理

当 DNS 客户端需要查询程序中使用的名称时,它会查询 DNS 服务器来解析该名称。客户端发送的每条查询消息都包括三条信息,指定服务器回答的问题:
  • 指定的 DNS 域名,规定为完全合格的域名 (FQDN) 
  • 指定的查询类型,可根据类型指定资源记录,或者指定为查询操作的专门类型。 
  • DNS 域名的指定类别。
     
    对于 Windows DNS 服务器,它始终应指定为 Internet (IN) 类别。

    例如,指定的名称可以是计算机的 FQDN,例如,“host-a.example.microsoft.com”,而指定的查询类型可以是通过该名称搜索地址 (A) 资源记录。将 DNS 查询看作客户端向服务器询问由两部分组成的问题,例如“您是否拥有名为 ‘hostname.example.microsoft.com’ 的计算机的 A 资源记录?”当客户端收到来自服务器的应答时,它将读取并解译应答的 A 资源记录,获取根据名称询问的计算机的 IP 地址。

    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 服务器时,请考虑使用递归过程来定位名称“host-b.example.microsoft.com”。在 DNS 服务器和客户端首次启动,并且没有本地缓存信息可帮助解析名称查询,就会进行上述过程。根据其配置的区域,它假定由客户端查询的名称是域名,该服务器对该域名没有本地知识。

    首先,首选服务器分析全名,并确定它需要对顶级域“com”具有权威性控制的服务器的位置。随后,对“com”DNS 服务器使用迭代查询,以便获取“microsoft.com”服务器的参考信息。接着,来自“microsoft.com”服务器的参考性应答,传送到“example.microsoft.com”的 DNS 服务器。

    最后,与服务器“example.microsoft.com”联系上。因为该服务器包括作为其配置区域一部分的查询名称,所以它向启动递归的源服务器作出权威性地应答。当源服务器接收到表明已获得对请求查询的权威性应答的响应时,它将此应答转发给发出请求的客户端,这样递归查询过程就完成了。

    尽管执行上述递归查询过程可能需要占用大量资源,但对于 DNS 服务器来说它仍然具有一些性能上的优势。例如,在递归过程中,执行递归查询的 DNS 服务器,获得有关 DNS 域名称空间的信息。该信息由服务器缓存起来并可再次使用,以便提高使用此信息或与之匹配的后续查询的应答速度。虽然打开与关闭 DNS 服务时,这些缓存信息将被清除,但是随着时间的推移,它们会不断增加并占据大量的服务器内存资源。

    可选的查询响应
    以前对 DNS 查询的讨论,都假定此过程在结束时会向客户端返回一个肯定的响应。然而,查询也可返回其他应答。最常见的应答有:

    • 权威性应答 
    • 肯定应答 
    • 参考性应答 
    • 否定应答 

      权威性应答是返回至客户端的肯定应答,并随 DNS 消息中设置的“授权机构”位一同发送,消息指出此应答是从带直接授权机构的服务器获取的。

      肯定应答可由查询的 RR 或 RR 列表(也称作 RRset)组成,它与查询的 DNS 域名和查询消息中指定的记录类型相符。

      参考性应答包括查询中名称或类型未指定的其他资源记录。如果不支持递归过程,则这类应答返回至客户端。这些记录的作用是为提供一些有用的参考性答案,客户端可使用参考性应答继续进行递归查询。

      参考性应答包含其他的数据,例如不属于查询类型的资源记录 (RR)。例如,如果查询主机名称为“www”,并且在这个区域未找到该名称的 A RR,相反找到了“www”的 CNAME RR,DNS 服务器在响应客户端时可包含该信息。

      如果客户端能够使用迭代过程,则它可使用这些参考性信息为自己进行其他查询,以求完全解析此名称。详细信息,请参阅迭代的工作原理。

      来自服务器的否定应答可以表明:当服务器试图处理并且权威性地彻底解析查询的时候,遇到两种可能的结果之一:

      权威性服务器报告:在 DNS 名称空间中没有查询的名称。 
      权威性服务器报告:查询的名称存在,但该名称不存在指定类型的记录。 
      以肯定或否定响应的形式,解析程序将查询结果传回请求程序并把响应消息缓存起来。

       注意

      如果查询的最终应答太长而不能在一个 UDP 消息数据包中发送和解析,则 DNS 服务器可以在 TCP 端口 53 上发送故障转移响应消息,以便在 TCP 连接会话中完全应答客户端。 
      当限定 DNS 客户端被名称解析到特定的 DNS 服务器(如内部网上的 DNS 服务器)的时候,系统通常会禁止在 DNS 服务器上使用递归。当 DNS 服务器不能解析外部 DNS 名称的时候,可能也会禁用递归,而且期望客户端故障转移到其他 DNS 服务器,以便解析这些名称。

      在可适用的服务器的 DNS 控制台中,可以在“高级”属性内进行配置,禁用递归。详细信息,请参阅禁用 DNS 服务器上的递归。

      如果在 DNS 服务器上禁用递归,那么您将无法在同一服务器上使用转发器。 
      默认情况下,在执行递归查询并联系其他 DNS 服务器时,DNS 服务器使用若干默认的时间设置。它们是: 
      3 秒的递归重试间隔。这是 DNS 服务在递归查询期间重试查询之前等候的时间长度。 
      15 秒的递归超时间隔。这是 DNS 服务在重试的递归查询失败之前要等候的时间长度。 
      在大多数情况下,这些参数不需要进行调整。但是,如果在慢速广域网链路上使用递归查询,那么或许可通过对设置略作调整,来改善服务器的性能,加快查询的完成速度。详细信息,请参阅调整高级服务器参数。

      迭代的工作原理
      迭代是在以下条件生效时 DNS 客户端和服务器之间使用的名称解析类型:

      客户端申请使用递归过程,但在 DNS 服务器上禁用递归。 
      查询 DNS 服务器时客户端没有申请使用递归。 
      来自客户端的迭代请求告知 DNS 服务器:客户端希望直接从 DNS 服务器那里得到最好的应答,无须联系其他 DNS 服务器。

      使用迭代时,DNS 服务器根据它自身对与查询的名称数据有关的名称空间的特定知识应答客户端。例如,如果 Intranet 上的 DNS 服务器从本地客户端对“www.microsoft.com”查询,那么它可能会从其名称缓存返回应答信息。如果查询的名称当前未存储在服务器的名称缓存中,那么服务器可能会提供参考信息对客户端作出响应,即提供一张与客户端所查询的名称比较接近的其他 DNS 服务器的 NS 和 A 资源记录列表。

      在形成参考性信息的时候,假定 DNS 客户端负责向其他配置的 DNS 服务器继续进行递归查询,以便解析该名称。例如,在大多数情况下,DNS 客户端可能会将其搜索一直扩展到 Internet 上的根域服务器,努力定位对于“com”域具有权威性控制的 DNS 服务器。一旦联系上 Internet 根服务器,它就会从这些 DNS 服务器得到进一步的递归响应,指向实际 Internet DNS 服务器,查找 “microsoft.com”域。当客户端收到这些 DNS 服务器的记录时,可以向 Internet 上的外部  Microsoft DNS 服务器发送其他迭代查询,它们可以提供肯定和权威性的应答。

      使用迭代时,除了向客户端提供自己最好的应答外,DNS 服务器还可在名称查询解析中提供进一步的帮助。对于大部分迭代查询,如果它的主 DNS 不能辩识该查询,那么客户端使用本地配置的 DNS 服务器列表,在整个 DNS 名称空间中联系其他名称服务器。

      缓存的工作原理
      DNS 服务器采用递归或迭代来处理客户端查询时,它们将发现并获得大量有关 DNS 名称空间的重要信息。然后这些信息由服务器缓存。

      缓存为 DNS 解析流行名称的后续查询提供了加速性能的方法,同时大大减少了网络上与 DNS 相关的查询通信量。

      当 DNS 服务器代表客户端进行递归查询时,它们将暂时缓存资源记录 (RR)。缓存的 RR 包含从 DNS 服务器获得的信息,对于在进行迭代查询以便搜索和充分应答代表客户端所执行的递归查询过程中所获知的 DNS 域名而言,此信息具有绝对的权威性。稍后,当其他客户端发出新的查询,请求与缓存的 RR 匹配的 RR 信息时,DNS 服务器可以使用缓存的 RR 信息来应答它们。

      当信息缓存时,存在时间 (TTL) 值适用于所有缓存的 RR。只要缓存 RR 的 TTL 没有到期,DNS 服务器就可继续缓存并再次使用 RR,来应答与这些 RR 相匹配的客户端提出的查询。在大部分区域配置中由 RR 所使用的缓存 TTL 值,指定为“最小的(默认)TTL”,它被设置为用于区域的起始授权机构 (SOA) 资源记录。在默认情况下,最小的 TTL 为 3600 秒(1 小时),但是可以进行调整,也就是说如果需要可以在每个 RR 上分别设置各自的缓存 TTL。

       注意

      可将 DNS 服务器安装为仅用于缓存服务器。详细信息,请参阅使用仅用于缓存服务器。 
      在默认情况下,DNS 服务器使用根提示文件 Cache.dns,该文件存储在服务器计算机的 systemroot\System32\Dns 文件夹中。当服务启动时,该文件的内容预先加载到服务器存储区,并包含运行 DNS 服务器所在的 DNS 名称空间的根服务器的指针信息。有关该文件或如何使用该文件的详细信息,请参阅与 DNS 相关的文件。 

      说明
      一般来说,每个组织有其自己的 DNS 服务器,并维护域的名称映射数据库记录或资源记录。当请求名称解析时,DNS 服务器先在自己的记录中检查是否有对应的 IP 地址。如果未找到,它就会向其它 DNS 服务器询问该信息。 

      例如,当要求 Web 浏览器访问“msdn.microsoft.com”站点时,它就会通过以下步骤来解析该域名的 IP 地址: 

      Web 浏览器调用 DNS 客户端(称为解析器),并使用上次查询缓存的信息在本地解析该查询。 
      如果在本地无法解析查询,客户端就会向已知的 DNS 服务器询问答案。如果该 DNS 服务器曾经在特定的时间段内处理过相同的域名(“msdn.microsoft.com“)请求,它就会在缓存中检索相应的 IP 地址,并将它返回给客户端。 
      如果该 DNS 服务器找不到相应的地址,客户端就会向某个全局根 DNS 服务器询问,后者返回顶级域权威 DNS 服务器的指针。在这种情况下,“com”域权威服务器的 IP 地址将返回给客户端。 
      类似地,客户端向“com”服务器询问“microsoft.com”服务器的地址。然后,客户端将原始查询传到“microsoft.com”服务器。 
      因为“microsoft.com”服务器在本地维护“msdn.microsoft.com”域的权威记录,所以它将最终结果返回给客户端,并完成特定 IP 地址的查询。 
      注意,可以将 DNS 资源记录缓存到网络上任意数量的 DNS 服务器中。第 2 步中提到的 DNS 服务器可能不包含“msdn.microsoft.com”缓存记录。但是,它可能有“microsoft.com”的记录,更可能有“com”域的记录。这可省去客户端获得最终结果所需的一次或几次查询,从而加快了整个搜索过程。 

      为了维护 DNS 缓存中的最新信息,缓存记录有一个与信息关联的“生存时间”设置(类似于牛奶的保鲜期)。当记录到期时,必须对它们再次进行搜索。