25

Zoella Lv3

一、定义

DNS 是:

  • 一个使得主机能够查询分布式数据库的应用层协议
  • 一个由分层的 DNS 服务器实现的分布式数据库

(1)DNS 是一个分布式数据库,整个 DNS 系统由分散在世界各地的很多 DNS 服务器组成,每台服务器上都保存了一些数据,可以让我们最终查到主机名对应的 IP。

(2)DNS 是一个应用层协议,发送一个包含所查询主机名的请求,它会返回该主机名对应的 IP。

分布式: 世界上没有一台 DNS 服务器拥有因特网上所有主机的映射,每台 DNS 只负责部分映射。

二、层次

DNS 服务器有 3 种类型:

  • 根 DNS 服务器
  • 顶级域(Top-Level Domain, TLD)
  • DNS 服务器
  • 权威 DNS 服务器

图1

1、根 DNS 服务器

比如 www.baidu.com,其完整写法是 www.baidu.com.,最后的这个 . 就是根域名。

通过询问根 DNS 服务器,可以知道它的下一级,也就是顶级域 DNS 服务器的 IP 是多少,从而继续向顶级域 DNS 服务器发起查询请求。

2、顶级域 DNS 服务器

除了前面提到的 com 是顶级域名,常见的顶级域名还有 cnorgedu 等。顶级域 DNS 服务器,也就是 TLD,提供了它的下一级,也就是权威 DNS 服务器的 IP 地址。

3、权威 DNS 服务器

权威 DNS 服务器可以返回主机和IP之间的最终映射。

三、本地 DNS 服务器

每个 ISP(Internet Server Provider, 网络服务提供商)都有一台本地 DNS 服务器,比如一个居民区的 ISP、一个大学的 ISP、一个机构的 ISP,都有一台或多台本地 DNS 服务器。

当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,本地 DNS 服务器起着代理的作用,并负责将该请求转发到 DNS 服务器层次结构中。

严格来说,本地 DNS 服务器不属于 DNS 的层次结构。

四、递归查询、迭代查询

如下图,假设主机 m.n.com 想要获取主机 a.b.com 的 IP 地址,会经过以下几个步骤:

图2

(1)首先,主机 m.n.com 向它的本地 DNS 服务器发送一个 DNS 查询报文,包含期待被转换的主机名 a.b.com;

(2)本地 DNS 服务器将该报文转发到根 DNS 服务器;

(3)该根 DNS 服务器注意到 com 前缀,向本地 DNS 服务器返回 com 对应的顶级域 DNS 服务器(TLD)的 IP 地址列表。

(4)本地 DNS 服务器则向其中一台 TLD 服务器发送查询报文;

(5)该 TLD 服务器注意到 b.com 前缀,向本地 DNS 服务器返回权威 DNS 服务器的 IP 地址。

(6)本地 DNS 服务器又向其中一台权威服务器发送查询报文;

(7)该权威服务器返回了 a.b.com 的 IP 地址;

(8)本地 DNS 服务器将 a.b.com 跟 IP 地址的映射返回给主机 m.n.com,m.n.com 就可以用该 IP 向 a.b.com 发送请求了。

1、递归

主机 m.n.com 向本地 DNS 服务器 dns.n.com 发出的查询就是递归查询,这个查询是主机 m.n.com 以自己的名义向本地 DNS 服务器请求想要的 IP 映射,并且本地 DNS 服务器直接返回映射结果给到主机。

2、迭代

而后继的三个查询是迭代查询,包括本地 DNS 服务器向根 DNS 服务器发送查询请求、本地 DNS 服务器向 TLD 服务器发送查询请求、本地 DNS 服务器向权威 DNS 服务器发送查询请求,所有的请求都是由本地 DNS 服务器发出,所有的响应都是直接返回给本地 DNS 服务器。

3、另一种 DNS 查询

从理论上讲,任何 DNS 查询既可以是递归的,也可以是迭代的。下图的所有查询就都是递归的,不包含迭代。

图3

TLD 一定知道权威 DNS 服务器的 IP 地址吗?

不一定,有时 TLD 只是知道中间的某个 DNS 服务器,再由这个中间 DNS 服务器去找到权威 DNS 服务器。

这种情况不仅增加了延迟,还使得网络上需要传输更多的数据包,也会产生更多的 DNS 报文。

五、DNS 优化

1、DNS 缓存

DNS 存在多级缓存,从离浏览器的距离排序,有以下几种:
浏览器缓存,系统缓存,路由器缓存,IPS 服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。

  • 在chrome浏览器中输入 chrome://net-internals/#dns,可以看到chrome浏览器的DNS缓存
  • 系统缓存主要存在 /etc/hosts (Linux系统)中

缓存并不是永久的,每一条映射记录都有对应的生存时间,一旦过了生存时间,该条记录就会从缓存移出。

2、DNS 负载均衡

访问某网站的时候,每次响应的很可能不是同一个服务器(IP 地址不同),因为一般公司都有多台服务器来支撑访问,而 DNS 会返回一个合适的机器的 IP 给用户(根据每台机器的负载量、该机器和用户地理位置的距离等),这就是 DNS 负载均衡。

  • Title: 25
  • Author: Zoella
  • Created at : 2024-10-18 21:30:22
  • Updated at : 2024-10-22 09:51:59
  • Link: https://zoella-w.github.io/2024/10/18/25-DNS/
  • License: This work is licensed under CC BY-NC-SA 4.0.