我们知道有两种方式可以识别主机:通过主机名或者IP地址。人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的、有着层次结构的IP地址。为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。
DNS运行在UDP上,使用53端口。
除了进行主机名到IP地址的转换外,DNS还提供了一些重要的服务:
·主机别名。有着复杂主机名的主机可以拥有一个或多个别名。原复杂主机名也叫规范主机名。主机别名(如果有的话)比主机规范名更容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址。
·邮件服务器别名。同主机别名类似,电子邮件应用程序调用DNS,对提供的邮件服务器别名进行解析,以获得该主机的规范主机名以及其IP地址。MX(Mail Exchanger,邮件交换)记录允许一个公司的邮件服务器和Web服务器用相同的(别名化的)主机名。
·负载分配。DNS也用于在冗余的服务器(如冗余的Web服务器等)之间进行负载分配。对于这些冗余的Web服务器,一个IP地址集合对应于同一个规范主机名。DNS数据库中存储着这些IP地址集合。当客户机为映射到这个IP地址集合的名字发出一个DNS请求时,该服务器用包含全部这些地址的报文回答,但在每个回答中旋转这些地址排放顺序。因为客户机通常总是向IP地址排在最前面的服务器发送HTTP请求报文,所以DNS就在所有这些冗余的Web服务器之间旋转分配负载。DNS旋转同样适用于邮件服务器,因此,多个邮件服务器可以具有相同的别名。
DNS工作机理:
DNS采用分布式的设计方案。
下面是DNS服务器的部分层次结构(由上到下,每层分别是根服务器、TLD服务器、权威服务器):
1.分布式、层次数据库
大致来说,有3种类型的DNS服务器:根DNS服务器、*域(Top Level Domain,TLD)DNS服务器和权威DNS服务器。
假设一个DNS客户机要确定主机名www.amazon.com的IP地址。粗略来讲,将发生下列事件:
·客户机请求根服务器以发现com TLD服务器
·客户机请求com TLD服务器以得到 amazon.com 权威服务器
·客户机请求amazon.com 权威服务器以得到对 www.amazon.com的IP地址
下面来详细介绍一下这三种类型的DNS服务器:
·根DNS服务器
在因特网上有13个根DNS服务器(标号为a到m),尽管我们将这13个根DNS服务器中的每个都视为单个的服务器,但每台“服务器”实际上是冗余服务器的群集,以提供安全性和可靠性。
·*域(TLD)服务器
负责com, org, net, edu等,以及所有*国家域 uk, fr, ca, jp.
·权威DNS服务器
组织的DNS服务器为组织的服务器(如Web和电子邮件)提供对IP映射的权威主机名。
能够由组织或服务提供商维护。
·本地DNS服务器
本地DNS服务器严格来说并不属于DNS服务器的层次结构,但它对DNS层次结构是很重要的。
图 1 图 2
在图1的例子中用到了递归查询和迭代查询。从cis.poly.edu到dns.poly.edu发出的查询是递归查询,因为该查询请求dns.poly.edu以自己的名义获得该映射。而后继的三个是迭代查询,因为所有的回答都是直接返回给dns.poly.edu。
从理论上,所有的DNS查询既可以是迭代的也可以是递归的。例如,图2显示了一条DNS查询链,其中所有查询都是递归的。
实际中,查询通常遵循图1中的模式:从请求主机到本地DNS服务器的查询是递归的,其余查询是迭代的。
2.DNS缓存
为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用缓存技术。
原理:当一个DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,DNS服务器能将回答中的信息缓存在本地存储器。由于主机与主机名的IP地址映射决不是永久的,所以DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。
DNS记录:
实现DNS分布式数据库的所有DNS服务器共同存储着资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。下面是RR的基本格式:
Type=A name 是主机名
Value是IP地址
Type=NS name 是域 (如 foo.com)
Value是该域的权威名字服务器的IP地址
Type=MX Value是与name相联系的邮件服务器
Type=CNAME Value是别名为name的主机对应的规范主机名
注:通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名
DNS报文:
DNS只有两种报文,即查询和回答报文,并且这两种报文有着相同的格式。
下图是DNS报文格式: