本地资料DNS
SCHEDULE LOCAL低优先级6 个小节覆盖真题 20102020
做相关真题 · 3 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

DNS

真题练习

在选择题中偶尔有考查,需要掌握 DNS 的域名服务器的不同层级,以及域名解析过程的两种方式(迭代和递归)。

层次域名空间

DNS 使用 层次域名空间 来组织域名,将域名划分为多个级别,每个级别之间以点(.)分隔。域名从右到左逐级递增,最右边是 顶级域名(TLD),然后是 二级域名三级域名,以此类推。

例如,完全限定域名可写成 www.example.com.,末尾的点代表根;通常书写时省略。.com 是顶级域,example.com 是二级域名,www 是该域中的主机名或更低一级标签。

DNS 名称从根开始依次分为顶级域、二级域和更低层标签

DNS 层次域名空间 的设计使得域名分布在不同的管理区域中,每个管理区域负责管理其自己的域名空间。这种分层结构有助于提高可扩展性和效率。

域名服务器

根、顶级域、权威域名服务器与本地递归解析器分工

在 DNS 体系结构中,服务器按照层级划分,每一层负责不同的职责。下面按照从最高层到最低层的顺序,对四类常见的域名服务器进行说明:

  1. 根域名服务器 (Root Name Servers):
    • 这些服务器位于 DNS 解析的最顶端。它们不直接回答关于哪个域名映射到哪个 IP 地址的查询,而是告诉查询者下一步应该询问哪个顶级域名(TLD)服务器。
    • 根区有 13 个逻辑根服务器标识(A~M),每个标识通过任播部署许多实例;不能把“13 个逻辑标识”误解为全球只有 13 台物理机器。
  2. 顶级域名服务器 (Top-Level Domain Name Servers, TLD):
    • 这些服务器负责特定的顶级域名(如 .com, .org, .net 等)。它们为下一级的域名(如 example.com)提供有关权威名称服务器的信息。
  3. 权威域名服务器 (Authoritative Name Servers):
    • 这些服务器为特定的域名(如 example.com)提供详细的 DNS 记录信息(例如 A 记录、MX 记录等)。只有权威服务器才能为其负责的域名提供这些信息。
    • 大多数组织拥有权威 DNS服务器来为他们的域名提供解析服务。
  4. 本地域名服务器/递归解析器 (Local Resolver)
    • 为主机接受递归查询,检查缓存;缓存未命中时代表主机向 DNS 层次结构继续查询。
    • 每个 ISP 或一所大学都可以有一个本地域名服务器。

域名解析过程

主机把递归任务交给本地解析器,解析器再逐级迭代查询

域名解析分为 递归查询迭代查询 两种。

  • 递归查询:请求方要求被查询服务器返回最终答案或错误,而不是只给下一步指引。主机的 stub resolver 通常把任务递归交给本地 DNS 解析器。
  • 迭代查询:请求方会得到一个“指引”,然后自己去问下一层。

迭代查询

本地解析器依次询问根、TLD 和权威服务器完成迭代查询

在域名解析过程中,本地域名服务器 向根域名服务器发送的通常是迭代查询。

根域名服务器 收到查询请求后,不会代替本地域名服务器继续查询,而是返回结果中的两种情况之一:

  • 若能解析出所需的 IP 地址,则直接返回;
  • 若不能解析,则告知本地域名服务器应当联系的下一级顶级域名服务器。

随后,本地域名服务器根据指引,向对应的 顶级域名服务器 继续查询。顶级域名服务器的处理方式类似:

  • 若能解析出所需的 IP 地址,则返回结果;
  • 否则告知本地域名服务器应当访问的下一步权限域名服务器。

权威域名服务器最终返回自己负责区域中的记录。本地域名服务器获得目标域名对应的 IP 地址后,把结果返回给最初发起请求的主机,并按 TTL 缓存答案和中间转介信息。

sequenceDiagram
  participant Host as 主机
  participant Local as 本地域名服务器
  participant Root as 根域名服务器
  participant TLD as 顶级域名服务器 (TLD)
  participant Auth as 权限域名服务器 (Authoritative)

  Host->>Local: 1) 查询 www.example.com
  Local->>Root: 2) 迭代查询(请求根服务器)
  Root-->>Local: 3) Referral: 指向对应的 TLD 服务器(例如 .com)
  Local->>TLD: 4) 迭代查询(请求 TLD 服务器)
  TLD-->>Local: 5) Referral: 指向该域的 权限域名服务器
  Local->>Auth: 6) 迭代查询(请求权限域名服务器)
  Auth-->>Local: 7) 返回最终 IP 地址(例如 93.184.216.34)
  Local-->>Host: 8) 本地 DNS 将 IP 返回给主机
  Note right of Local: 本地域名服务器可能会把结果缓存一段时间

递归查询

纯递归教学模型中每级服务器代替请求方继续向下查询

上图展示的是用于对比概念的 纯递归教学模型:每一级服务器都替请求方继续查询,并把最终结果逐级返回。若根服务器接受这种递归任务,会造成巨大状态与负载压力,因此公网根和 TLD 服务器通常不为普通客户端执行递归。

实际最常见的组合是:主机 → 本地递归解析器 使用递归查询;本地解析器 → 根、TLD、权威服务器 使用迭代查询。也就是说,不是“递归查询几乎不使用”,而是递归职责集中在本地或公共递归解析器,根服务器主要返回转介。

sequenceDiagram
  participant Host as 主机
  participant Local as 本地域名服务器
  participant Root as 根域名服务器
  participant TLD as 顶级域名服务器 (TLD)
  participant Auth as 权限域名服务器 (Authoritative)

  Host->>Local: 1) 查询 www.example.com
  Local->>Root: 2) 向根域名服务器发起递归查询
  Root->>TLD: 3) 根服务器代为查询 TLD 服务器
  TLD->>Auth: 4) TLD 服务器递归查询权限域名服务器
  Auth-->>TLD: 5) 返回最终 IP 地址
  TLD-->>Root: 6) TLD 把结果返回给根服务器
  Root-->>Local: 7) 根服务器把最终 IP 地址交给本地 DNS
  Local-->>Host: 8) 本地 DNS 返回结果给主机

DNS 递归查询和迭代查询的不同点如下:

特点 递归查询 迭代查询
查询责任 被查询服务器负责给出最终答案或错误 被查询服务器可返回转介,由查询方继续询问下一层
查询方复杂度 查询方只需发起一次请求 查询方可能需要多次查询并跟随转介
典型场景 主机 stub resolver → 本地/公共递归解析器 递归解析器 → 根、TLD、权威服务器
服务器负担 需维护递归状态、缓存并代表客户端继续查询 单次请求负担较小,主要返回答案或下一步指引

下面的交互把“主机递归委托 + 解析器迭代追踪”按 8 个消息步骤推进,避免把两种查询误认为互斥的整套方案。

过程流

一次 DNS 解析怎样组合递归与迭代

以 www.example.com 为例,逐步查看主机递归委托本地解析器、解析器跟随根与 TLD 转介、权威服务器返回地址,以及结果按 TTL 缓存。

主机递归委托检查缓存检查缓存询问根服务器询问根服务器询问 TLD询问 TLD询问权威服务器询问权威服务器按 TTL 缓存按 TTL 缓存返回主机

当前查看:主机递归委托主机的 stub resolver 请求本地递归解析器返回 www.example.com 的最终 A/AAAA 记录或错误。

DNS 缓存

无论是浏览器、操作系统,还是本地的递归 DNS 服务器,在接收到域名解析结果之后,都会将其暂时保存在本地 缓存 中。这样,如果同一个域名在短时间内被多次请求,就可以直接从 缓存 中获取结果,而不需要再次向外部服务器发送查询请求。

DNS 记录中包含一个名为 TTL(Time to Live)的字段,用于指定这条记录可以在缓存中 保存多久。比如 TTL3600 表示记录在缓存中可保留 3600 秒(即一小时)。在这段时间内,只要有查询,就可以直接使用缓存的结果。当 TTL 到期后,缓存记录会被丢弃,下一次查询将重新走完整的解析流程。