探索浏览器内部——全世界DNS服务器的大接力

1、DNS服务器的基本工作:

DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。

查询消息主要分为以下三种:

(a)域名

服务器、邮件服务器(邮件地址中@后面的部分)的名称

(b)Class

在最早设计DNS方案时,DNS在互联网以外的其他网络中的应用也被考虑到了,Class就是用来识别网络的信息。例如互联网表示IN。

(c)记录类型

表示域名对应何种类型的记录。例如“A”(Address)表示域名对应的IP地址;“MX”(Mail eXchange 邮件交换)表示域名对应的邮件服务器。

我们通过DNS服务器请求Web服务器是通过域名得到对应的IP地址,当然并不是所有的请求都是以这种形式交互的。我们通过邮件地址请求邮件服务器时并不是直接获取对应的IP地址的,而是会先获取两条信息(例如:10和mail.glasscom.com),这两条信息分别表示邮件服务器的优先级和域名。

当然实际上除了前面提到的“A”和“MX”还有很多其他的记录类型。例如通过IP地址反查域名的PTR类型;查询域名相关别名的CNAME类型;查询DNS服务器IP地址的NS类型以及查询域名属性信息的SOA类型等。

2、域名的层次结构:

到这里可能很多人认为DNS服务器好像和我们普通的Web服务器或邮件服务器类似,除了提供数据的查询也没有什么特别的地方。仔细思考一下,像平时的Web服务器和邮件服务器数量是有限的,而一台DNS服务器是不可能将互联网中所有的信息都保存的,所以DNS服务器之间是存在相互配合的。

DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。域名中越靠右的层级越高。例如“www.lab.glasscom.com”中“com”就是层级最高的那个。一个层级的部分也被称为域,下级的域称为“子域”,每个域都是作为一个整体来处理,一台DNS服务器可以存放多个域的信息。

假设一台DNS服务器只存放一个域的信息,于是DNS服务器也具有了像域名一样的层次结构,每个域的信息都存放在相应层级的DNS服务器中。

3、寻找相应的DNS服务器并获取IP地址:

知道了DNS服务器的内部和分布特点之后,那么接下来的关键点就在于我们如何找到要访问的Web服务器的信息归哪一台DNS服务器管理。

前面其实还遗留了一个问题,那就是DNS服务器之间如何查找,一般而言将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,以此类推直到注册到最上级的DNS服务器。最上级的域我们一般在书写域名时会省略,最上级的域也被称为根域,例如“www.lab.glasscom.com.”在域名的最后再加一个句号,这个句号就代表根域。

由于上级DNS服务器保管着所有的下级DNS服务器的信息,那么我们可以从根域开始一路往下知道任意一个域的DNS服务器。但是首先,需要将根域的DNS服务器信息保存在互联网中所有的DNS服务器中,这样所有的DNS服务器就可以找到并访问根域DNS服务器了。在全世界分配给根域DNS服务器的IP地址只有13个,并且几乎不发生变化,因此将这些地址保存在所有的DNS服务器中也并不是一件难事。

所以寻找相应的DNS服务器并获取IP地址的大概的流程如下(域名为www.lab.glasscom.com):

客户端——>最近的DNS服务器——>根域——>com——>glasscom——>lab(获取IP地址)——>最近的DNS服务器——>客户端

当然现实中一台DNS服务器可以管理多个域的信息,上赛季域有可能共享同一台DNS服务器。

4、通过缓存加快DNS服务器的响应:

当然,有时候并不需要从最上级的根域开始查找,因为DNS服务器有缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接从缓存中得到所需的信息,接下来可以从缓存的位置开始向下进行。另外,如果域名不存在也同样是可以被缓存的。

缓存是有一个有效期的,有效期过后就会被删除。而且,在对查询进行响应时,DNS服务器也会告知客户端这一响应来自缓存还是来自负责管理该域名的DNS服务器。

你可能感兴趣的:(网络是怎样连接的)