zoukankan      html  css  js  c++  java
  • 网络是怎样连接的-全世界DNS服务器的大接力

    1.3 全世界DNS服务器的大接力

    1.3.1 DNS 服务器的基本工作

    前文介绍了解析器与 DNS 服务器之间的交互过程,下面来了解一下DNS 服务器的工作。

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

    客户端的查询消息

    其中,来自客户端的查询消息包含以下 3 种信息。

    域名

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

    Class

    在最早设计 DNS 方案时,DNS 在互联网以外的其他网络中的应用也被考虑到了,而 Class 就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此 Class 的值永远是代表互联网的 IN

    记录类型

    表示域名对应何种类型的记录。例如,当类型为 A 时,表示域名对应的是 IP 地址。当类型为 MX 时,表示域名对应的是邮件服务器。对于不同的记录类型,服务器向客户端返回的信息也会不同

    注释

    A 是 Address 的缩写。

    MX是Mail eXchange的缩写,邮件交换。

    DNS根据记录进行查询

    DNS 服务器上事先保存有前面这 3 种信息对应的记录数据,如图 1.14所示。DNS 服务器就是根据这些记录查找符合查询请求的内容并对客户端作出响应的。

    查询域名对应IP使用A类型

    如果要查询 www.lab.glasscom.com 这个域名对应的 IP 地址,客户端会向 DNS 服务器发送包含以下信息的查询消息。

    • 域名 = www.lab.glasscom.com
    • Class = IN
    • 记录类型 = A

    DNS 服务器会从已有的记录中查找域名、Class 和记录类型全部匹配的记录。

    假如 DNS 服务器中的记录如图 1.14 所示,那么第一行记录与查询消息中的 3 个项目完全一致。

    于是,DNS 服务器会将记录中的192.0.2.226 这个值返回给客户端。

    www只是惯例

    然而,Web 服务器的域名有很多都是像www.lab.glasscom.com 这样以 www 开头的,但这并不是一定之规,只是因为最早设计 Web 的时候,很多 Web 服务器都采用了 www 这样的命名,后来就形成了一个惯例而已。

    因此,无论是 WebServer1 也好,MySrv 也好,只要是作为 A记录在 DNS 服务器上注册的,都可以作为 Web 服务器的域名。

    查询邮件服务器使用MX类型

    在查询 IP 地址时我们使用 A 这个记录类型,而查询邮件服务器时则要使用 MX 类型。

    这是因为在 DNS 服务器上,IP 地址是保存在A记录中的,而邮件服务器则是保存在 MX 记录中的。

    例如,对于一个邮件地址tone@glasscom.com,当需要知道这个地址对应的邮件服务器时,我们需要提供 @ 后面的那一串名称。

    查询消息的内容如下:

    • 域名 = glasscom.com
    • Class = IN
    • 记录类型 = MX

    DNS 服务器会返回 10 和 mail.glasscom.com 这两条信息。

    当记录类型为 MX 时,DNS 服务器会在记录中保存两种信息,分别是邮件服务器的域名和优先级。

    当一个邮件地址对应多个邮件服务器时,需要根据优先级来判断哪个邮件服务器是优先的。优先级数值较小的邮件服务器代表更优先。

    此外,MX 记录的返回消息还包括邮件服务器 mail.glasscom.com 的 IP 地址。

    上表的第三行就是 mail.glasscom.com 的 IP 地址,因此只要用 mail.glasscom.com 的域名就可以找到这条记录。在这个例子中,我们得到的 IP 地址是 192.0.2.227。

    综上所述,DNS 服务器的基本工作就是根据需要查询的域名和记录类型查找相关的记录,并向客户端返回响应消息。

    1.3.2 域名的层次结构

    互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台 DNS 服务器中是不可能的。

    一定会出现在 DNS 服务器中找不到要查询的信息的情况。下面来看一看此时DNS 服务器是如何工作的。

    DNS服务器是如何工作的

    将信息分布保存在多台 DNS 服务器中,这些 DNS 服务器相互接力配合,从而查找出要查询的信息。

    信息是如何在 DNS 服务器上注册并保存的

    首先,DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的。

    DNS 中的域名都是用句点来分隔的,比如 www.lab.glasscom.com,这里的句点代表了不同层次之间的界限。

    在域名中,越靠右的位置表示其层级越高。其中相当于一个层级的部分称为域,因此此 com 域的下一层是 glasscom 域,再下一层是 lab 域,再下面才是 www 这个名字。

    这种具有层次结构的域名信息会注册到 DNS 服务器中,而每个域都是作为一个整体来处理的。

    一个域的信息是作为一个整体存放在 DNS 服务器中的,不能将一个域拆开来存放在多台 DNS 服务器中。

    DNS 服务器和域之间的关系也并不总是一对一的,一台 DNS 服务器中也可以存放多个域的信息。

    创建子域分配给不同的组织使用

    通过创建下级的域来分配给不同的国家、公司和组织使用。

    比如 www.nikkeibp.co.jp 这个域名,

    最上层的 jp 代表分配给日本这个国家的域。

    下一层的 co 是日本国内进行分类的域,代表公司。

    再下层的 nikkeibp 就是分配给某个公司的域。

    最下层的 www 就是服务器的名称。

    1.3.3 寻找相应的 DNS 服务器并获取 IP 地址

    如何找到 DNS 服务器中存放的信息

    关键在于如何找到我们要访问的 Web 服务器的信息归哪一台 DNS 服务器管。

    首先,将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推。

    也就是说,负责管理 lab.glasscom.com 这个域的 DNS 服务器的 IP 地址需要注册到 glasscom.com 域的 DNS服务器中,而 glasscom.com 域的 DNS 服务器的 IP 地址又需要注册到 com域的 DNS 服务器中。

    这样,我们就可以通过上级 DNS 服务器查询出下级DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了。

    什么是根域

    com、jp 这些域不是最顶层,在互联网中,com 和 jp 的上面还有一级域,称为根域。 

    如果要明确表示根域,应该像这样在域名的最后再加上一个句点而这个最后的句点就代表根域。

    根域的 DNS 服务器中保管着com、jp 等的 DNS 服务器的信息。

    www.lab.glasscom.com. 

    将根域的 DNS 服务器信息保存在互联网中所有的 DNS 服务器中

    这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了

     客户端只要能够找到任意一台DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器,如下图所示。

    分配给根域 DNS 服务器的 IP 地址在全世界仅有 13 个,而且这些地址几乎不发生变化,因此将这些地址保存在所有的 DNS 服务器中也并不是一件难事。

    实际上,根域DNS 服务器的相关信息已经包含在 DNS 服务器程序的配置文件中了,因此只要安装了 DNS 服务器程序,这些信息也就被自动配置好了。

    DNS服务器查询的流程

    客户端访问最近的DNS服务器

    如图下图所示,客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址),假设我们要查询 www.lab.glasscom.com 这台 Web 服务器的相关信息(图①)。

    由于最近的 DNS 服务器中没有存放 www.lab.glasscom.com 这一域名对应的信息,所以我们需要从顶层开始向下查找。

    通过最近的DNS服务器访问根服务器

    最近的 DNS 服务器中保存了根域 DNS 服务器的信息,因此它会将来自客户端的查询消息转发给根域 DNS 服务器(图②)。

    根域服务器中也没有 www.lab.glasscom.com 这个域名,但根据域名结构可以判断这个域名属于 com 域。

    因此根域 DNS 服务器会返回它所管理的 com 域中的DNS 服务器的 IP 地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去 com 域问问看”。

    通过最近的DNS服务器访问com域的DNS服务器

    接下来,最近的 DNS 服务器又会向 com 域的DNS 服务器发送查询消息(图③)。

    通过最近的DNS服务器访问glasscom.com域的DNS服务器

    com 域中也没有 www.lab.glasscom.com这个域名的信息,和刚才一样,com 域服务器会返回它下面的 glasscom.com域的 DNS 服务器的 IP 地址。

    以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标 DNS 服务器(图⑤),只要向目标 DNS 服务器发送查询消息,就能够得到我们需要的答案,也就是 www.lab.glasscom.com 的 IP 地址了。

     

    收到客户端的查询消息之后,DNS 服务器会按照前面的方法来查询 IP地址,并返回给客户端(图⑥)。

    这样,客户端就知道了 Web 服务器的 IP 地址,也就能够对其进行访问了(图 ⑦)。

    1.3.4 通过缓存加快 DNS 服务器的响应

    真实互联网中一台DNS服务器可能包含多级域的信息

    上图展示的是基本原理,与真实互联网中的工作方式还是有一些区别的。

    在真实的互联网中,一台 DNS 服务器可以管理多个域的信息,因此并不是像上图这样每个域都有一台自己的 DNS 服务器。

    图中,每一个域旁边都写着一台 DNS 服务器,但现实中上级域和下级域有可能共享同一台 DNS 服务器。

    在这种情况下,访问上级 DNS 服务器时就可以向下跳过一级 DNS 服务器,直接返回再下一级 DNS 服务器的相关信息。

    DNS服务会缓存之前查询过的域名

    此外,有时候并不需要从最上级的根域开始查找,因为 DNS 服务器有一个缓存功能,可以记住之前查询过的域名。

    如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。

    相比每次都从根域找起来说,缓存可以减少查询所需的时间。并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。

    信息缓存有时效

    这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。

    因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。

    而且,在对查询进行响应时,DNS 服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的 DNS 服务器。

  • 相关阅读:
    TP框架的小知识
    执行sql语句的注意事项
    关于引用值的总结
    几道经典容易错的php面试题
    Smarty模板的学习_2
    Smarty模板的学习_1
    数据库的权限操作
    redhat与zlib兼容性问题?
    Ubuntu中Qt Creator无法启动调试
    ubuntu下安装chrome浏览器和flash插件
  • 原文地址:https://www.cnblogs.com/errornull/p/9956390.html
Copyright © 2011-2022 走看看