一、DNS服务器的基本工作

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

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

  1. 域名:服务器、邮件服务器(邮箱地址中 @ 后面的部分)的名称
  2. Class:Class 是用来识别网络信息的,不过,如今除了互联网无其他网络了,因此 Class 的值永远是 IN
  3. 记录类型:表示域名对应何种类型的记录,对于不同的记录类型,服务器想客户端返回的信息也会不同
    • 当类型为 A 时,表示域名对应的是 IP 地址
    • 当类型为 MX 时,表示域名对应的是邮件服务器

A 是 Address 的缩写,意思是“地址”,MX 是 Mail eXchange 的缩写,意思是“邮件交换”

当查询 www.lab.glasscom.com 对应的 IP 时

  • 客户端发送给 DNS 服务器的查询消息有
    1. 域名 = www.lab.glasscom.com
    2. Class = IN
    3. 记录类型 = A
  • DNS 服务器会把收到的三个值与已有记录作比对,当 3 项完全一致,把记录中的 192.0.2.226 返回给客户端

当查询 ton@glasscom.com 对应的服务器地址时

  • 客户端发送查询消息
    1. 域名 = glasscom.com
    2. Class = In
    3. 记录类型 = MX
  • DNS 服务器存有 “邮件服务器的优先级”——10 和 “域名”—— mail.glasscom.com
  • 其中域名还对应了 一个 IP 地址,一并会发给客户端

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

二、域名的层次结构

互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台 DNS 服务器中是不可能的。因此 DNS 服务器的工作方式是这样的:将信息分布保存在多台 DNS 服务器中,这些 DNS 服务器相互接力配合,从而查找出要查询的信息。

DNS 服务器中的所有信息都是按照域名以分层次的结构来保存的,域名都是用句点来分隔的,比如 www.lab.glasscom.com,越靠右的位置标示其层级越高

  • com 是顶级域
  • glasscom 是 com 的子域
  • lab 是 glasscom 的子域
  • www 是服务器名称

三、寻找响应的DNS服务器并获取IP地址

如何知道我们要访问的 Web 服务器信息归哪一台 DNS 服务管呢?互联网中有数万台 DNS 服务器,肯定不能一台一台挨个去找。

下面是一种思路

  • 负责管理 lab.glasscom.com 这个域的 DNS 服务器的 IP 注册到 glasscom.com 域的 DNS 服务器中
  • glasscom.com 域的 DNS 服务器的 IP 地址注册到 com 域的 DNS 服务器中
  • 这样就可以通过上级 DNS 服务器查询出下级 DNS 服务器的 IP 地址
  • 让所有的 DNS 服务器都保存有根域的 DNS 服务器信息,这样任何 DNS 服务器就能访问根域了

com、jp 这些域称为顶级域,看起来是最顶层了,实际非也。在互联网中,com 和 jp 的上面还有一级域,称为根域,根域没有自己的名字,因此在一般书写域名时经常被省略
如果要明确根域,应该像这样 www.lab.glasscom.com. 在域名的最后再加上一个 . ,它代表根域
根域的 DNS 服务器保管着 com、jp 等的 DNS 服务器信息
分配给根域 DNS 服务器的 IP 地址在全世界仅有 13 个

DNS 服务器之间的查询操作

  1. 客户端访问最近的一台DNS服务器
  2. 最近的一台DNS服务器问根域“www.lab.glasscom.com的IP地址是多少”,答“去问xxx.xxx.xxx.xxx吧”
  3. 最近的一台DNS服务器问com“www.lab.glasscom.com的IP地址是多少”,答“去问yyy.yyy.yyy.yyy吧”
  4. 最近的一台DNS服务器问glasscom“www.lab.glasscom.com的IP地址是多少”,答“去问zzz.zzz.zzz.zzz吧”
  5. 最近的一台DNS服务器问lab“www.lab.glasscom.com的IP地址是多少”,答“IP地址是aaa.aaa.aaa.aaa”
  6. 最近的一台DNS服务器高度客户端“www.lab.glasscom.com的IP地址是aaa.aaa.aaa.aaa”
  7. 然后客户端与Web服务器交流通信

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

上面展示的基本原理,在实际互联网中,一台 DNS 服务器可以管理多个域的信息,因此并不是说每个域都有一台自己的 DNS 服务器,现实中上级域和下级域有可能共享同一台 DNS 服务器

此外,有时候并不需要从最上面的根域开始查找,因为 DNS 服务器有一个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么可以直接从缓存中得到所需的信息

并且当查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应

需要注意的是,当信息被缓存后,如果原本的注册信息变了,那就可能导致缓存的信息不正确,因此,DNS 服务器中保存的信息都设置有一个有效期

「@浪里淘沙的小法师」