DNS
运行在主机上的浏览器使用 DNS 的过程
通过上述过程,发现 DNS 会带来网络时延。解决策略是:让客户主机的 DNS 应用 向在它附近的 DNS 服务器的缓存中寻找是否已经存在 hostname 对应的 IP 地址。
DNS 提供的各种服务
注意 规范主机名 对人类来说,一般没有 主机别名 好记忆。
- hostname 到 IP 地址的映射;
- 多个主机别名 到 规范主机名 的映射;
- 邮件服务器别名 到 规范主机名 的映射;
- 负载分配。繁忙的站点会有多台服务器,每个服务器运行在不同的端系统上,每个服务器都会有自己的 IP 地址。而 DNS 可以提供一个 IP 地址集合 关于 一个 规范主机名的映射。
DNS 服务器的类别
DNS 使用 分布式、层次数据库来存储世界上所有主机的映射。因此,大致上有 3 种 DNS 服务器:根 DNS 服务器、顶级域(TLD)DNS 服务器 和 权威 DNS 服务器。
部分 DNS 服务器的层次结构
对与上图中 权威 DNS 服务器层次结构的解释:TLD 服务器想要找到某个主机的 ip 地址,必须先找到一个 权威 DNS 服务器 a,a 在寻找它的子节点 DNS 服务器 b,依次向下查询 与主机直接相连的 权威 DNS 服务器,再返回 主机的 主机名/IP 地址 映射。即 TLD DNS 服务器与 主机之间经常会有多个 权威 DNS 服务器。
对于一个主机名:C.B.A 。A 表示 TLD DNS 服务器名,B.A 表示 权威 DNS 服务器名,这是一个集合。
客户主机利用DNS请求目的主机 ip 地址的所有流程:
注意到,一共发送了 8 + (n - 1)* 2 份 DNS 报文,其中 n 为权威服务器的数量。显然,为了一个主机的 ip 地址,发送了如此之多的报文是一件非常费时间的事情,因此可以使用 DNS 缓存 技术来大大减少时间。
DNS 缓存
原理:在一个请求链中,当某个 DNS 服务器接收一个 DNS 回答(例如,包含某个主机名到 IP 地址的映射)时,它能将映射缓存在本地存储器中。 这样,今后的请求如果主机名相同,即可直接返回 IP 地址,大大节省了时间。由于主机名与 IP 地址的映射不是永久的,因此 DNS 服务器在一段时间后(通常是 2 天)会丢弃缓存信息。
正是因为 DNS 缓存,所以除了少数 DNS 查询外,根服务器 都被绕过了。
DNS 记录
DNS 缓存即将主机名与 ip 地址映射缓存在本地存储器中,DNS 服务器使用 资源记录(RR) 来存储映射。资源记录(RR)是下列字段的 4 元组:
(Name, Value, Type, TTL)
其中 TTL 是这条资源记录的生存时间,因为 DNS 缓存不是永久的。
Type 决定了 Name 与 Value 的含义:
- Type = A 。Name 是主机名,Value 是该主机名对应的 IP 地址。
- Type = NS。Name 是域。Value 是 获得 Name 域 ip 的 权威 DNS 服务器的主机名。
- Type = CNAME。DNS 提供了多个主机别名到一个规范主机名的映射集合,在资源记录(RR)中,Name 表示一种主机别名,而 Value 则是主机别名对应的规范主机名。
- Type = MX。类似于 Type = CNAME,但是是用在 邮件服务器 中的。注意:一个公司的邮件服务器别名可能与其他服务器(如 Web 服务器)别名相同,这个时候就需要根据 Type 的值来决定 Value 究竟是哪种服务器的规范主机名。
DNS 安全性
DNS 非常安全。 DNS 自身已经显示了对抗攻击的令人惊讶的健壮性。至今为止,还没有一个攻击已经成功地妨碍了 DNS 服务。
参考:《计算机网络自定向下方法》第7版