本章将描述DNS服务器如何工作,如何协同工作以及如何响应域名查询。本章包括以下
内容:
•主机和域名的层次结构。在该节将看到域名空间像一棵树,即所有互相关联的计算机名所组成的一种层次结构。也将解释子域如何将名字空间划分为可管理的单位,而委托授权则可使一个DNS服务器在需要时查询其他服务器。
•域和域区(zone)。域和DNS服务器之间的关系是可以变化的,不一定总是每个域一个服务器。DNS服务器将使用域区文件来精确地确定它们将管理哪些域和主机。域区给了DNS管理员足够的灵活性使得一个DNS服务器可以处理一个或多个域、一个或多个域的一部分或者是这两种情况的组合。这一节将介绍DNS管理核心的域区数据。注意:一些服务器不使用域区文件来存储域区信息,辅服务器可能只在内存中有拷贝,而Windows服务器可以在活动目录中存储域区信息。
•解析客户机的请求。当一个客户机发出名字查询后将会发生什么?本节将通过一个例子详细说明客户机查询解析的过程,还将解释DNS服务器可以使用的递归查询和迭代查询。所举的例子将显示一个查询可以上溯到根服务器,然后再回到另一个分支以满足客户机的请求。
•工具纵览。该节介绍可以帮助解决DNS问题的基本工具,包括信息采集、疑难解答和其他工具。该节提供了一个帮助理解和运用DNS的小工具箱。
DNS是存储网络主机和域名并进行交互的场所。此时,将每个主机名当作一个符号地址,因为使用主机名比数字地址更方便,也更容易记忆。
DNS客户机的特性多数体现在应用网络层。例如,通过URL名可迅速地在浏览器中打开任何地方的web页面。传输层则在网络中传送DNS信息。DNS客户机和服务器在端口53使用无连接的UDP协议来查询和做出响应,还在端口53使用TCP协议进行服务器到服务器的连接。DNS客户机和服务器间使用无连接UDP协议的原因是很简单的。用UDP协议传输报文不需要建立连接,如果客户机没有接收到所需的信息,解析器就会不停的重发直到它接收到一个响应(在本章后面的“解析客户机请求”中将会描述),对于服务器到服务器的连接,只有基于连接的协议,比如说TCP协议能够使用,因为这些服务器必须传送经常被复制的重要的资源记录(ResourceRecord)和序列信息,没有这些信息,服务器便不能和其他服务器保持同步而且也不能提供可靠的服务。
2.1主机和域名的层次结构
当Internet(原来称为ARPAnet)规模还很小时,一个单独的统一的host.txt主机文件在网络中发布,就可完成主机的查找。而当Internet的规模越来越大时,这种发布主机文件的查找方法就不适用了。域名系统DNS的结构就逐渐形成,以代替原来的以文件为基础的主机查找。DNS实现了一种分布式数据模型,形成了一种文件系统树,如图2-1所示。从体系结构上来说,域名系统DNS是一种分布式的、层次型的、客户机/服务器式的数据库管理系统。
这种树型模型是分布式的,因为每个注册的域都将自己的数据库列表提供给整个系统,如图2-2所示。
层次结构的最高端是域名树的根(通常用点号“.”表示),提供根域名服务。根域名服务器具有指向第一层域的初始指针,也就是顶层域,如.com、.org、.mil和.edu。另外,还有两百多个表示地理位置的顶层域名。这个列表仍在发展。顶层域名最初由Internet授权地址分配组IANA管理。后来,一些顶层域名被授权给一些组织,例如Internet信息中心InterNIC来管理。InterNIC管理其他的顶层域名.com、.org、.act和.edu。因为八十年代和九十年代众多的注册而使得它发展很快,并且不断变化。在附录C“顶层Internet域名”中尽量地列出了这些顶层域名。
在域名层次结构中,主机可以存在于根以下的各层上。因为域名树是层次型的而不是平面型的,因此只要求主机名在每一个分支中必须是唯一的。例如,在一个公司中可以有若干个主机名为www的web服务器,前提是每台服务器必须在域名层次的不同分支上。如www.xyz.com、www.corp.com和www.eng.com都是有效的主机名,也就是说,即使这些主机有相同的名字,也都可以被正确地解析到唯一的主机。这种原则对于FTP节点、web节点、域名服务器等等都是适用的,即只要是在不同的子域,就可以重名。
根DNS服务器就像世界各地的公司和学校使用的服务器,但它存在于Internet中最特殊的地方,也就是甚至在第一层域名如.com和.org等之上。表2-1中给出了域名层次结构中的若干层。
记忆DNS层次的最容易的方法是记住根域仅仅只用“.”表示。顶层域只含有一个名字,第二层域则含有两个名字,如此等等。
根域名服务器和其他机构、团体的域名服务器的主要区别是根服务器包含指向所有已注册的顶层域的指针。
第二层域是属于机构团体或地区的,用域名的最后一部分即域后缀来分类。例如,域名microsoft.com代表微软公司。多数域后缀可以反映使用这个域名的机构是什么性质的。
注意实际上,和根域相比,第一层域实际是第二层域,但它们还是称为顶层域或TLD(TopLevelDomain)。根域从技术的含义上是一个域,但常常不被当作是一个域。根域所有的很少几个根级成员只是为了支持域名树和它的功能。
但机构的类型并不总是可以很容易地通过域后缀来确定。例如,对于.net域和.org域就不像.com域那样清晰。本来,.net域是打算为ISP(Internet服务提供商)和其他联网机构所用的,但很多研究机构或课题组也用这个域,如handle.net和giga.net等。
.org域原来是为非赢利或政府资助的研究组织所使用的,但它也被一些政府机关如高性能计算中心(HighPerformanceComputingCenter:hpc.org)、集成技术办公室(IntegrationTechnologyOffice:ito.org)等所使用。
2.1.1子域
一个域如果在另一个域之下,就应该说是一个子域,即使是顶层域也是根域的子域。由于在第二层域以下的子域的变化特别多,而大量的子域也是在第二层域以下,因此,子域这个词就往往用来指第二层域以下的各个域。第2章DNS如何工作计计15
各机构、团体往往根据内部的需要来设立子域。如East.isi.edu是isi.edu的子域,是为ISI的东海岸分部所设立的。各公司往往按照公司内部的结构来设立子域。在图2-3所示的子域就分别对应于工程部、市场部、销售部和人力资源部。采用这种方式设立子域,可使负载分布到公司内部网络的若干主机,从而改善如邮件服务、名字服务等各种服务的性能。子域结构的划分完全由自己决定。划分的原则应该是使网络上的流量最小并满足需求。因为同样的原因,在Windows2000中使用类似于域控制器放置的结构是很常见的。如果想按逻辑局域网的边界划分域,从而使广域网上的流量最小,则应考虑至少在各局域网内放置一个缓存名字服务器。
域和子域从纯逻辑的角度来说,所有在根域以下的域都可称为子域,因为它们确实都在根域之下。但这样使用术语的对象太广,也不适于区分上层域和非上层域。通常,管理员称第二层以下的域为子域,也就是那些具有3个或多于3个用“.”分开的名字的域为子域。这样就便于将相对比较固定的上层域和第三层、第四层,甚至更低层加以区别。
从更实际的角度来看,根域、顶层域和第二层域为的域名树的上层固定组成,而子域是指第二层以下的各个域。
2.1.2委托授权
以上这种子域的划分,可以引出在域内父域和子域的若干服务器之间分布工作负载的一种正式方法:委托授权。主服务器也被称作授权服务器,或在DNS里称作SOA。一个授权服务器具有不可推辞的责任回答向它提出的所有查询请求。但它也可以将一部分授权委托给其他的服务器。授权服务器可以包含所有有关域的数据,也可将一部分数据委托给其他服务器。
每个顶层域实际是根域的一个部分,而每个顶层域又可进一步地划分成第二层域名。委托授权是根域服务器用来和其他域名服务器分享责任的一种方法,其结果是将查找所有Internet主机名的授权分配到许多服务器来承担。通过这种分布的方法,形成了DNS的一个关键概念。这样单个服务器的失效不会造成系统失效,根服务器相当于有了多个,大多数情况下顶层域和子域也是如此。
如果一个DNS服务器不能回答一个查询请求,则它会自动地指示客户机到另一个已授权分担一部分子域记录的服务器去查询。子域经常是由授权委托的服务器来处理的。授权服务器决定了对某个域名应该查询哪个服务器,也就决定了如果需要的话下一步应该查询的服务器。如果授权服务器不包含所查询名字的有关数据,委托授权就将决定下一步应该查询的服务器。委托授权将把所有授权的服务器在域中宣布,但实际上,多数查询只需再转向一个服务器。如果客户机(解析器)收到的回答是主机或域不存在,则客户机会立刻停止查找。解析器不会再指向任何其他的委托授权服务器,而不论它以前已访问过多少域名服务器。
委托授权将使查询从位于DNS根部的根服务器向下指向顶层DNS服务器。子域DNS服务器将通过域名服务器记录向父域服务器注册,就如同一个机构向InterNIC(Internet网络信息中心)注册其第二层域名和DNS服务器从顶层域获得授权。如前所述,第二层域下可以有多个授权。
委托授权可以是同级的,也可以是向下一级的。同级委托授权将确定同一层的其他服务器来共享域的授权,而向下一级的委托授权将确定子域(见附录C)。任何用户所使用的DNS服务器都可能被顶层DNS服务器委托授权为它的一个子域。下载
通过域名服务器记录(NS记录)给一个域名服务器以委托授权(第4章将描述NS记录和它们的使用)。NS记录可以给出域中所有授权服务器的列表。为了配置一个机构的子域,就必须将授权从父域委托到子域,否则,这些子域就不能被外界的任何主机所解析。
对一个DNS客户机来说,好像所有已注册的主机地址都在它本