Appearance
DNS
域名系统(Domain Name System),主要任务是进行主机名到 IP 地址的转换。
DNS 是:
一个由分层的 DNS 服务器实现的分布式数据库
一个使得主机能够查询分布式数据库的应用层协议
传输协议与端口号
DNS 使用 UDP
传输协议,端口号是 53
。
DNS 服务器类型
- 根 DNS 服务器
- 顶级域名 DNS 服务器
- 权威 DNS 服务器
- 本地 DNS 服务器(不属于 DNS 服务器层次结构中)
查询路径
- 本地 DNS 服务器缓存
当客户端需要查询一个主机名的 IP 地址时,首先会尝试从本地 DNS 服务器缓存中查找,没有查询到结果,则从本地的 hosts
文件配置内容中查找。
- 本地
hosts
文件配置内容
从本地的 hosts
文件配置内容中没有找到对应的记录则会请求本地 DNS 服务器。在 Windows 操作系统中,hosts
文件位于 c:\Windows\System32\drivers\ets
目录下。
- 本地 DNS 服务器
客户端与本地 DNS 服务器的查询方式通常是递归查询,本地 DNS 服务器与根 DNS 服务器、顶级域 DNS 服务器和权威 DNS 服务器的查询方式是迭代查询。本地 DNS 服务器首先向根 DNS 服务器发送查询报文,根 DNS 服务器返回顶级域 DNS 服务器对应的 IP 地址的响应报文;然后本地 DNS 服务器向顶级域 DNS 服务器发送查询报文,顶级域 DNS 服务器返回权威 DNS 服务器的 IP 地址的响应报文;紧接着本地 DNS 服务器向权威 DNS 服务器发送查询报文,由权威 DNS 服务器返回主机名对应的 IP 地址;最后由本地 DNS 服务器向客户端发送响应报文。
在客户端看来,仅仅向本地 DNS 服务器发送了一次查询报文,然后接收本地 DNS 服务器返回的响应报文,从中接收到对应主机名的 IP 地址。
根 DNS 服务器
顶级域 DNS 服务器
权威 DNS 服务器
查询方法
- 递归查询
递归查询的特点是:客户机只用发一次请求,即可收到结果。
- 迭代查询
迭代查询的特点是:客户机需要多次发送请求才可收到结果。
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 记录允许邮件服务器主机名具有简单的别名。