Skip to content

DNS

域名系统(Domain Name System),主要任务是进行主机名到 IP 地址的转换。

DNS 是:

  1. 一个由分层的 DNS 服务器实现的分布式数据库

  2. 一个使得主机能够查询分布式数据库的应用层协议

传输协议与端口号

DNS 使用 UDP 传输协议,端口号是 53

DNS 服务器类型

  1. 根 DNS 服务器
  2. 顶级域名 DNS 服务器
  3. 权威 DNS 服务器
  4. 本地 DNS 服务器(不属于 DNS 服务器层次结构中)

查询路径

  1. 本地 DNS 服务器缓存

当客户端需要查询一个主机名的 IP 地址时,首先会尝试从本地 DNS 服务器缓存中查找,没有查询到结果,则从本地的 hosts 文件配置内容中查找。

  1. 本地 hosts 文件配置内容

从本地的 hosts 文件配置内容中没有找到对应的记录则会请求本地 DNS 服务器。在 Windows 操作系统中,hosts 文件位于 c:\Windows\System32\drivers\ets 目录下。

  1. 本地 DNS 服务器

客户端与本地 DNS 服务器的查询方式通常是递归查询,本地 DNS 服务器与根 DNS 服务器、顶级域 DNS 服务器和权威 DNS 服务器的查询方式是迭代查询。本地 DNS 服务器首先向根 DNS 服务器发送查询报文,根 DNS 服务器返回顶级域 DNS 服务器对应的 IP 地址的响应报文;然后本地 DNS 服务器向顶级域 DNS 服务器发送查询报文,顶级域 DNS 服务器返回权威 DNS 服务器的 IP 地址的响应报文;紧接着本地 DNS 服务器向权威 DNS 服务器发送查询报文,由权威 DNS 服务器返回主机名对应的 IP 地址;最后由本地 DNS 服务器向客户端发送响应报文。

在客户端看来,仅仅向本地 DNS 服务器发送了一次查询报文,然后接收本地 DNS 服务器返回的响应报文,从中接收到对应主机名的 IP 地址。

  1. 根 DNS 服务器

  2. 顶级域 DNS 服务器

  3. 权威 DNS 服务器

查询方法

  1. 递归查询

递归查询的特点是:客户机只用发一次请求,即可收到结果。

  1. 迭代查询

迭代查询的特点是:客户机需要多次发送请求才可收到结果。

DNS 缓存

在一个请求链中,当某 DNS 服务器接接收一个 DNS 回答时,它能够将该回答中的信息保存到本地存储器中。

缓存时间

由于主机和主机名与 IP 地址的映射并不是永久的,DNS 服务器会在一段时间(一般是两天)后丢弃该信息。

资源记录

DNS 存储了资源记录(Resource Record),简称 RR,RR 提供了主机名到 IP 地址的映射。

RR 是一个四元组(Name,Value, Type, TTL)

Name 和 Value 的值取决于 Type。

  • Type 等于 A,则 Name 是主机名,Value 是该主机名对应的 IP 地址。如 relay1.bar.foo.com, 145,37,93,126, A 就是一条类型 A 记录。

  • Type 等于 NS,则 Name 是个域,Value 则是权威 DNS 服务器的主机名,用于获取该域中主机的 IP 地址。

例如:foo.com, dns.foo.com, NS,表示 foo.com 域下的主机通过 dns.foo.com 权威 DNS 服务器去查询。

  • Type 等于 CNAME,则 Value 是别名为 Name 的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名。如 foo.com, relay1.bar.foo.com, CNAME

小贴士:相当于是一条主机名与别名的记录。在 Webpack、Vite 等构建工具和 nginx 服务器中也能看到 alias 相关的功能。

  • TYPE 等于 MX,则 Value 是别名为 Name 的邮件服务器的规范主机名。MX 记录允许邮件服务器主机名具有简单的别名。