全方位认识DNS( 二 )


我们看到域名资源记录有一个Type字段,用来表明记录的类型 。这是为什么呢?因为对于一个域名来说,通常并非只记录其IP地址,还可能需要一些其他种类的记录,一些常见的记录类型如下:
 
 

全方位认识DNS

文章插图
 
 
 
 
我们知道不能只用一台域名服务器来响应所有的DNS查询,因为没有一台机器能够给全球的用户提供查询服务,计算能力、存储、带宽都不允许 。只能合理组织一个域名服务器集群,使他们协同工作,共同提供域名解析服务 。接下来首先要面对的一个问题是如何合理地将所有的域名资源记录存储到不同的域名服务器上 。
前面说过域名的名字空间可以组织为一棵树,这里我们可以进一步将其划分为不重叠的区域(DNS zone),针对上图的域名空间,一种可能的域名划分如下图:
 
全方位认识DNS

文章插图
 
 
 
域名划分
然后将每个区域与多个域名服务器(其中一个是master,其他slave服务器则用来提供数据备份、加快解析速度、保证服务可用性)关联起来,称这些域名服务器为该区域的权威域名服务器(Authoritative Name Servers ),它保存两类域名资源记录:
1:该区域内所有域名的域名资源记录 。
2:父区域和子区域的域名服务器对应的域名资源记录(主要是NS记录) 。
这样,所有的域名资源记录都保存在多个域名服务器中,并且所有的域名服务器也组成了一个层次的索引结构,便于我们后面进行域名解析 。下面以一个简化的域名空间为例子,说明域名资源记录是如何保存在域名服务器中的,如下图a:
 
全方位认识DNS

文章插图
 
 
域名服务器
图中域名空间划分为A, B, C, D, E, F, G七个DNS区域,每个DNS区域都有多个权威域名服务器,这些域名服务器里面保存了许多域名解析记录 。对于上图的NDS区域E来说,它的权威域名服务器里面保存的记录如图中表格所示 。
【全方位认识DNS】仔细观察上图你可能会发现区域A、B并没有父区域,他们之间并没有一条路径连在一起 。这将导致一个很麻烦的问题,那就是区域A的权威域名服务器可能根本不知道区域B的存在 。认识到这一点后,你可能会想出一个很自然的解决方案,就是在A中记录B域名服务器的地址,同时在B中记录A的,这样它们两个就联系起来了 。但是考虑到我们有超过250个顶级域名,这样做并不是很恰当 。
而我们使用的域名系统则采用了一种更加聪明的方法,那就是引入根域名服务器,它保存了所有顶级区域的权威域名服务器记录 。现在通过根域名服务器,我们可以找到所有的顶级区域的权威域名服务器,然后就可以往下一级一级找下去了 。下图为全球根域名服务器的分布图,可以在这里找到 。
 
全方位认识DNS

文章插图
 
 
顶级域名服务器
现在为止,我们的权威域名服务器和根域名服务器其实组成了一个树,树根为根域名服务器,下面每个节点都是一个区域的权威域名服务器,对于图a中各个DNS区域的权威域名服务器,它们组成了下面这棵树(实际中,一个权威域名服务器可能保存有多个DNS区域的记录,因此权威域名服务器之间的联系并不构成一棵树 。这部分的详细内容可以参考RFC 1034: 4. NAME SERVERS 。下面为了容易理解,将其简化为一棵树):
 
全方位认识DNS

文章插图
 
 
域名服务器树
域名解析
我们已经有了一个域名服务器集群,该集群合理地保存了域名空间和域名资源记录的对应关系 。现在我们要做的就是发送一个DNS请求给域名服务器,然后坐等它返回正确的域名资源记录,这个过程叫作域名解析 。
严格来说,域名解析的过程最早要追溯到建立网络连接 。因为每当连接上网络之后,计算机会自动获得一个默认的DNS服务器,当然你也可以用自己信任的DNS服务器,比如8.8.8.8(DNS服务器也有信任不信任之分,是的,实践篇会讲到),我们把这个域名服务器也叫作本地域名服务器 。接下来当我们需要知道一个域名对应的资源记录时,会向本地域名服务器发起请求,如果该域名恰好在本地域名服务器所辖属的域名区域(DNS zone)内,那么可以直接返回记录 。


推荐阅读