提前了解下DNS服务器——分布式、层次数据库
为了处理扩展性问题,DNS使用了大量的 DNS服务器,它们以层次方式组织,并且分布在全世界范围内。没有一台DNS服务器拥有因特网上所有主机的映射。相反,该映射分布在所有的DNS服务器上。大致说来,有3种类型的DNS服务器:根DNS服务器、顶级域(TLD)DNS服务器和权威DNS服
务器。它们像上图所示组织起来。
根 DNS服务器:到2011年秋季,共有247个根服务器。尽管我们将这些根 DNS服务器中的每个都视为单个的服务器,但每台“服务器”实际上是一个冗余服务器的网络,以提供安全性和可靠性。
顶级域(DNS)服务器:这些服务器负责顶级域名如com、org、net、edu和 gov,以及所有国家的顶级域名如uk、fr、ca和jp。
权威 DNS 服务器:在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。一个组织机构的权威DNS服务器收藏了这些DNS记录。一个组织机构能够选择实现它自己的权威 DNS服务器以保存这些记录;另一种方法是,该组织能够支付费用,让这些记录存储在某个服务提供商的一个权威DNS服务器中。
还有另一类重要的DNS,称为本地DNS服务器。一个本地DNS服务器严格说来并不属于该服务器的层次结构,但它对DNS层次结构是重要的。每个ISP(如一个大学、一个公司或一个居民区的ISP)都有一台本地DNS服务器。当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台其本地 DNS 服务器的IP地址。
浏览器输入URL回车后会发生什么?
- 浏览器从上述 URL中抽取出主机名www.someschool. edu,并将这台主机名传给用户主机上运行着DNS应用的客户端。
- DNS客户首先向本地DNS服务器发送一个包含主机名的查询报文,如果有映射直接返回IP地址。
- 如果本地DNS服务器没有,那么它就把DNS查询报文发到根DNS服务器。
- 根DNS服务器注意到其主机名由edu结尾,并向本地DNS服务器返回负责edu的TLD的IP地址列表。
- 本地DNS服务器再次向这些TLD服务器之一发送查询报文,如果主机名包含二级域名,那么TLD就把负责这个二级域名的权威DNS服务器IP地址。
- 最后本地DNS服务器直接发送查询报文给权威服务器,它把主机名的IP地址返回给本地DNS服务器。
- DNS客户最终会收到一份回答报文,其中含有对应于该主机名的P地址。
- 一旦浏览器接收到来自 DNS的该P地址,它能够向位于该IP地址80端口的HTTP服务器进程发起一个 TCP连接。
注意到在上述过程中全程没有使用到DNS缓存,为了获得一台主机名的映射,共发送了8份 DNS报文:4份查询报文和4份回答报文!
接下来补充下利用DNS缓存减少这种查询流量的方法。
DNS缓存
为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用了缓存技术。
DNS缓存的原理
在一个请求链中,当某 DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,它能将该回答中的信息缓存在本地存储器中。例如,当本地 DNS服务器dns. poly.edu从某个DNS 服务器接收到一个回答,它能够缓存包含在该回答中的任何信息。如果在DNS服务器中缓存了一台主机名IP地址对,另一个对相同主机名的查询到达该DNS服务器时,该DNS服务器就能够提供所要求的P地址,即使它不是该主机名的权威服务器。由于主机和主机名与P地址间的映射并不是永久的,DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。