域名系统DNS(DomainNameSystem)是互联网使用的命名系统,用来把便于人们使用的机器名字转化为IP地址,域名系统就是名字系统。很多应用层的软件经常直接使用DNS。计算机用户只是间接而不是直接使用域名系统。DNS为互联网的各种网络提供了核心服务。
用户和主机通信的时候,通常是很难记住IP地址,但应用层为了便于用户记住各种网络应用,连接在互联网上的主机不仅有IP地址,还有便于记忆的主机名字。域名系统就是把互联网上的主机名字转化为IP地址。
为什么主机在IP数据报的时候要使用IP地址而不是域名呢?这是因为IP地址的长度是固定的32位(IPV6是固定的128位),而域名的长度并不是固定的,及其处理起来比较困难。
从理论上来讲,整个互联网可以只使用一个域名服务器,使它装入互联网上的所有主机名,并回答所有对IP地址的查询,但是这种做法简直太愚蠢,这样的域名服务器肯定会因为过负荷工作而无法正常工作,而且一旦这个域名服务器出现故障,整个互联网就会瘫痪。因此早在年就开始采用层次树状结构的命名方法,并使用分布式的域名系统DNS。DNS互联网标准是RFC[],RFC[]。
互联网的DNS被设计为成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析(resolve),仅有少量解析在互联网上通信,因此DNS系统的效率很高,由于DNS是分布式系统,即使是单个计算机出现了故障,也不会妨碍整个DNS系统的正常运行。
域名到IP地址的解析过程是由分布式在互联网上的许多域名服务程序(域名服务器)共同完成的。域名服务程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器。
当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据包方式发给本地域名服务器(使用UDP的好处是减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获取到目标主机的IP地址就可以进行通信。
若本地域名服务器不能回答该请求,则该域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。至于查找过程,我们进一步讨论。
从语法上讲,每一个域名都是由标号(label)序列组成,各标号之间使用.隔离开,例如:就是中央电视台用于收发电子邮件的计算机(即邮件服务器)的域名,它由三个标号组成,其中标