一、域名系统(Domain Name System, DNS)
在Internet网络中,计算机相互识别彼此靠的是IP,IP就是用句号分割的一串数字,如202.156.36.89。然而对于人类而言,这样的数字是不容易记忆的,于是给这些数字起名字,这些名字就是所谓的域名。每个域名只能对应一个IP地址(此语似乎有误,但尚未理解,欢迎拍砖),但是同一个IP可以有几个名字,其中一个称为规范主机名,其他的称为别名。
说到起名字,是不能乱起的。DNS发展过程中,人们逐渐规范了域名的命名方式,即采用句点分隔的办法,将域名分为不同的层级,这也方便了后来的管理。正规表示的域名的格式类似这样: 三级域名.二级域名.顶级域名. 如www.baidu.com. 注意,末尾有一个句点,这个句点称为根域名,但是一般都忽略不写(不写不等于不存在),作用类似于linux的文件系统的根目录符号“/”。顶级域名是如com. org. cn. 这样的存在,是已经被规定好了的,无法自己取名字的,只能沿用;而二级域名 如baidu.com以及三级域名如www.baidu.com是可以自己取名字的。可以看到,越往前域名的级别越低,三级域名之前还可以继续添加四级、五级,但是一般也就到五级了(未查证)。低级别的域名称为上一级域名的子域名。父域名下面可以设置多个子域名,它们指向不同的IP,如baidu.com下面可以有wenku.baidu.com baike.baidu.com tieba.baidu.com等。假设你注册了一个域名(其实是租赁,过期而不再续费后,就会被销毁供其他人注册、使用),就可以任意设置、使用它的子域名,换句话说,以这个域名为命名基础的子域名也同时被你买断了(红色部分是我尚未确定的)。
不过显而易见的是,只能注册二级或更低级的域名,顶级域名已经被规定为com、org、net等,或者就是国家的英文缩写如cn(代表中国),简而言之,顶级域名是被一些强力组织如政府垄断的,不能修改。一般而言,注册的域名都是二级域名,但是现在很多好的二级域名(如business.com)都已经被抢注了,不得不佩服这些眼光长远之人的赚钱之道,于是只能注册更低级的域名。
购买或注册了一个域名之后,到底要再往下细分几个层级,取决于自己的需求。然而可以想到的是,一旦一个域名有了子域名,那么子域名才是提供那些常见服务如网页、邮件的主机IP名称,而父域名所代表的那台主机本身就不提供“具体服务”了,下面会看到这个域名所对应的IP实际上是一台DNS服务器的IP。例如,baidu.com 有子域名baike.baidu.com,后者对应一台提供网页服务的主机,而前者所对应的主机其实是一台DNS服务器,它的作用就是定位后者的IP。域名的结构类似于树,只有叶子节点才是那些提供常见服务的主机,叶子节点的祖辈都是DNS服务器,它们的任务就是寻找叶子节点。在DNS的领域,我们可以简单的把服务器分为DNS服务器和非 DNS服务器。
二、DNS服务器
有了DNS,还要有能支持这套理论的硬件,这就是DNS服务器了。DNS服务器就是专门用来把域名解析成IP(或者反过来)的服务器。我们可以设想,如果把“将域名解析成IP”这件事完全交给一台服务器,然后全球所有的上网主机都需要访问该服务器以获得解析服务,这会是怎样一副场景?全球能上网的主机那么多,这台服务器的访问量绝对会居高不下,那么可能许多人都要排队等候;另外,一旦这台服务器出了故障,那就谁都别想上网了。。
所以,现实中的硬件体系是不会这么设计的。实际上,全球DNS服务器是一个大的分布式数据库系统。如上面所言,域名是一个树状结构,那么其硬件支撑体系也是一个树状结构,父节点的机器只管理子节点的机器,但不会管理孙节点,即不能越级管理。如下图:
(此为盗图)
最顶层是根域名服务器(实际上是一个大的系统,而不是只有一台,但这里不再详细介绍,google之),根域名服务器中只存储下一级域名(即顶级域名)的DNS服务器的IP信息,同样的道理,顶级域名服务器里只存储二级域名服务器的IP信息,依此循环。
这些DNS服务器都称为权威服务器,它们对自己存储的信息都拥有读写的权力,通俗的讲,这些服务器可以给属于自己管理的IP起名字(当然实际操作由人类完成,比如叫www.baidu.com),他说这个IP叫什么,那这个IP就叫什么,因此称之为权威。于此对应的,是所谓的本地缓存服务器,这也是一种专门的DNS服务器,不同的是,这类服务器对自己所存储的信息只有读而没有写的权力,即它们不能随意修改IP的名字。本地缓存服务器一般用于链接互联网终端用户,比如我们这种普通网民。每台主机链接入网时,其ISP都会为其分配一台本地缓存服务器的IP,自己的电脑需要DNS服务时,首先询问的是本地缓存服务器,然后由该服务器向外面的主DNS服务器系统查询。它的角色类似于代理。
我现在比较关心,谁来架设或维护这些DNS服务器?或者谁需要架设自己的DNS服务器?天下没有免费的午餐,对于根域名服务器,是由ICANN来维护的,不过由于DNS发源于美国,出于国家利益的考虑,肯定是美国政府出钱养着这个机构;而顶级域名的服务器恐怕就外包给一些公司以及政府了,比如com服务器包给某个公司,然后注册到这个域名之下的那些网站都要付一定的管理费(DNS简直就是互联网的水电煤啊~);再往下基本上就是各个公司(或其他组织、个人)自己架设的DNS服务器了,这么做的原因就是想要全世界都能通过域名而不是IP访问自己的网站。
一般来说,大的商业公司都会选择自己架设DNS服务器,自己申请一个二级域名,然后把三、四级域名分配给不同的部门。如,baidu.com就是一个二级域名,它的IP应该是一台DNS服务器,然后下面的www.baidu.com wenku.baidu.com music.baidu.com的IP全部由这个服务器管理。
这里对上面红色部分进行一下补充:虽然还不确定能否买断域名及其子域名的使用权,但是当你要使用这个子域名的时候,仍然需要向某个注册登记机构(由ICANN授权)提交备案,它的任务是验证域名的唯一性,防止重名,然后把域名的相关信息输入到相关的服务器中。
而中小型企业或个人更可能选择托管,即由其他DNS服务提供商来管理自己的域名。比如我注册了mengshuai.com这个域名,然后选择百度的某个DNS服务器来托管我的域名,即把这个服务器作为mengshuai.com的权威服务器。我首先要向某个com顶级域注册登记机构提交备案,验证唯一性后, 该机构就会把mengshuai.com的权威服务器的域名以及IP输入到一个com顶级域DNS服务器中。 一台DNS服务器可以管理好几个域,比如同时管理baidu.com sina.com alibaba.com,而且一旦接管了某个域,它的子域也是默认由该服务器接管的(也可以委派给其他服务器)。托管服务应该也很赚钱吧~
权威服务器与本地缓存服务器的区别其实没有那么大,存储的信息都是类似的,无非就是域名与IP的映射。显然,处于权威链低端的那些叶子节点权威服务器,它们拥有最直接的域名记录,所以某些情况下它们也可以充当本地缓存服务器,方法就是修改客户端的DNS配置,把本地缓存服务器的IP写成某个底端权威服务器的IP。如果一台权威服务器接收到客户端的请求时,会先检查自己是否是请求域名的权威服务器,是的话回直接给出回答;否则,他就转变成了一台缓存服务器,检查自己的缓存,缓存中也没有就会询问其他服务器。
不过还有一个问题:一台服务器如何自己知道本身是不是权威服务器呢?我下面有个猜测:
权威服务器是被上级的权威服务器指定的(最上级显然就是根域名服务器,权威就是从这里一级一级指派下来的),有自己的域名;但是本地缓存服务器却没有自己的域名,或者说不需要有(这一点也是我猜的)。本地缓存服务器的本质就是,客户端发来一条查询,我检查自己的记录,给你一个现成的答案,不管这个答案是人为添加的还是我自动缓存的;没有我就去问别人。刚装好的DNS服务器其实就是一台本地缓存服务器,只拥有最基本的存储、应答功能。