DNS:因特网的目录服务—— DNS 工作机理概述

        DNS工作过程的总体概括,我们的讨论将集中在主机名到IP地址转换服务方面。

        假设运行在用户主机上的某些应用程序(如Web浏览器或邮件阅读器)需要将主机名转换为IP地址。这些应用程序将调用DNS的客户端,并指明需要被转换的主机名(在很多基于UNIX的机器上,应用程序为了执行这种转换需要调用函数gethostbyname())。用户主机上的DNS接收到后,向网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经端口53发送。经过若于毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文。这个映射结果则被传递到调用DNS的应用程序。因此,从用户主机上调用应用程序的角度看,DNS是一个提供简单、直接的转换服务的黑盒子。但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。DNS的一种简单设计是在因特网上只使用一个DNS服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的DNS服务器,同时该DNS服务器直接对所有的查询客户做出响应。尽管这种设计的简单性非常具有吸引力,但它不适用于当今的因特网,因为因特网有着数量巨大(并持续增长)的主机。这种集中式设计的问题包括:

  • 单点故障(a single point of failure)。如果该DNS 服务器崩溃,整个因特网随之瘫痪!
  • 通信容量(traffic volume)。单个DNS服务器不得不处理所有的DNS查询(用于为上亿台主机产生的所有HTTP请求报文和电子邮件报文服务)。
  • 远距离的集中式数据库(distant centralized  database)。单个DNS 服务器不可能“邻近”所有查询客户。如果我们将单台DNS服务器放在纽约市,那么所有来自澳大利亚的查询必须传播到地球的另一边,中间也许还要经过低速和拥塞的链路这将导致严重的时延。
  • 维护(maintenance)。单个DNS服务器将不得不为所有的因特网主机保留记录这不仅将使这个中央数据库非常庞大,而且它还不得不为解决每个新添加的主机而频繁更新。

总的来说,在单一DNS服务器上运行集中式数据库完全没有可扩展能力。因此,DNS采用了分布式的设计方案。事实上,DNS是一个在因特网上实现分布式数据库的精彩范例。

1.分布式、层次数据库

        为了处理扩展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内。没有一台DNS服务器拥有因特网上所有主机的映射。相反。该映射分布在所有的DNS服务器上。大致说来,有3种类型的DNS服务器:根DNS服务器顶级域(Top-Level Domain,TLD)DNS服务器和权威DNS服务器。这些服务器以上图中所示的层次结构组织起来。为了理解这3种类型的DNS服务器交互的方式,假定一个DNS客户要决定主机名www.amazon.com的IP地址。粗略说来,将发生下列事件。客户首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。该客户则与这些TLD服务器之一联系,它将为amazon.com返回权威服务器的IP地址。最后,该客户与amazon.com权威服务器之一联系,它为主机名www.amazon.com返回其IP地址。我们将很快更为详细地考察DNS查找过程。不过我们先仔细看一下这3种类型的DNS服务器。

  • 根DNS服务器。在因特网上有13个根DNS服务器(标号为A到M),它们中的大部分位于北美洲。尽管我们将这13个根DNS服务器中的每个都视为单个的服务器,但每台“服务器”实际上是一个冗余服务器的网络,以提供安全性和可靠性
  • 顶级域(DNS)服务器。这些服务器负责顶级域名如com、org、net、edu和gov,以及所有国家的顶级域名如uk、fr、ca和jp。Verisign Global Registry Services 公司维护com顶级域的TLD服务器;Educause 公司维护edu顶级域的TLD服务器。
  • 权威DNS服务器。在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为地址。一个组织机构的权威DNS服务器收藏了这些DNS记录。一个组织机构能够选择实现它自己的权威DNS服务器以保存这些记录;另一种方法是,该组织能够支付费用,让这些记录存储在某个服务提供商的一个权威DNS服务器中。多数大学和大公司实现和维护它们自己基本和辅助(备份)的权威DNS服务器。

        根、TLD和权威DNS服务器都处在该DNS服务器的层次结构中,如上图中所示还有另一类重要的DNS,称为本地DNS服务器(local DNS server)。一个本地DNS 服务器严格说来并不属于该服务器的层次结构,但它对DNS层次结构是重要的。每个ISP(如个大学、一个系、一个公司或一个居民区的ISP)都有一台本地DNS服务器(也叫默认名字服务器)。当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址(通常通过DHCP 服务)。通过访问Windows或UNIX的网络状态窗口,能够容易地确定你本地DNS服务器的IP地址。主机的本地DNS服务器通常“邻近”本主机。对某机构ISP而言,本地DNS服务器可能就与主机在同一个局域网中; 对于某居民区ISP来说,本地DNS服务器通常与主机相隔不超过几台路由器。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中。

        我们来看一个简单的例子,假设主机 cis.poly.edu 想知道主机 gaia.csumiass.edu的IP地址。同时假设理工大学(Polytechnic)的本地DNS服务器为dns.poly.edu,并且gaia.cs.umass.edu的权威DNS服务器为dns.umass.edu。如下图所示,主机cis.poly.edu首先向它的本地DNS服务器dns.poly.edu发送一个DNS查询报文。该查询报文含有被转换的主机名gaia.cs.umass.edu。本地DNS服务器将该报文转发到根DNS服务器。该根DNS服务器注意到其edu前缀并向本地DNS服务器返回负责edu的TLD的IP地址列表。该本地DNS服务器则再次向这些TLD服务器之一发送查询报文。该TD服务器注意到umass.edu前级,并用权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的 dns.umass.edu。最后,本地 DNS 服务器直接向dns.umass.edu重发查询报文dns.umass.edu用gaia.cs.umass.edu的IP地址进行响应。注意到在本例中,为了获得一台主机名的映射,共发送了8份DNS报文:4份查询报文和4份回答报文!我们将很快看到利用DNS缓存减少这种查询流量的方法。

        我们前面的例子假设了TLD服务器知道用于主机的权威DNS服务器的IP地址。一般而言,这种假设并不总是正确的。相反,TLD服务器只是知道中间的某个DNS服务器,该中间DNS服务器依次才能知道用于该主机的权威DNS服务器。例如,再次假设马萨诸塞大学有一台用于本大学的DNS服务器,它称为dns.umass.edu。同时假设该大学的每个系都有自己的DNS服务器,每个系的DNS服务器是本系所有主机的权威服务器。在这种情况下,当中间DNS服务器dns.umass.edu收到了对某主机的请求时,该主机名是以cs.umass.edu结尾,它向 dns. poly.edu返回dns.cs.umass.edu的IP地址,后者是所有以cs.umass.edu结尾的主机的权威服务器。本地DNS服务器dns.poly.edu则向权威DNS 服务器发送查询,该权威DNS服务器将请求的映射发送给本地DNS服务器,该本地服务器依次向请求主机返回该映射。在这个例子中,共发送了10份DNS报文!

        上图所示的例子利用了递归查询(recursive query)和迭代查询(iterative query)。从cis.poly.edu 到 dns. poly.edu发出的查询是递归査询,因为该査询请求 dns.poly.edu 以自己的名义获得该映射。而后继的3个查询是迭代查询,因为所有的回答都是直接返回给dns.poly.edu。从理论上讲,任何 DNS 查询既可以是迭代的也能是递归的。例如,下图显示了一条 DNS 查询链,其中的所有查询都是递归的。实践中,查询通常遵循上图中的模式。从请求主机到本地 DNS服务器的查询是递归的,其余的查询是迭代的。

2. DNS 缓存

        DNS系统的一个非常重要特色: DNS缓存(DNS caching)。实际上,为了改善时延性能并减少在因特网上到处传输的DNS报文数量DNS广泛使用了缓存技术。DNS缓存的原理非常简单。在一个请求链中,当某DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,它能将该回答中的信息缓存在本地存储器中。例如、在图上中,每当本地 DNS 服务器dns. Poly.edu从某个DNS服务器接收到一个回答它能够缓存包含在该回答中的任何信息如果在DNS服务器中缓存了一台主机名/IP地址对,另一个对相同主机名的查询到达该DNS服务器时,该DNS服务器就能够提供所要求的IP地址,即使它不是该主机名的权威服务器。由于主机和主机名与IP地址间的映射并不是永久的,DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。举一个例子,假定主机apricot.poly.edu向dns.poly.edu查询主机名cnn.com的IP地址。此后,假定过了几个小时,Polytechnic理工大学的另外一台主机如kiwi.poly.edu也向dns.poly.edu查询相同的主机名。因为有了缓存,该本地DNS服务器可以立即返回cnn.com的IP地址,而不必查询任何其他DNS服务器。本地DNS服务器也能够缓存TLD服务器的IP地址,因而允许本地DNS统过查询链中的根DNS服务器(这经常发生)。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值