引言
只要您在互联网上发送电子邮件或浏览Web,您就会用到域名服务器,而您自己可能都不知道您在使用它们。域名服务器(即DNS)是互联网的相当重要且完全隐藏的部分,并且很神奇。域名服务器系统在全球范围内构建了一个最大最活跃的分布式数据库。如果没有域名服务器,互联网就会迅速停止运转。
在本文中,我们将看一下域名服务器系统,让您了解这个系统的工作原理并领会其神奇的功能。
您浏览网页或发送电子邮件时都要用到域名。例如,URL“http://www.howstuffworks.com”中包含域名howstuffworks.com。电子邮件地址ikonw@howstuffworks.com中也包含此域名。
有实际意义的名称(如“howstuffworks.com”)方便记忆,可是对计算机却非如此。所有计算机都使用称为IP地址的名称来相互引用。例如,我们称作“www.howstuffworks.com”的计算机有一个IP地址216.183.103.150。每当您使用域名时,都会使用互联网的域名服务器(DNS)将对我们而言有实际意义的域名转换为计算机可读的IP地址。在一天的浏览网页和发送电子邮件工作中,您可能已访问了数百次域名服务器!
域名服务器就是要将域名转换为IP地址。这听起来好像是一个简单的任务,但实际上有五大难点:
目前正在使用的IP地址达数十亿个,并且大多数计算机也有实义名称。每天会发出数十亿个域名服务器请求。每个人每天就可以轻松发出一百个或更多的域名服务器请求,同时每天都会有几亿用户和计算机在使用互联网。
域名和IP地址每天都在发生变化。
每天都会创建新的域名。
每天都会有数百万用户更改和添加域名和IP地址。
域名服务器系统是一个数据库,世界上的任何其他数据库都无法获取如此多的请求。世界上的任何其他数据库每天也不会有数百万用户对其进行更改。这就是导致域名服务器系统如此独特的原因。
IP地址
若要使互联网上的所有计算机井然有序,则应为每个计算机分配称为IP地址的唯一地址。IP的全称是Internet Protocol,即互联网协议,并且这些地址都是由32位数字组成,通常采用“点分十进制数”的四个“八进制数”表示。典型的IP地址如下所示:
216.183.103.150
IP地址中的四个数字称作八进制数,因为这四个数字可以具有0-256之间的值(每个八进制数具有28种可能)。
互联网中的每台计算机都具有自己的IP地址。由于服务器具有静态IP地址,因此不会经常变化。通过调制解调器进行拨号的家用计算机通常具有的IP地址是在您拨号时由ISP(互联网服务提供商)分配的。对于此次会话来说,此IP地址是唯一的,但是在您下次拨号时会发生改变。这样,ISP仅需要为其所支持的每个调制解调器而每个客户提供一个IP地址。
如果您使用的是安装Windows操作系统的计算机,则可以使用命令WINIPCFG.EXE(对于Windows 2000/XP,为IPCONFIG.EXE)查看当前的IP地址。在UNIX计算机上,将nslookup连同计算机名称一起键入(如“nslookup www.howstuffworks.com”)就可以显示计算机的IP地址(使用命令hostname可获知计算机的名称)。
有关IP地址的更多信息,请参见IANA。
就互联网上的计算机而言,您只需将相应的IP地址告知服务器即可。例如,您可以在浏览器中键入http://216.183.103.150,然后您就会到达包含用于howstuffworks的Web服务器的计算机。域名的确是为人们提供了方便。
域名如果我们必须记住每天访问的所有网站的IP地址,那么我们肯定会疯掉。我们不擅长记住一长串的数字,但却擅长记住单词(域名就是由单词构成的)。您的脑海中可能已存储了数百个域名。例如:
howstuffworks.com——典型名称 www.yahoo.com ——世界上最知名的名称之一 www.mit.edu ——麻省理工学院的域名 encarta.msn.com ——不是以www开始的Web服务器 www.bbc.co.uk ——包含四个部分而非三个部分的名称 ftp.microsoft.com ——FTP服务器而非Web服务器这些域名的COM、EDU和UK部分被称作顶级域名或一级域名。存在几百个顶级域名(包括COM、EDU、GOV、MIL、NET、ORG和INT)以及具有唯一性的代表每个国家/地区的双字母组合。
每个顶级域内都包含一个二级域名的大型列表。例如,在COM一级域名中,您可以获得:
howstuffworks yahoo msn microsoft 以及几百万个其他的域名...COM顶级域中的每一个名称都必须是唯一的,但是在不同的域中可以重复。例如,howstuffworks.com和howstuffworks.org就代表完全不同的计算机。
对于bbc.co.uk来说,它是一个三级域名。尽管最多可以有127级域名,但超过四级的域名很少见。
最左边的词语(如www或encarta)代表主机名。它指明了域中的一台具体机器(有特定的IP地址)的名称。给定的域可以包含数百万个主机名,只要这些主机名在该域中都是唯一的。
由于给定域中的所有名称都必须是唯一的,因此,就需要一个实体来管理列表并确保名称不会重复。例如,COM域不得包含任何重复的名称,这样就需要一个名为Network Solutions的公司负责维护此列表。当您注册域名时,该域名需要通过在Network Solutions公司工作的注册人员的审查,才能添加到列表中。而Network Solutions会保留一个名为whois数据库的中央数据库,该数据库包含了有关每个域的所有者和名称服务器的信息。如果您转到whois表单,则可以找到有关当前存在的任何域的信息。
虽然让一个中央授权机构来跟踪COM(和其他)顶级域中的名称的数据库很重要,但您不会想将COM域中的所有信息集中在一个数据库中。例如,微软拥有数十万个IP地址和主机名。微软希望维护其自身的用于microsoft.com域名的域名服务器。同样,英国可能希望管理uk顶级域名,而澳大利亚可能希望管理au域名,依此类推。因此,域名服务器系统是一个分布式数据库。微软全权负责处理用于microsoft.com的名称服务器——它维护实施它的域名服务器系统部分的计算机,并且微软可以在任何时间更改其域的数据库,因为它拥有自己的域名服务器。
每个域名都具有用于处理其请求的域名服务器,并有专人来维护此域名服务器中的记录。域名服务器系统的一个最令人惊奇的方面是——它是通过由数百万人管理的数百万台计算机完全分发到全世界的,然而其行为表现则类似于一个简单的集成式数据库!
分布式系统名称服务器整天都在做两件事情:
接受来自程序的有关将域名转换为IP地址的请求。 接受来自其他名称服务器的有关将域名转换为IP地址的请求。收到请求后,名称服务器可以对其执行下列四种操作之一:
使用一个IP地址回答请求,因为它已知道域的IP地址。 联系另一个名称服务器并尝试找到请求的名称对应的IP地址。它可能需要多次执行此操作。 回答:“我不知道您请求的域的IP地址,以下是我知道的名称服务器的IP地址。” 返回一条错误消息,因为被请求的域名是无效或不存在的。当您在浏览器中键入URL时,浏览器首先会将域名和主机名转换为一个IP地址,以便它能够从该IP地址上的计算机中请求网页(有关整个过程的详细信息,请参见Web服务器工作原理)。若要执行此转换,浏览器必须与名称服务器进行对话。
当您在互联网上设置计算机时,您(或您所安装的用于连接到ISP的软件)必须告知计算机它在将域名转换为IP地址时应使用的名称服务器。在一些系统上,当您连接到ISP时,将为计算机动态提供域名服务器;而在其他一些计算机上,域名服务器是硬连接的。如果您使用的是安装了Windows 95/98/ME的计算机,则可以使用命令WINIPCFG.EXE(对于Windows 2000/XP,使用IPCONFIG)来查看当前的名称服务器。在UNIX计算机上,则将nslookup连同计算机名称一起键入进行查看。计算机上需要与名称服务器进行通信以解析域名的任何程序,都知道应与之通信的名称服务器,因为它可以从操作系统中获取计算机的名称服务器的IP地址。
因此,浏览器会联系其名称服务器并表示,“我需要您为我将域名转换为IP地址。”例如,如果在浏览器中键入“www.howstuffworks.com”,则浏览器需要将该URL转换为一个IP地址。于是浏览器会将“www.howstuffworks.com”交给其默认名称服务器并请求它进行转换。
名称服务器可能已知道www.howstuffworks.com的IP地址。如果最近收到过解析www.howstuffworks.com的其他请求(名称服务器会对IP地址进行缓存以加快处理速度),就可能存在这种情况。在这种情况下,名称服务器可以立即返回相应的IP地址。不过,让我们假定名称服务器必须从头开始。
名称服务器通过联系一个根名称服务器开始搜索IP地址。根服务器知道处理顶级域的所有名称服务器的IP地址。您的名称服务器将会向根服务器请求www.howstuffworks.com的IP地址,根服务器会表示(假定没有缓存),“我不知道www.howstuffworks.com的IP地址,但存在COM名称服务器的IP地址。”显而易见,对于整个过程而言,这些根服务器非常重要,因此:
有许多根服务器散布在全球的各个角落。 每一个名称服务器都具有一个包含所有已知根服务器的列表。名称服务器将与列表中的第一个根服务器联系,如果这样做不起作用,那么它会与列表中的下一个根服务器联系,依此类推。下面是典型的名称服务器所拥有的根服务器的典型列表:
; This file holds the information on root name servers
; needed to initialize cache of Internet domain name
; servers (e.g. reference this file in the
; "cache . andlt;fileandgt;" configuration file of BIND domain
: name servers).
;
; This file is made available by InterNIC registration
; services under anonymous FTP as
; file /domain/named.root
; on server FTP.RS.INTERNIC.NET
; -OR- under Gopher at RS.INTERNIC.NET
; under menu InterNIC Registration Services (NSI)
; submenu InterNIC Registration Archives
; file named.root
;
; last update:Aug 22, 1997
; related version of root zone:1997082200
;
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.3600000 A 198.41.0.4
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.3600000 A 128.9.0.107
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.3600000 A 192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.3600000 A 128.63.2.53
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.3600000 A 192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.3600000 A 198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.3600000 A 193.0.14.129
;
; temporarily housed at ISI (IANA)
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.3600000 A 202.12.27.33
; End of File
虽然格式有点奇怪,但是它基本上显示了包含13个不同的根服务器的实际IP地址的列表。
根服务器知道可处理几百个顶级域的名称服务器的IP地址。它可以为您的名称服务器返回COM域名的名称服务器的IP地址。然后您的名称服务器会询问COM名称服务器是否知道www.howstuffworks.com的IP地址。由于COM域名的名称服务器知道处理howstuffworks.com域名的名称服务器的IP地址,于是它会返回这些IP地址。您的名称服务器然后又会与howstuffworks.com的名称服务器联系,并询问它是否知道www.howstuffworks.com的IP地址。如果它知道,它则会将相应的IP地址返回给您的名称服务器,接着您的名称服务器会将该IP地址返回给浏览器,然后浏览器会与www.howstuffworks.com的服务器联系以获取网页。
完成此工作的一个关键点是冗余。由于在每一级别上都会有多个名称服务器,因此如果一个名称服务器失败,那还有其他的名称服务器可以处理请求。例如,有三个不同的计算机用于运行HOWSTUFFWORKS.COM请求的名称服务器。而只有在所有三个计算机都无法工作的情况下才会出现问题。
另一个关键点是缓存。在名称服务器解析某个请求之后,它会对接收到的所有 IP地址进行缓存。在该名称服务器为任何COM域请求过根服务器之后,它就会知道处理COM域的名称服务器的IP地址,因此它无需再次为此信息而烦扰根服务器。名称服务器可以为每个请求执行此操作,并且此缓存有助于防止操作中断。
不过,名称服务器并不是永久进行缓存。缓存有一个名为生存时间(TTL)的组件,用于控制服务器缓存某条信息的时间。当服务器接收到一个IP地址时,会随之接收到TTL。名称服务器会将IP地址缓存一段时间(范围是几分钟到几天),然后丢弃它。TTL允许对名称服务器中的更改进行传播。不过,并非所有名称服务器都会遵守它们接收到的TTL。在howstuffworks将其计算机移动到新的服务器时,花费了三个星期的时间才将转换传播到整个Web。我们在主页的左上角放置了一个名为“新服务器”的小标记,因此在转换期间,用户可以分辨看到的是新服务器还是旧服务器。
创建新域名某人想要创建新的域名必须做两件事:
找到用来存放域名的名称服务器。 注册域名。从技术上说,域中不一定需要计算机,而只需要一台能够处理域名请求的名称服务器就可以了。
可以通过两种方式可以让您获取域的名称服务器:
您可以自行创建并管理名称服务器。 您可以付费请ISP或主机服务公司为您处理名称服务器。大多数大型公司都具有自己的域名服务器。而大多数小型公司则是付费使用一些域名服务器。
HowStuffWorks的历史就是一个典型的例子。当howstuffworks.com刚创建时,开始只是一个寄放域。此域寄放在名为www.webhosting.com的公司中。Webhosting.com负责维护名称服务器,并维护为该域创建单个“正在构建”网页的计算机。
若要创建域,则需要填写提供域名注册服务的公司(例如:register.com、verio.com和networksolutions.com)规定的表单。这些公司创建“正在构建”网页,并在其名称服务器中创建一个条目,然后将表单数据提交到whois数据库中。COM、ORG和NET等名称服务器会使用最新的IP地址信息进行更新,更新频率为一天两次。这时,就会存在一个域,并且任何人都可以访问相应的“正在构建”网页。
然后HowStuffWorks就开始在www.howstuffworks.com这个域下发布内容。我们通过Tabne(现在是Verio, Inc. 的一部分)设立了主机帐户,Tabnet运行HowStuffWorks的域名服务器和承载HowStuffWorks网页的计算机。此类计算机称作虚拟Web主机,可同时承载多个域。大约有五百个不同的域共享同一个处理器。
由于HowStuffWorks日益受到欢迎,因此虚拟主机已无法满足需求,从而HowStuffWorks需要拥有自己的服务器。此时,HowStuffWorks开始维护自己的专用计算机,并开始管理自己的域名服务器。HowStuffWorks拥有主服务器和辅助服务器:
AUTH-NS1.HOWSTUFFWORKS.COM 209.116.69.78 AUTH-NS2.HOWSTUFFWORKS.COM 209.116.69.79HowStuffWorks的主域名服务器是auth-ns1.howstuffworks.com。而我们对主服务器所做的任何更改都会自动传送给辅助服务器,后者也是由我们的ISP维护的。
所有这些计算机都将运行名为BIND的名称服务器软件。BIND通过主服务器上如下所示的文本文件,可以了解HowStuffWorks域中的所有计算机:
@ NS auth-ns1.howstuffworks.com.
@ NS auth-ns2.howstuffworks.com.
@ MX 10 mail
mail A 209.170.137.42
vip1 A 216.183.103.150
www CNAME vip1
从文件的开头进行解码,便可以看到:
前两行指出主名称服务器和辅助名称服务器。 下一行称为MX记录。当您向HowStuffWorks上的任何人发送电子邮件时,发送电子邮件的软件会与名称服务器联系以获取MX记录,于是它就会知道HowStuffWorks的SMTP服务器的位置。许多大型系统都具有多个处理传入电子邮件的计算机,因此就会产生多个MX记录。 下一行指出用于处理对mail.howstuffworks.com的请求的计算机。 下一行指出用于处理对oak.howstuffworks.com的请求的IP地址。 下一行指出用于处理对howstuffworks.com(无主机名)的请求的IP地址。从这个文件中我们可以看到,HowStuffWorks服务器基础结构是由具有单独的IP地址的若干物理计算机构成的。这些主机具有类似mail和www的别名。任何内容都可以具有别名。例如,此文件中可以包含一个用于scoobydoo.howstuffworks.com的条目,并且该条目可以指向名为walnut的物理计算机。也可以对yahoo.howstuffworks.com使用别名,并且该别名可以指向yahoo。实际上,对别名没有什么限制。我们也可以创建多个名称服务器并对我们的域分段。
通过上面的说明您会发现,域名服务器是一种令人称奇的分布式数据库。域名服务器每天通过由数百万个用户管理的数百万个名称服务器所构成的网络来处理针对数十亿个名称的数十亿个请求。每当您发送电子邮件或查看URL时,您就会向散布在全球范围内的多个名称服务器发出请求。令人惊奇的是,此过程通常是完全不可见而且非常可靠的!