DNS(域名系统)

引言

DNS(域名系统)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。
从应用的角度上看,对DNS的访问是通过一个地址解析器(resolver)来完成的。在Unix主机中,该解析器主要是通过两个库函数gethostbyname(3)和gethostbyaddress(3)来访问的。

DNS基础

DNS的名字空间和Unix的文件系统相似,也具有层次结构。下图显示了这种层次结构。

每个节点(上图中的圆圈)有一个至多63个字符长的标识。这棵树的树根是没有任何标识的特殊节点。命名标识中一律不区分大小写。命名树上任何一个节点的域名就是将从该节点到最高节点的域名串连起来,中间使用一个点“.”分割这些域名。域名树中的每个节点必须有一个唯一的域名,但域名树中的不同节点可使用相同的标识。
顶级域名被分为三个部分:
(1)arpa是一个用作地址到名字转换的特殊域
(2)7个3字符长的普通域,有些书也将这些域称为组织域。
(3)所有2字符长的域均是基于ISO3166中定义的国家代码,这些域被称为国家域,或地理域。 常见的me域名是前南斯拉夫地区西南部的国家黑山共和国(Montenegro,旧译“门的内哥罗”)的国家域名。现在也推出了一些新的域名,比如cloud顶级域名,属于国际通用新顶级域名,与.com、.net一样。然而.cloud域名行业特性更强,适合云计算设备、跳伞、天气预报等类型的企业或个人均可注册使用。
DNS的一个重要特征是DNS中域名中的授权,没有哪个机构来管理域名树中的每个标识,相反只有一个机构,即网络信息中心NIC负责分配顶级域和委派其他指定区域的授权机构。
一个独立管理的DNS子树称为一个区域。一个常见的区域是一个二级域,如noao.edu.许多二级域将它们的区域划分为更小的区域。例如大学可能根据不同的系来划分区域,公司可能根据不同的部门来划分区域。
一旦一个区域的授权机构被委派后,有它负责向该区域提供多个名字服务器。当一个新系统假如到一个区域中时,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将它们加到名字服务器的数据库中。一个名字服务器负责一个或多个区域。一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。主、辅名字服务器必须是独立和冗余的,以便当某个名字服务器发生故障不会影响该区域的名字服务。当一个新主机加入一个区域时,区域管理者将适当的信息(最少包括名字和IP地址)加入到运行在主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新调入它的配置文件。辅名字服务器(通常是每隔3个小时)向主名字服务器询问是否有新数据。如果有新数据,则通过区域传送方式获得新数据。
当一个名字服务器没有请求的信息时,它必须与其它的名字服务器联系,这正是DNS的分布特性。然而,并不是每个名字服务器都知道如何同其他名字服务器联系。相反,每个名字服务器必须知道如何同根的名字服务器联系。所有的主名字服务器必须知道如何同根的名字服务器联系。跟服务器则知道所有二级域中的每个授权名字服务器的名字和位置(即IP地址)。这意味着这样一个反复的过程:正在处理请求的名字服务器与跟服务器联系,跟服务器告诉它与另一个名字服务器联系。
为了减少Internet上DNS的通信量,所有的名字服务器均使用高速缓存。