上次介绍了DNS的一部分内容,下面我们继续讲有关DNS的域名服务器和解析过程。

七、名字服务器和区

存储关于域名空间的信息的程序叫做名字服务器( name server)。名字服务器通常含有域名空间中某一部分的完整信息,这一部分我们称为区( zone), 区的内容是从文件或其他名字服务器中加载而来。 这时我们就说这个名字服务器对这个区具有权威( authority)。一个名字服务器也可以同时对多个区具有权威。

wKioL1iIQ--jwCwjAAEbqQWEMXI989.png

其实域和区是相对而言的,在一个域中,通过授权将全部或者部分管理内容下发给区进行管理。像在edu的域中,通过授权将berkeley.edu划分为区,称为berkeley.edu区。其实在berkeley.edu区中还可以将管理内容再次下放给相应的区,那么berkeley.edu区就变成了下面区的域了。

名字服务器只会加载区而不是域。

wKiom1iIRBPjoMAFAAESvlw3x9I499.png

八、区数据文件

主名字服务器从本机中加载数据的文件叫做区数据文件( zone data file)。我们也

常常称之为数据文件( data file)或数据库文件( database file)。辅名字服务器也

能从数据文件中加载区数据。辅名字服务器常常被配置成为:将主名字服务器传送

过来的区数据备份到本机的数据文件当中。如果后来辅名字服务器被“杀死”, 再重

启动时,它会首先读备份的数据文件,然后检查它的区数据是否是最新的。这样一

来,既避免了传送还未更改的区数据,又为在主名字服务器关闭时提供了数据源。

九、递归

wKioL1iIRLOTsXrxAAFRBDmXins766.png

递归查询将大部分的解析负担置于一个名字服务器上。递归或递归解析( recursive resolution)指的是名字服务器在收到递归查询时所使用的解析过程。正如编程中的递归算法,名字服务器只重复一个简单的过程(向远程名字服务器提出查询,再遵照指示)直到收到结果。在递归方式中,解析器向(本地)名字服务器发送一个关于某个域名信息的递归查

询。被查询的名字服务器必须返回所请求的数据或者是出错说明,出错可能包括所请求的类型数据不存在或所给域名不存在。名字服务器不能只将查询者指向另一个名字服务器,因为该查询是递归的。当名字服务器收到一个它无法回答的递归查询时,它将向“最有可能知道的”名字服务器进行查询。最有可能知道的名字服务器是指与所要寻找域名最接近的区的权

威。例如,如果名字服务器收到一个要求查找域名girigiri.gbrmpa.gov.au的递归查询,它首先检查自己是否知道谁是girigiri.gbrmpa.gov.au 的权威名字服务器。如果它知道,就将查询发往其中一个名字服务器。如果不知道,它就会检查自己是否知道 gbrmpa.gov.au 的名字服务器,然后是 gov.au,再就是 au。默认值是根区,检查到这儿一定会停止,因为每个名字服务器都知道根名字服务器的域名和地址。这样就会造成解析器的工作反复,因为服务器会一直返回结果给解析器,直到没有数据返回或者找到相应的域名地址。

十、在权威名字服务器间选择

BIND名字服务器使用一种称为 “往返时间” ( roundtrip time)或RTT的度量( metric)

对同一个区的权威名字服务器进行选择。 往返时间是指远程名字服务器响应查询的时间长度。每次 BIND 名字服务器向远程名字服务器发送查询时,都启动一个内部计时器。当它收到响应时就停止计时,记录下该远程名字服务器过了多长时间才响应。当名字服务器要选择向哪个名字服务器发送查询时,它就选择具有最小 RTT的名字服务器。

在 BIND 名字服务器查询某个名字服务器之前,先给它一个随机的 RTT 值,不过这

个值比任何真实的 RTT 值都要小。这就保证在根据真实 RTT 值选择之前, BIND 名字服务器会以随机的顺序查询某个区的所有名字服务器。

十一、地址到名字的映射

在Internet 域名空间中就特地划出一部分名字空间作为此用,这部分名字空间被称为in-addr.arpa域。

in-addr.arpa域中的节点都是用数字来作标号的, 这些数字就是以点分字节 (dottedoctet)来表示的 IP 地址。(用点分隔四个0 到 255 之间的数字称为“点分字节”表示法,这是表示 32 位 IP 地址的常用方法。)比如说, in-addr.arpa 最多有 256 个子

域,分别和 IP地址中的第一个字节的每个可能值相对应。这些子域又可以有 256个自己的子域,分别和第二个字节每个可能的值相对应。最后,在第四层下面,与最后一个字节相连的资源记录给出了这个IP地址对应的主机或网络的全称域名。 这个庞大的域: in-addr.arpa。

在读域名的时候, IP 地址应该倒过来显示,因为名字是从叶子往根的方向读的。比如说,如果 winnie.corp.hp.com 的 IP 地址是 15.16.192.152,那么它相应于in-addr.arpa 子域的名字就是 152.192.16.15.in-addr.arpa,该 IP地址反向映射到域名 winnie.corp.hp.com。IP 地址是以与名字空间相反的方向来表示的, IP 地址的第一个字节在 in-addr.arpa域的底部。这样一来,IP地址就能从上至下正确地读出了。

wKiom1iIRPqiv0m6AADyHFEq25Y942.png