在讲解DNS之前,我们先来了解一组概念
主机名是唯一标识一个主机的方式
例如,cnn.com, www.yahoo.com, gaia.cs.umass.edu, cis.poly.edu
由于主机名很难被路由器解析,所以主机也被IP地址所唯一标识
IP地址是hierarchical。
域名系统的任务是:将主机名翻译成IP地址
端口号到底是什么东西?先把端口号理解为主机中一个应用的一个标识吧。只要我们开发一个应用,就必须给这个应用设置一个端口号。
DNS是个网路应用,同时也是个应用层协议。
但是DNS普遍被其他应用层协议所使用,例如HTTP, SMTP, and FTP(这很好理解,应用之间是可以互相帮忙的嘛):将用户提供的主机名翻译成IP地址
举个例子,当浏览器请求URL www.someschool.edu/index.html, 之后的详细过程是怎么样的?
1.浏览器同样的user machine运行DNS应用的客户端
2.浏览器从URL中提取主机名,www.someschool.edu,将这个主机名pass给DNS应用的客户端
3.DNS客户端send一个包含这个主机名的查询给DNS服务器
4.DSN客户端最终受到一个回复,这个回复里面包含了这个主机名的IP地址
5.一旦浏览器从DNS客户端获得了IP地址,浏览器就可以和那个IP地址的80号端口的HTTP服务器进程建立TCP连接。
DNS还提供了其他一些重要的服务
一个复杂的主机名可以有一个或者更多的昵称
主机本身的主机名
主机名的昵称更好记忆
DNS可以被邮件应用invoke来获取某个alias hostname的规范主机名。
DNS可以用来执行在重复的服务器之间执行负载分配,例如重复的Web服务器。
一些繁忙的站点(例如cnn.com)在多个服务器之间执行重复。每个服务器run在一个不同的端系统中,每个服务器都有一个不同的IP地址。对于重复的Web服务器,a set of IP addresses就这样和一个规范主机名相关。 DNS数据库包含了this set of IP addresses. 当客户端执对一个主机名执行DNS查询的时候,服务器就会返回一整套IP地址,但是每一次回复都会按照IP地址的次序进行轮转。
因为一个客户端typically发送HTTP请求报文给the iP address listed first in the set, DNS轮转(循环)将流量进行了分布给重复的服务器。
现在我们讨论DNS应用到底是怎么工作的!我们刚说了DNS还会提供其他服务,例如主机别称,邮件服务器别称和负载分配。但是我们还是拿DNS最主要的功能:将主机名翻译成IP地址 来举例子看一下DNS应用到底是怎么工作的。
假定浏览器需要将用户的主机名翻译成一个IP地址。
那么用户就会调用DNS的客户端,指定需要翻译的主机名。在这个主机上的DNS应用就会把这个主机名接过来,就给网络发送查询报文。
所有的DNS查询和回复报文都被包含在UDP报文段(segment)中发送给端口53。
After a delay, 在用户主机上的DNS就会收到DNS服务器发过来的回复报文,提供了想要的mapping. 然后这个mapping就被pass调用程序中。
从这个角度来看,DNS就是个黑盒子。但是实际上,这个黑盒子的内部非常复杂,包含了大量的分布在全球的DNS服务器。DNS作为应用层协议规定了这些DNS服务器和查询主机之间是如何通讯的。
一个简单的DNS设计会让一个DNS服务器包含所有的mappings。在这个集中式的设计中,客户端直接将所有的查询导向到一个单独的DNS服务器,然后这个DNS服务器直接回应给这个查询的客户端。虽然这种设计看起来很诱人,但是对今天的因特网来说不适合。因为今天的因特网太多了,集中式设计的问题很多!
所以, 一个DNS服务器,一个集中式的数据库没有扩展性,所以DNS应用是分布式的设计。OK,下面我们就讲解真正的DNS设计
为了处理扩展性问题,DNS使用了大量的服务器,组织成层次的形式,分布在全世界。
初步估计,有3类DNS服务器
假定一个DNS客户端想要确定主机名为www.amazaon.com的IP地址。初步估计,接下来的事情是这样的
1.客户端联系一个根服务器,根服务器返回顶级域名服务器com的IP地址
2.然后客户端联系这些顶级服务器中的一个,顶级域名服务器返回一个权威服务器amazon.com的IP地址
3.最后,客户端联系amazon.com的一个权威域名服务器,权威域名服务器返回www.amazon.com的IP地址
除了根域名服务器,顶级域名服务器,官方域名服务器,还有一类重要的域名服务器叫做local DNS server(本地DNS服务器)
,
本地DNS服务器严格来讲,不属于DNS的层次结构里面的。但是本地DNS服务器对DNS层次结构式非常重要的。
每个ISP都有一个本地DNS服务器,也叫做默认名字服务器
当一台主机连接上一个ISP之后,ISP就会给从ISP的本地域名服务器中提供一个或者多个IP地址。你可以很容易地确定你的本地DNS服务器的IP地址,一个主机的本地DNS服务器typically close to the host。
对一个机构ISP,这个本地DNS服务器可能就在和这个主机的同一个局域网中。
对于一个居民区ISP, 本地DNS服务typically separated from the host 也就是几个路由器的距离。
当一个主机发起DNS查询的时候,这个查询就会被发送给本地DNS服务器,这个本地DNS服务器就像个代理一样,将这个查询转发给DNS服务器层次结构。
好了,我们来举个例子
有可能让你介绍这个图,我觉得这有可能的
DNS缓存的Idea很简单。在一个查询链中,当一个DNS服务器收到DNS回复之后,该DNS服务器就可以缓存这个mapping到它自己的本地存储中。
还有DNS记录和报文没有讲,放在下一节讲解吧