4. DNS:因特网的目录服务
- 人类在日常生活中往往会用一些方式来标识。例如:我们能够通过一个人的身份证号码来标识这个人。另一方面:我们在生活中更乐于用姓名来记住对方,而不是身份证号码。
- 类比到因特网上的主机一样,可以使用多种方式进行标识。主机的一种标识方式是用它的主机名,如:www.baidu.com、www.google.com 等。但是这样却给路由器带来了难以处理的麻烦。正是由于这些原因,主机也可以使用IP地址来进行标识。
- IP地址:一个IP地址由4个字节组成,例如:121.7.106.83。每个字节都被句点分隔开来,表示了0~255的十进制数字。IP地址具有层次结构,当我们从左到右扫描它时,会得到越来越具体的关于主机位于因特网何处的信息。正如我们查看邮政地址一样。
4.1 DNS提供的服务
人们喜欢便于记忆的主机名标识方式,而路由器喜欢定长的、有着层次结构的IP地址。所以我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(DNS Domain Name System)。
那么它是什么呢?
- 1.一个由分层的DNS服务器实现的分布式数据库
- 2.其本身也是一个应用层协议(运行在UDP之上,使用53号端口)
另外DNS还提供其他一些重要的服务:主机别名、邮件服务器别名、负载分配。
4.2 DNS工作机理概述
主机名到IP地址转换服务概述:
-
- 运行在用户主机上的某些应用程序调用DNS的客户端,并指明需要被转换的主机名
-
- 用户主机上的DNS接受到后,向网络中发送一个DNS查询报文
-
- 用户主机上的DNS接受到一个提供所希望映射的DNS回答报文
-
- 最后映射结果被传递到调用DNS的应用程序。
分布式、层次数据库
为了处理扩展性的问题,DNS使用了大量的DNS服务器,它们以层次方式组织并且分布在全世界范围内。
大致来说,由3类DNS服务器:根DNS服务器、顶级域(Top—level Domain,TLD)服务器、权威DNS服务器。其层次结构如下图所示:
除了上述三种DNS服务器之外还有一类重要的DNS服务器被称为本地DNS服务器,严格来讲它并不属于该服务器的层次结构。
- 主机的本地DNS服务器通常“邻近”本主机。
- 它起着代理的作用,并将该请求转发到DNS服务器层次结构中。
下面我们将举例来论证:
假设主机cse.nyu.edu想知道主机gaia.cs.umass.edu的IP地址,同时 cse.nyu.edu 主机的本地DNS服务器为 dns.nyu.edu 如图所示:
在实践中查询通常遵循上图中的模式:从请求主机到本地DNS服务器是递归查询,其余的为迭代查询
DNS缓存
假定主机apricot.nyu.edu向dns.nyu.edu查询cnn.com的IP地址。此后,几小时后,纽约大学的另外一台主机kiwi.nyu.edu也向dns.nyu.edu查询相同的主机名。因为有了缓存(通常设置为两天),该本地DNS服务器可以立即返回cnn.com的IP地址,而不必查询任何其他DNS服务器。
4.3 DNS记录和报文
资源记录是一个包含了下列字段的4元组:
(Name,Value,Type,TTL)
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。Name和Value的值取决于Type。
- Type=A,则Name是主机名,Value是该主机名对应的IP地址。例如:(relayq.bar.fo.com,145.37.93.126,A)
- Type=NS,则Name是个域(例如foo.com),而Value是个知道如何获取该域中主机IP地址的权威DNS服务器的主机名。
- Type=CNAME,则Value是别名为Name的主机对应的规范主机名
- Type=MX,则Value是个别名为Name的邮件服务器的规范主机名。(例如:foo.com,mail.bar.foo.com,MX)
DNS报文
DNS只有两种报文:查询和回答报文
如图:DNS报文中各字段的语义如下:
- 前12字节是首部区域,其中有几个字段。
第一个字段(标识符)是一个16比特的数,用于标识该查询。 - 问题区域包含着正在进行的查询信息。该区域包含:1.名字字段:包含正在被查询的主机名字;2.类型字段:指出有关该名字的正被询问的问题类型(A、MX)
- 回答区域:包含了对最初请求的名字的资源记录。Type、Value、TTL
- 权威区域:包含了其他权威服务器的记录。
- 附加区域包含了其他有帮助的记录。