我们知道用户在与互联网上的主机通信时,必须知道对方的IP地址。但是每个IP地址都是由32位的二进制组成,即使是十进制的IP地址表示形式,用户想要记住也是很难的一件事,况且互联网有那么多的主机。
互联网中的主机通常不仅仅只有IP地址,还有对应的便于用户记忆的主机名字,比如/。产生于应用层上的域名系统NDS(DomainNameSystem)就可以用来把互联网上的主机名转换成IP地址。
互联网中的域名系统DNS被设计成一个层次树状结构的联机分布式数据库系统,并且采取的是客户服务器的方式。DNS使大多数名字都在本地进行解析,只有少量的解析需要在互联网通信,因此效率很高。采取分布式的一个好处是,即使单个计算机出了故障,也不会妨碍DNS系统的正常运行。
域名到IP地址的解析是通过许多分布在互联网上的域名服务器完成的。解析的主要过程如下:当一个主机中的进程需要把域名解析为IP地址时,该进程就会调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS的请求报中,以UDP用户数据报方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。获得IP地址的后主机即可进行通信。
我们通过域名树的方式来查看域名的结构,可以看出来,它实际上是一个倒过来的树,最上面的是根,没有对应的名字。因为根没有名字,所以根下面的一级节点就是顶级域名,往下同理。我们以/为例,www是三级域名,baidu是二级域名