本章内容包括:
•迭代查询和递归查询。客户机可以使用两种查询:迭代查询和递归查询。这一节介绍它们的差别。
•发送DNS查询。这一节描述在DNS客户机和服务器之间所交互的信息。
•有效时间。有效时间告诉客户机一个回答可以信任的时间,以决定有多长的时间可以缓存此结果。
•查询过程。整个查询过程是如何工作以满足DNS客户机的请求的。
5.1迭代查询和递归查询
迭代查询和递归查询是可以发送到域名服务器的两种请求。递归查询是最常见的发送到本地域名服务器的请求。当本地域名服务器接受了客户机的查询请求时,本地域名服务器将力图代表客户机来找到答案,而在域名服务器执行所有工作的时候,客户机只是等待。如果本地域名服务器不能直接回答,则它将在域名树中的各分支上下递归搜索来寻找答案。可见第2章中一个nslookup跟踪的示例。
对于一个递归查询,DNS服务器将持续搜索直到收到回答。这种回答可以是主机的IP地址,也可以回答“主机不存在”。不论是哪种结果,递归域名服务器将把结果返回给客户机。
一个域名服务器若设置为使用前向服务器,则它将发送递归查询到指定的前向主机。这台收到前向查询的主机也将工作在递归模式以回答查询。如果本地服务器不是一个从属服务器,过一会儿它可能会自行开始查询过程,尽管它仍然希望从它的前向主机处得到回答。如果本地域名服务器设置为一个前向服务器的从属服务器,则工作方式会有所不同。客户机可以发送递归查询到一台从属服务器,但从属服务器不能进行递归查询,它实质上将成为其前向服务器的客户机等待回答。第3章曾对前向服务器和从属服务器进行了介绍。
迭代查询则有所不同。迭代查询的最好例子是一台本地域名服务器发送请求到根服务器。当某个企业的本地域名服务器向根服务器提出查询,根服务器并不一定代表本地域名服务器来担当起回答查询的责任。另一种说法是根服务器不接收递归查询。事实上,根服务器只是为解析查询做一件事:指引本地域名服务器到另一台主机来查询回答。这种做法通常称为重指引,也是期望得到的迭代查询的结果。例如,当根服务器被要求查询www.isi.edu的地址,根服务器不会到ISI域名服务器查询www主机的地址,它只是给本地域名服务器返回一个提示,告诉本地域名服务器到ISI域名服务器去继续查询和得到结果。
所以,对域名服务器的迭代查询只能得到一个提示,再继续查询。关于迭代查询和递归查询的更多信息将在后续章节中讨论。
5.2发送DNS查询
用户在试图访问网络上的资源时就开始了域名服务查询。用户准备访问的资源可以是同一个本地网的另一台主机,也可能是位于地球的另一面。一般来说,用户或者在命令行键入远地主机名,或者在应用程序如Netscape或InternetExplorer中输入,用户不用也不需要知道拥有此名字的主机在什么位置。用这种方式输人的主机名必须转换为IP地址。然后,用户也不用知道以下事实,即域名系统是如何做下列工作的。
取决于用户的本地主机的配置,这个主机名可以通过不同的方式来解析。解析主机名的方法之一是查看本地主机的文件。但本地主机文件的信息并不会很全,因此DNS往往是首选的方法。如果DNS已被选为解析远地主机名的方法,则本地主机将参考它的解析器库,以决定一个缺省的域是否已选定、搜索的路径是否已配置、域名服务器的IP地址是什么等。在WindowsNT和2000环境下,这些信息将在TCP/IP属性对话框的DNS选项卡中配置和显示,如图5-1所示。(第14章讨论了这些值在客户机上的设置。)
一旦这些信息被正确地输入,本地主机就可以使用DNS进行主机名解析。在获得了域名服务器的IP地址后,本地主机就可以向域名服务器发出对远端主机IP地址的查询。发送给域名服务器的IP分组的格式包含5段信息,如图5-2所示。
DNS消息(不论是查询还是回答)都包含一些特殊的信息位。IP分组中header段总是存在的,其中包含了关于这个分组的信息,包括IP分组中有哪几段信息、这个分组是用来查询还是回答、查询的类型(标准、反向、服务器状态等等)、回答是否授权。图5-3为header段的格式。
图5-2中的question段包含3部分信息:被查询的域名、查询的类型以及查询的类别。其中的域名实际上可以是主机名,但也和查询的类型有关。如果用户想通过Web浏览器连接到www.isi.edu,则属于地址查询。此时这一段的名字部分应是主机名www.isi.edu,查询类型应反映为地址或A记录的代码,类别则应反映为Internet或IN类的代码。图5-4为分组的question段的格式。
图5-2所示分组的其余3段:answrer段、authority段和additional段的格式是一样的,各自包括名字、类型、类别、TTL、长度(源数据长度)以及源数据等几部分。answer段的名字、类型、类别部分应该和question段相同。TTL部分表示收到的记录数据的有效时间,而Rdata应该是实际的回答。
若还是用以上的例子,名字部分应为www.isi.edu,Rdata部分则是主机的IP地址。图5-5为answer段、authority段和additional段的格式,它们都是一样的。
现在,再回到整个的查询过程。客户机向本地域名服务器发出查询。为了更好地说明此问题,假设所有的域区数据,包括服务器自身委托授权的已及更早就开始的没被授权的查询的数据,都被载入内存并且当域名服务器开始工作时已经被“缓存”。这个域名服务器收到查询请求后就开始查找。如果域名服务器在缓存中有相应的信息,而TTL时间还没有超过,则域名服务器就直接向客户机提供信息。在这种情况下,回答返回并且响应的时间非常快。如果返回的答案是没有授权的,则header段的AA标志不会被设置。
如果在域名服务器的缓存中找不到回答,则本地域名服务器就将在域名树中向根部上溯,向其他域名服务器查询,然后到另一个分支寻找回答。在这种情况下,当本地域名服务器最终向客户机返回一个回答时,AA标志设置为1,以表示回答将来自一台授权服务器。客户机得到回答后,就可和远端主机建立连接。
当客户机从域名服务器得到响应后,一般都会关心此响应是不是授权回答,也就是会关心在连接被解析时是否会有问题,如果一个域的授权域名服务器给出了非授权的回答就会出问题。这通常是有人对域区文件做了修改,或者域区文件出现了其他错误。
以下两节和将详细地描述通过缓存取得结果的过程。
(未完待续)