DNS

了解 DNS 的功能以及域名查询的步骤,可能在选择题中考察。

层次域名空间

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

例如, www.example.com 中, .com “是顶级域名, example.com 是二级域名, www.example.com 是子域名。

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

域名服务器

  1. 根域名服务器 (Root Name Servers):
    • 这些服务器位于 DNS 解析的最顶端。它们不直接回答关于哪个域名映射到哪个 IP 地址的查询,而是告诉查询者下一步应该询问哪个顶级域名 (TLD) 服务器。
    • 根服务器的数量是有限的,并且它们的位置在全球都是已知的。
  2. 顶级域名服务器 (Top-Level Domain Name Servers, TLD Name Servers):
    • 这些服务器负责特定的顶级域名(如 .com, .org, .net 等)。它们为下一级的域名(如 example.com)提供有关权威名称服务器的信息。
  3. 权威域名服务器 (Authoritative Name Servers):
    • 这些服务器为特定的域名(如 example.com)提供详细的 DNS 记录信息(例如 A 记录、MX 记录等)。只有权威服务器才能为其负责的域名提供这些信息。
    • 大多数组织拥有权威 DNS 服务器来为他们的域名提供解析服务。
  4. 本地域名服务器 (Local Name Server)
    • 是在本地网络环境中运行的 DNS 服务器,它为该网络中的设备提供域名解析服务。
    • 每个 ISP 或一所大学都可以有一个本地域名服务器。

域名解析过程

Recursive Query
Iterative Query
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server

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

递归查询

  1. 客户端向递归服务器发送一个请求,比如解析 www.example.com
  2. 如果递归服务器没有缓存结果,它会从根服务器开始,逐级查询:
    • 首先查询根域名服务器(Root Server),获取顶级域(TLD)的服务器地址。
    • 再查询 TLD 服务器(比如 .com),获取权威服务器的地址。
    • 然后查询权威服务器,最终获取目标域名的 IP 地址。
  3. 递归服务器将最终的 IP 地址返回给客户端。

迭代查询

  1. 客户端向本地 DNS 服务器(或根服务器)发送查询请求,比如解析 www.example.com
  2. 根服务器返回 .com 顶级域的 DNS 服务器地址。
  3. 客户端再向 .com 顶级域 DNS 服务器发送查询请求。
  4. .com 顶级域返回 example.com 的权威服务器地址。
  5. 客户端向 example.com 的权威服务器发送查询请求,获取最终的 IP 地址。

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

特点递归查询迭代查询
查询责任DNS 服务器负责查询所有结果客户端逐级查询
查询复杂度客户端简单,只需发起一次请求客户端复杂,需要多次查询
使用场景用户设备、本地 DNS 服务器DNS 服务器之间的交互
性能服务器负担较大服务器负担较小

DNS 缓存

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

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