DNS 的来由
如果您为您的机器设定过 internet 连线╋那么您一定接触过 DNS 了╋但 DNS 又是什么东东呢?说穿了╋DNS 是用来帮助记忆网路位址的╋完全是为了迁就人类的记忆思维而设的。
DNS 的全称是 Domain Name System(或 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 的系统里╋你也可以在 winntsystem32driversetc 下面找到它。不过这个 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(Network Information Center) 管理之外╋其它在国域以下的类别分别由该国的 NIC 管理(比方说台湾的 DNS 将授权给 twnic 来管理)。这样的结构看起来就像这样?

在结构中╋各组织的 DNS 经过申请后由该组织或其委托主机管理(通常当您申请注册一个 domain 域名称的时候╋都要指定两台 DNS 主机负责该域名的 DNS 管理)。
DNS 的运作
在我们设定 IP 网路环境的时候╋都要告诉每台主机关于 DNS 伺服器的位址(我们可以手动的在每一台主机上面设置╋也可以使用 DHCP 来指定)。但这设定的义意何在呢?从前面的介绍我们或可知道:其目的就是请 DNS 帮忙解析主机名称与 IP 位址啦。在这个设定过程中,DNS 被称为 resolver (也就是负责解析的 DNS Server),而被设定主机,则只是单纯的 DNS Client 了,也就是提出解析请求的主机。
下面让我们看看 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 的记录(任何主机都是以“记录”来表示,称为 Resource Record)。这个记录可以为一个 IP 位址╋也可以以别名形式来对应一台主机名称╋但无论如何╋所对应的主机名称最终是要被一个 IP 位址所对应着就是了。
同时╋DNS 还能提供“反查询”(reverse lookup) 功能╋也就是以 IP 来查询主机名称。网路上面的许多服务╋如?FTP, SMTP?等等╋都需要到这个功能。其实╋DNS 服务本身就必须要使用反查询功能╋而且在设定上╋也必须要为每个网路建立起 reverse zone。虽然有些人发觉即使没有 reverse zone 也可以使用到 DNS 服务╋但其中弊端却不容易被察觉到╋在这个(中文)网页?http://dnsrd.nctu.edu.tw/Basic/WhenToUse-Rev.html 上面╋您可以看到忽略 revers zone 所致一些问题。
DNS 的名称记录
事实上╋DNS 不仅仅是用来解释位址用的╋而且还可以回答更多关于网路和主机的其它信息╋其中很重要的一个功能就是可以供邮件系统进行路由。这些资料╋通常会以不同的“记录”名称出现在DNS的资料档案中。下面让我们参考一个 Linux 的 DNS 档案╋看看这些记录是如何表示的?
;
; Zone file for siyongc.domain
;
; Then full zone file
;
$TTL 86400
@
INSOAredhat52.siyongc.domain. netman.siyongc.domain. (
1999092801; serial
8H; refresh
2H; retry
1W; expire
1D ); minimun
;
INTXT"A test domain, created by Netman"
INNSredhat52
INNSdebian.home
INMX10redhat52.siyongc.domain.
INMX20debian.home
;
localhostINA127.0.0.1
?
gwINA192.168.0.17
INHINFO"Redhat" "MASQ"
INTXT"The masquerade gateway to internet"
?
redhat52INA192.168.0.17
INMX10redhat52
INMX20debian.home
INHINFO"Dell PII 266" "Linux RedHat"
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