2024年4月30日发(作者:)

DNS的基础知识

什么是DNS

DNS全称是Domain Name System,域名系统。它的作用是将一个域名转换成IP

地址。

早期的时候大家使用IP地址通信,那个时候Web技术还没有出现,Internet还只是

一个小圈子里的玩意儿。在相互通信的时候使用IP地址也没有什么问题。不过IP地址不

方便记忆,人们还是使用了一种叫做主机名(HostName)的方式来代替IP地址。这种机制

很简单,就是在本机存放一个Hosts文件,该文件以文本方式存放IP地址和主机名之间的

对应关系。当一个TCP/IP命令使用了主机名作为参数的时候,系统会自动在Hosts文件

中查找相应的记录。如果找到则将对应的IP地址传递给实际通信的程序。在

WindowsNT/2000的操作系统中这个文件存放在System32driversetc目录下,而

Windows9X或Windows Me则存放在Windows目录下。大家可以打开这个文件看一下,

默认情况下该文件只有一项:127.0.0.1 Localhost。所以大家访问LocalHost实际上就是

访问127.0.0.1,即本机。当时为了方便Internet上的用户使用主机名访问计算机,每个

网络管理员每天必须将本地的Hosts文件上传给Internet的网管(实际上当时还没有

Internet这个专有名词,这里仅仅是为了方便描述,熟悉Internet历史的朋友不要死抠),

然后Internet网管将各地的Hosts文件合并,排除名字冲突。然后将合并的Hosts文件

传送给各地的网管,然后各地网关再将这些文件分发给本地的用户,用户更新自己的Hosts

文件。经过这些复杂的过程后用户才能够使用主机名访问Internet上的其他主机。当

Internet的主机数逐渐增加的时候Hosts文件也不断增加,后来的Hosts文件足足有几十

兆,维护和管理都十分麻烦。 于是技术人员开发了DNS,完全抛弃了落后的Hosts文件

方式,并且使得名字可以增加许多新的属性。

新的名字解释系统(DNS),允许每个网络的管理员自行决定如何为自己的计算机命名,

并保证这些名名不会发生冲突,从而省去了繁琐的Hosts文件合并过程。通过一种服务器

/客户机的机制让网络上的服务器合作共同解释所有的域名。其核心的设计思想就是将服务

器的命名权集中到一个分层管理的体系中,每个管理层次只能有有自己的名字空间。这样

的同时也就将用户为自己的计算机命名的权利剥夺了。实际上你的计算机在网络上叫什么

名字是由控制名字服务器的管理员决定的。域名管理员通过配置DNS服务器的解释文件决

定了一个Ip地址对应的域名是什么,或者反过来决定了一个域名对应的IP地址是什么。

当你希望别人通过域名来访问你的计算机的时候,你必须要求域名管理员为你的IP地址分

配一个名称。当然域名管理员只能为IP分配自己授权域名根下的名称。

现在让我们来看一下整个DNS的名字管理系统是怎么运作的。

域名的解释体制

我们现在看到的域名是一个一小数点份分段的一串字符,每个小数点分段代表名字管

理层次。域名的根掌握在InternetNIC手中,顶级域名(.com 、.net 、.org等)则委托

Networksolutions以及一系列顶级域名注册商维护。二级域名(如:、

等)则由每个域名注册人自行维护。用户如果希望获得某个域名,则首先

必须获取对应域名的管理授权。方法就是向顶上的一个层次注册自己的名字服务器。比如:

你想获得一个叫的域名。你就必须获得的域名

管理授权,于是你必须向上一级域名管理机构申请(注册),即必须向.com管理机构注册,

就是Networksolutions或其他顶级域名注册商(如万网、厦门精通等)。一旦你获取了这

个域名的授权,你就可以在该域名前面加上任何名 称了。当然为了行使你的命名权利,你

还必须拥有至少一台(按标准是两台)名字服务器来管理你的域名,这些服务器必须24

小时连接在Internet上,不能中断,必须拥有固定有效的Internet IP地址。也就是说,

你必须拥有至少一台托管主机。这样提第一个问题的朋友也许会觉得有些失望。别急,继

续看下去,我们有相应的解决方法。

上面描述的仅仅是域名的管理体制,它保证了域名在Internet上不会重复,因为每一

级的管理层次都保证自己底下的域名不会重复。所以整个Internet的域名都不会重复。当

然这样的代价就是你必须向上一级管理机构交钱才能够使用域名。以下我们介绍一下域名

的解释机制。

首先,每个域名服务器(DNS Domain Name Server)仅需要保存所管理的域名底

下的名字解释。比如的名字服务器只保存以结尾的所有名字解释记录,

包括名字与IP地址的对应关系;邮件地址和邮件服务器的对应关系;还有,很重要的,下

一级域名和对应的名字服务器的关系。这些名字解释记录在DNS的术语中称为资源记录

(Resourse Record,缩写为RR)。每一个名字服务器还存放了Internet域名根服务器的

地址。当你向任何一台Internet名字服务器查询的名字的时候,其过程如

下图:

由于Internet上只有的名字服务器才存放着的资源记录。

所有除非你刚好使用我们的名字服务器作为你的名字解释服务器,否则当你向他们查询的

时候这些服务器都不能直接回答这个问题。但是大家都 有根服务器的资料,所以,当不能

解释的时候都会将这个查询转发给根服务器。当然,根服务器也没有相应的名字解释。不

过,根服务器会根据查询的名字给出一个能够接近这个答案的名字服务器地址,接下来的

操作也是这样,直到最后找到我们的名字服务器,由我们的名字服务器做出授权解释。

从上面的过程我们可以看到,实际上我们只要知道了Internet上任意一台DNS服务

器的地址就可以让他为我们解释所有的域名了。虽然这台服务器不一定保存了我们申请解

释的域名的数据,它也可以通过根服务器,一级一级地找到保存这个域名解释记录的服务

器,最后给出答案。看上去这个过程非常麻烦,但是实际域名解释的速度是非常快的,因

为根名字服务器和顶级域名服务器(.net,.com等)都在Internet的高速主干上。一个二

级域名的查询一般在2-3秒钟之内就可以解决。另外为了加快查询速度,所有的DNS服

务器都会将查询到的结果和中间的结果缓存下来。比如在上面的过程中,负责处理客户请

求的DNS服务器会保存了.net名字服务器的地址、的服务器地址和

的结果。如果下次要查的是,那么这台DNS服务器就会直

接找的服务器解决,不再重复步骤2-5的过程。这样就省去了两个查询过程。不

过缓存是一把双刃剑,它加快了域名查询的速度,但是会导致域名信息变化需要花一定的

时间才能生效。这点我在后面会详细介绍。