中国互联网络信息中心
 当前位置:首页 > 关于CNNIC > CNNIC通讯 > CNNIC通讯第九期 > 正文

域名系统(DNS)大观之基本知识


金 灵

    1、历史长河

    话说,早在美国国防部为试验目的搭建的小型互联网络模型的时候,Domain Name System (DNS)域名系统就有了。通过在一台中央服务器上的一个HOSTS文件,他们来管理网络中的主机名。哪台机器需要解析网络中的主机名,它就要把这个文件下载到本地。

  随着互联网络上主机数目的迅速增加,HOSTS文件的大小可想而知,也随之大得不得了,这将大大影响主机名解析的效率。人们越来越觉得老的一套不中用了,人们需要一套新的主机名解析系统,来提供扩展性能好,分布式管理,和支持多种数据类型等等的功能。

  于是乎,DNS在1984年应运而生。使用DNS,存储在数据库中的主机名数据分布在不同的服务器上,减少了对任何一台服务器的负载,并且提供了一区域为基础的对主机名系统的分布式管理的能力。

  DNS支持名字继承,而且除了在HOSTS文件中的主机名到IP地址的映射数据外,DNS还能注册其他不同类型的数据。由于是分布式的数据库,它的大小是无限的,而且他的性能不会因为增加更多的服务器而受到丝毫影响。

  最早的DNS系统是建立在 RFC 882 (Domain names:Concepts and facilities)和RFC 883 (Domain Names-Implementation and Specification)国际标准上的,现在则由国际标准RFC 1034 (Domain Names-Concepts and Facilities)和RFC 1035 (Domain Names-Implementation and Specification)来代替。我将在以后大家谈谈国际标准RFC中对DNS的安全、实现和管理等方面的规定。

  目前Internet上主要有两套DNS系统:为了BSD 4.3 UNIX操作系统开发的Berkeley Internet Name Domain (BIND);微软的Windows NT Server 4.0上的DNS Server成为NT服务器的标准配置,它遵循的标准是RFCs 1034和1035。最新的Windows 2000服务器则包括了一个DNS的新版本,在这个版本的DNS中使用过的国际标准有:RFCs 1034、1035、1886、1996、1995、2136、2308和2052。 

    2、框架结构

    Bill曰:"WINS去矣,WINS去矣!"。这句话是说微软在Windows 2000中丢开了WINS服务。取而代之的是,它把WINS的功能组合进一个叫做动态DNS(Dynamic DNS)的服务中,可见DNS的功能日益强大。言归正传,上次说道DNS是为解决历史遗留问题而出现的。DNS是许多分层式和分布式的数据库组成的系统,这些数据库中有许多不同类型的数据,包括主机名,域名等等。DNS数据库中的这些名字形成了一种树状层次结构,名曰:名字空间。

    2.1 域名

    如果你在Web浏览器中输入 http://www.drname.com,你的浏览器将把这个域名(drname.com)传递给DNS服务器。DNS服务器执行几个操作,后面我们将解释它们,并且把IP地址返回给你的Web浏览器。一旦Web浏览器知道了该页注册的IP地址,它就可以开始连接到该Web页的过程。这里的drname.com 就是域名(domain name),那么www.drname.com算什么了?是"全称域名",全称是Fully Qualified Domain Name,它才是在DNS系统中由一系列的被点分隔的字符串来唯一定位其对应的IP地址的主机下面的这张图显示就是一个DNS的树状结构,其中有一台主机是www。 

    2.2 DNS和Internet

    互联网络域名系统是由互联网络上的域名注册机构来管理的,他们负责管理向组织和国家开放的顶级域名,这些域名遵循ISO-3166国际标准下表列出了现有的组织顶级域名和国家顶级域名的缩写。

DNS顶级域名 组织类型
com 商业公司
edu 美国大学或学院
org 非赢利机构
net 大的网络中心
gov 美国非军事联邦政府组织
mil 美国军事机构
num 电话号码簿
arpa 反向DNS
arpa 两个字母的国家代码

2.3 资源纪录
一个DNS数据库包含许多资源纪录(RRs). 每一个资源纪录标示数据库中的一种特定的资源DNS中有许多类型的资源纪录项下表中是常见的几种纪录项的详细信息(注意:这张表部不包括全部的纪录项):

    2.4 分布式数据库:区域文件和委派关系

    一个DNS数据库能被分为多个区域,一个"区域"是包含有与临近的名字空间的域名等资源纪录的DNS数据库的一部分。区域文件存储在DNS服务器上,一个单独的DNS服务器能被配置成零区域、一个区域或多个区域。每一个区域都有一个指定的域名作为这个区域的根域名。区域里包含所有以根域名结尾的域名信息.如果一个DNS服务器有包含相应域名的区域,就由他来解析。SOA(授权的开始)资源记录表明DNS名称服务器是DNS域中的数据的最好信息来源。它是每个DNS数据库文件中的第一条记录。在创建新的DNS区域时,"DNS管理器"将自动创建SOA资源记录。

    一个域里的名字可以委派给其他的域,委派是将DNS名字空间的一部分的解析指定为其他不相干的项目。其他不相干的实体可以是公司里的其他组织、部门或工作组,委派是由NS纪录来表示的,纪录中有委派的区域和那个区域的授权服务器的DNS名称。其实,跨区域委派是设计DNS的初衷之一。下面是DNS名字空间为什么要有委派关系的几个主要原因:

· 可以把对DNS域的管理委派给组织里的下级组织或部门

· 可以把一个巨大的DNS数据库的负债分布在多个名字服务器上,来提高名字解析的性能,同时创造了一个DNS的容错环境

· 通过把服务器放在相应的区域里,可以实现服务器的组织从属关系NS纪录通过为每个区域指定DNS服务器来实现委派,它们出现在所有转向和反向查询域中。

  在下图中,drname.com.域的管理被委派给两个域,drname.com.和mydomain.drname.com.

    3.DNS数据库之间的复制

  可能会有多个区域表示同一个名字空间,在这些区域中有两种类型:

  我们将一个区域文件复制到多个服务器上的过程叫做"区域传输"。他是通过从主服务器上将区域文件的信息复制到次要服务器来实现的。主服务器指得是区域传输的来源服务器,他既可以是主要区域,又可以是次要区域。

  如果主服务器是主要区域,区域传输直接从主要区域取得区域文件;如果主服务器是次要区域,区域传输仅仅传输区域文件的一个只读拷贝。

  区域传输通过下面几种方法

   1、主服务器向次激发:要服务器发出一个更新通知(RFC 1996)

   2、当次要服务器的DNS服务启动时,或者次要服务器的刷新间隔(在SOA RR中默认的是15分钟)过期时,他会向主服务器主动请求更新 有两种区域文件的复制方式:全部区域文件复制(AXFR),复制整个区域文件;增量区域文件复制(IXFR),仅仅复制区域里变化的纪录。BIND 4.9.3 DNS 和Windows NT 4.0 DNS一样,只支持全部区域复制(AXFR)。

  另外,还有两种全部区域复制的方式:一种是每个包一个纪录,另一种是每个包多个纪录。Windows 2000 DNS对于两种方式都支持,但是默认方式它使用每包多纪录的方式。

  如果你要和BIND 4.9.4或更早的版本兼容,必须设定为每包单纪录的方式。

  另外,Windows 2000 DNS还增加了对增量区域复制(IXFR)的支持。

  4.DNS的查询原理及过程 

  DNS的查询可以在客户机和DNS服务器之间进行也可以在两个DNS服务器之间进行。一个查询只不过是对特定名字的特定类型的纪录的一个请求。例如,一个查询可以请求到指定名字的所有主机资源纪录。

  有两种查询DNS服务器的方法:一种是递归查询,另一种是迭代查询。递归查询迫使DNS服务器做出查询成功或失败的响应。域名解析使用最多的就是这种查询方法。在递归查询中,如果需要的话,DNS服务器必须与其他的DNS服务器通讯。但他从其他的DNS服务器收到成功响应的信号后,他就将响应返回给客户机。递归查询是查询名字服务器和名字服务器查询中继名字服务器(用来进行解析请求的传递)的一种典型方法。

  当DNS服务器处理递归查询时,本地区域文件不能进行查询的解析,查询就会转到根DNS服务器。每一个标准的DNS服务器都有一个cache文件,或者叫根服务器列表,包括了Internet上的根服务器的对应IP地址。这个文件的最新版本可以 从InterNIC下载,下载地址是ftp://rs.internic.net/domain/named.cache。

  在迭代查询中,DNS服务器根据本地的区域文件或cache文件,提供最好的信息。如果一个名字服务器没有能够回答解析的任何信息,他不会仅仅返回一个简单的否定信息,他会试着在本地域之外查找信息,为了解析一个名字,他可能会查询很多外部的DNS服务器。

  下图显示了两种查询方法的比较:

    在查询过程中的资源纪录的生存时间 客户机在进行请求域名解析时,总是存储了一些域名的缓存信息。这些缓存文件,可以用来进行在以后对相同站点的解析请求做出反应,而不用每一次都去访问服务器。但是,这些缓存文件也有保质期,会过期作废的。这个保质期是 定义在解析请求返回数据的一个参数里,这个参数就是生存时间(TTL)。生存时间可以保证DNS服务器不会存储过时的数据。缓存文件的生存时间,可以在DNS数据库中定义:每一个资源纪录,可以通过TTL字段来定义;每一个区域,可以通过授权开始(SOA)纪录的最小TTL字段来定义。也可以在客户端定义存储资源纪录的最大TTL,在定义生存时间时有两个重要的因素需要考虑。一个是缓存信息的准确度,另一个是DNS服务器的使用频度和网络阻塞程度。

    如果生存时间TTL很短,则使用老信息的可能性会大大降低,但是会增加DNS服务器和网络的负载。如果生存时间TTL很短,则缓存的信息很可能会过时,客户机会得到错误的信息,同时减少了DNS服务器和网络的负载。

  如果解析请求是来自缓存,那么生存时间TTL也会随着传递过来。这样客户机就能知道相关信息的生存时间TTL,而且客户机不会根据本身的生存时间TTL来改变接受的生存时间TTL,DNS数据库的更新因为区域文件中的资源纪录是可以变化的,因此他们需要进行更新。我只在这里简单地提一下,DNS数据库的更新有两种形式,一种是静态更新,另一种是动态更新。

作者简介:
金灵域名博士网www.DrName.com创办人,中国国际经济贸易仲裁委员会域名争议仲裁员。

 





ICP备案编号:京ICP备010225号 版权所有:中国互联网络信息中心