DNS 的来由

DNS的来由

如果您为您的机器设定过internet连线﹐那么您一定接触过DNS了﹐但DNS又是什么东东呢﹖说穿了﹐DNS是用来帮助记忆网路位址的﹐完全是为了迁就人类的记忆思维而设的。

DNS的全称是DomainNameSystem(或Service)﹐当您连上一个网址﹐在URL打上﹕www.google.com的时候﹐可以说就是使用了DNS的服务了。但如果您知道这个www.google.com的IP位址﹐直接输入216.239.53.101也同样可以到达这个网址。其实﹐电脑使用的只是IP位址而已(最终也是0和1啦)﹐这个www.google.com只是让人们容易记忆而设的。因为我们人类﹐对一些比较有意义的文字记忆(如﹕www.google.com)﹐比记忆那些毫无头绪的号码(如﹕216.239.53.101)﹐往往容易得多。DNS的作用就是为我们在文字和IP之间担当了翻译﹐而免除了强记号码的痛苦。

假如您的电话有名字记忆功能﹐您只需知道对方的名字﹐就可以拨号给友人了﹐我们可以说﹐这电话也具备如DNS的功能了呢﹗但是﹐我们在网路中使用的DNS系统﹐就是这么简单吗﹖非也﹐复杂得很呢﹗下面﹐就让我们一起去探索一下DNS的奥秘﹕

在早期的IP网路世界里面﹐每台电脑都只用IP位址来表示﹐不久人们就发现这样很难记忆﹐于是﹐一些UNIX的管理者﹐就建立一个HOSTS对应表﹐将IP和主机名字对应起来﹐这样﹐用户只需输入电脑名字﹐就可以代替IP来进行沟通了。如果你安装了Linux系统﹐在/etc下面就可以找到这个hosts档案﹔在NT的系统里﹐你也可以在\winnt\system32\drivers\etc下面找到它。不过这个HOSTS档是要由管理者手工维护的﹐最大的问题是无法适用于大型网路﹐而且更新也是件非常头痛的事情。这就是DNS大派用场的时候了。

DNS的结构

DNS是一个分层级的分散式名称对应系统﹐有点像电脑的目录树结构﹕在最顶端的是一个“root”﹐然后其下分为好几个基本类别名称﹐如﹕com﹑org﹑edu等﹔再下面是组织名称﹐如﹕ibm﹑microsoft﹑intel等﹔继而是主机名称﹐如﹕www﹑mail﹑ftp等。因为当初internet是从美国发展起的﹐所以当时并没有国域名称﹐但随着后来internet的蓬勃发展﹐DNS也加进了诸如tw﹑hk﹑cn等国域名称。所以一个完整的dns名称就好象是这样的﹕www.xyz.com.tw﹐而整个名称对应的就是一个(或多个)IP位址了。

在早期的设计下﹐root下面只有六个组织类别﹕

 

不过﹐自从组织类别名称开放以后﹐各种各样五花八门的名称也相继涌现出来了﹐但无论如何﹐取名的规则最好尽量适合网站性质。除了原来的类别资料由美国本土的NIC(NetworkInformationCenter)管理之外﹐其它在国域以下的类别分别由该国的NIC管理(比方说台湾的DNS将授权给twnic来管理)。这样的结构看起来就像这样﹕

 

在结构中﹐各组织的DNS经过申请后由该组织或其委托主机管理(通常当您申请注册一个domain域名称的时候﹐都要指定两台DNS主机负责该域名的DNS管理)。

DNS的运作

在我们设定IP网路环境的时候﹐都要告诉每台主机关于DNS伺服器的位址(我们可以手动的在每一台主机上面设置﹐也可以使用DHCP来指定)。但这设定的义意何在呢?从前面的介绍我们或可知道:其目的就是请DNS帮忙解析主机名称与IP位址啦。在这个设定过程中,DNS被称为resolver(也就是负责解析的DNSServer),而被设定主机,则只是单纯的DNSClient了,也就是提出解析请求的主机。

下面让我们看看DNS是怎样运作的﹕

1.当被询问到有关本域名之内的主机名称的时候﹐DNS伺服器会直接做出回答﹔

2.客户端向伺服器提出查询项目﹔

3.当被询问到有关本域名之内的主机名称的时候﹐DNS伺服器会直接做出回答﹔

4.如果所查询的主机名称属于其它域名的话﹐会检查快取记忆体(Cache)﹐看看有没有相关资料﹔

5.如果没有发现﹐则会转向root伺服器查询﹔

6.然后root伺服器会将该域名之下一层授权(authoritative)伺服器的位址告知(可能会超过一台)﹔

7.本地伺服器然后会向其中的一台伺服器查询﹐并将这些伺服器名单存到记忆体中﹐以备将来之需(省却再向root查询的步骤)﹔

8.远方伺服器回应查询﹔

9.若该回应并非最后一层的答案,则继续往下一层查询,直到获的客户端所查询的结果为止﹔

10.将查询结果回应给客户端﹐并同时将结果储存一个备份在自己的快取记忆里面﹔

11.如果在存放时间尚未过时之前再接到相同的查询﹐则以存放于快取记忆里面的资料来做回应。

从这个过程我们可以看出﹐没有任何一台DNS主机会包含所有域名的DNS资料﹐资料都是分散在全部的DNS伺服器中﹐而NIC只需知道各DNS伺服器位址就可以了。

为了更好地理解一下DNS的运作﹐让我们用下图看看查询www.home.netman.com.tw这台主机位址的过程﹕

 

在这个例子中﹐www.home.netman.com.tw台主机的DNS对应资料﹐是由负责home.netman.com.tw这个域名的DNS伺服器管理的。(在DNS术语中﹐我们称一个域名为“zone”﹐这个zone可以是您从NIC申请回来的域名﹐也可以是从该域名之下延伸出来的“sub-zone”)。在这台DNS伺服器上面﹐必须有一个关于home.netman.com.tw这个zone的档案﹐而这档案里面必须有一笔关于www的记录(任何主机都是以“记录”来表示,称为ResourceRecord)。这个记录可以为一个IP位址﹐也可以以别名形式来对应一台主机名称﹐但无论如何﹐所对应的主机名称最终是要被一个IP位址所对应着就是了。

同时﹐DNS还能提供“反查询”(reverselookup)功能﹐也就是以IP来查询主机名称。网路上面的许多服务﹐如﹕FTP,SMTP﹑等等﹐都需要到这个功能。其实﹐DNS服务本身就必须要使用反查询功能﹐而且在设定上﹐也必须要为每个网路建立起reversezone。虽然有些人发觉即使没有reversezone也可以使用到DNS服务﹐但其中弊端却不容易被察觉到﹐在这个(中文)网页﹕http://dnsrd.nctu.edu.tw/Basic/WhenToUse-Rev.html上面﹐您可以看到忽略reverszone所致一些问题。

DNS的名称记录

事实上﹐DNS不仅仅是用来解释位址用的﹐而且还可以回答更多关于网路和主机的其它信息﹐其中很重要的一个功能就是可以供邮件系统进行路由。这些资料﹐通常会以不同的“记录”名称出现在DNS的资料档案中。下面让我们参考一个Linux的DNS档案﹐看看这些记录是如何表示的﹕

;

;Zonefileforsiyongc.domain

;

;Thenfullzonefile

;

$TTL86400

@ INSOAredhat52.siyongc.domain.netman.siyongc.domain.(

1999092801;serial

8H;refresh

2H;retry

1W;expire

1D);minimun

;

INTXT"Atestdomain,createdbyNetman"

INNSredhat52

INNSdebian.home

INMX10redhat52.siyongc.domain.

INMX20debian.home

;

localhostINA127.0.0.1

gwINA192.168.0.17

INHINFO"Redhat""MASQ"

INTXT"Themasqueradegatewaytointernet"

redhat52INA192.168.0.17

INMX10redhat52

INMX20debian.home

INHINFO"DellPII266""LinuxRedHat"

wwwINCNAMEredhat52

mailINCNAMEredhat52

ftpINCNAMEredhat52

newsINCNAMEredhat52

smtpINCNAMEredhat52

pii266INA192.168.0.15

INMX10redhat52.siyongc.domain.

INMX20debian.home.

slware36INA192.168.0.18

INMX10redhat52.siyongc.domain.

INMX20debian.home.

rhrouteINA192.168.0.4

INMX10redhat52.siyongc.domain.

INMX20debian.home.

homeINnsdebian.home.siyongc.domain.

debian.homeINA10.0.2.101

我们姑且不理会开头那几行的意思﹐那是给DNS系统本身使用的(我将会在“学习Linux”文章里面再详细讨论)﹐这里我们只是看看几个记录名称而已﹕

 

分擔DNS工作

由於DNS的重要性日益顯著,為提高其容錯能力及查詢效能,我們在架設某一單一zone的時侯,常以多台伺服器來負責該zone的服務。其中,我們必需指定一台Primary(master)DNS伺服器,它是架設在某一個網域下被主要授權並控制所有名稱記錄的主控伺服器﹐管轄著該網域的所有記錄資料﹐這些記錄資料只有primary(master)可以修改。

但如果在一個比較大型的網路中﹐DNS伺服器就會變得很繁忙﹐所以您可以設定多個DNS來分擔master的工作﹐但您或許不願意到每一個DNS伺服器去更新資料吧﹖而且就算您願意這樣做﹐也容易出現錯誤或資料不同步的情形。這樣您可以設定其它的伺服器為secondary(slave)DNS來複製master上面的記錄資料﹐這樣﹐其它的電腦可以被分派到不同的DNS做查詢﹐既可以分擔master的工作﹐而且資料也可以自動進行同步工作。為確保資料的一致性,master每次更新過資料後會以notify機制主動通知slave前來同步。此外,您可以設定DNS資料同步的時間間隔﹐在dns檔案中的Refresh設定就是了。在檔案中,您還會看到Serial﹐當slave的上面的serial

相关推荐