本文基于《计算机网络——自顶向下方法》一书
主机的一种表示方法是使用主机名(比如www.baidu.com),这种主机名便于记忆也乐于被人们接受。然后还有IP地址用于标记主机在网络上的位置,这种定长的IP地址便于被路由器识别。
DNS提供的服务刚刚看到识别主机由两种方式。而域名系统DNS提供了从主机名到IP地址转换到服务,也就是将用户输入的域名转化为IP地址,然后通过网络访问。DNS是一个由分层的DNS服务器实现的分布式数据库和一个使主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行BIND软件的UNIX机器。DNS运行在UDP运输层协议上,使用53号端口。
举一个例子,如果某个运行在主机上的浏览器准备请求URL为www.someschool.com/index.html的页面时会发生什么。为了给www.someschool.com发送请求报文,首先要获得www.someschool.com的地址,其做法如下:
- 该浏览器的主机上运行着DNS应用的客户端浏览器从上述URL中抽出主机域名www.someschool.com,并将这个主机名传输给DNS应用的客户端。DNS客户向DNS服务器发送一个包括主机名的请求报文。DNS客户最终回收到一份响应报文,其中含有www.someschool.com的主机IP地址。一旦浏览器接收到来自DNS的IP地址,它就向该IP地址80端口的HTTP服务器进程发起一个TCP连接。
除了地址转换服务,DNS还提供了一些十分重要的服务:
主机别名:有着复杂主机名的主机拥有一个或者多个别名。在这种情况下,数个不同的主机域名都会导向同一个主机。通常规范主机名最符合规范,但是可能不便于记忆,而主机别名可能便于记忆邮件服务器别名:人们也很希望邮件服务器地址好记忆。但是邮件地址可能会比较复杂,因此可以通过邮件服务器别名使得邮件地址方便易记。电子邮件的应用程序可以调用DNS,对提供的主机名别名进行分析,以获得该主机的规范主机名及其IP地址。负载分配:DNS也用于在冗余的服务器之间进行负载分配,繁忙的站点被冗余分布在多台服务器上。这些服务器运行在不同的端系统上,每个都有不同的IP地址。因此一个规范主机名会和一个地址集合相联系,DNS数据库中会存储着这些IP地址集合,当用户对映射到某地址集合的主机名发出一个DNS请求时,该服务器用IP地址的整个集合进行响应。 DNS工作机理概述
DNS的一种简单设计是互联网上只使用一个DNS服务器,该服务器包含所有的主机名和IP地址的映射,但是这种设计的问题在于:
单点故障:如果这个DNS服务器故障,整个互联网都会瘫痪。通信容量:单个DNS服务器不得不处理所有的DNS查询,会造成严重的通讯拥挤。远距离的集中式服务器:距离过远的服务器会造成很大的时延。维护:单个服务器不得不为所有互联网主机保留记录,这是这个中央数据库十分庞大而且需要频繁更新。 1.分布式、层次数据库
为了处理上述问题,DNS系统采用了大量的DNS服务器,以分层的方式分布于世界各地,没有任何一台服务器拥有世界上所有的映射,也就是说,DNS是一个分布式的系统。大致来说,DNS服务器分为3种:根DNS服务器、顶级域DNS服务器和权威DNS服务器。
根DNS服务器:在全球有许多的根域名服务器,提供的是查找顶级域名对应的顶级域DNS服务器的服务。比如www.baidu.com的顶级域名为com,则根域名服务器会返回com顶级域DNS服务器的IP地址。顶级域DNS服务器:每一个顶级域(比如com, org, edu)都会有对应的顶级域DNS服务器群。顶级域DNS服务器可以根据顶级域名查询到对应的权威DNS服务器。比如访问www.baidu.com的时候,com顶级域DNS服务器会返回baidu.com所在的的权威服务器的IP地址。权威服务器:可以被公共访问的主机的拥有者会选择一个权威DNS服务器保存这个主机的IP地址和主机名的映射,这样子用户就可以通过主机名来访问该主机。
还有另外一类至关重要的主机,称之为本地DNS服务器。每一个ISP(网络服务提供商,比如机构的ISP或者居民区的ISP)都有一台本地的DNS服务器,当主机A和某一个ISP相连的时候,ISP会提供另一个存储有本地DNS服务器的IP地址的主机B的地址。主机A可以通过向主机B获取附近的DNS服务器的地址。



