【网络】计算机网络笔记——DNS 简要笔记

DNS 协议是一种建立在 UDP 及 TCP 协议之上的域名解析服务,通过 DNS 服务器这种提供域名解析的分布式系统,可以完成域名与 IP 地址之间的相互转换,从而使得应用能够通过该 IP 地址与对应服务器进行数据传输。

DNS 协议一般运行在 53 端口上,一般情况下 DNS 解析优先使用 UDP 进行 DNS 信息的传输,但由于广域网不适合传输过大的 UDP 保温,因此当 UDP 报文大小超过 512 字节时,客户端会采用 TCP 协议来进行 DNS 信息的传输

这个过程往往有两种情况:

  • 情况一是客户认为回应的报文大小会超过 512 字节。
  • 另一种情况是服务器通过回应告诉了客户端回应报文超过了 512 字节,已经被截断,从而使得客户端再次发起请求。

那么我们思考一个问题,为什么 DNS 在默认情况下使用 UDP 协议进行传输呢?我认为主要的原因还是 DNS 解析并不是那么在意数据传输的可靠性,而是需要以更快的速度获取到域名所对应的 IP 地址,即使出现了丢包之类的问题,只需要再次发起一个 DNS 请求就好了。

域名

首先我们来看看什么是域名。IP 地址这种以 12 个数字所表示的 4 字节地址显然是不方便人们进行记忆的。因此便引入了一种域名的概念,它可以由我们常见的字符组成,从而更便于人类记忆。

域名具有一种分层的结构,像我们所熟知的 comcnorgnet 等等就是顶层域名,每一级域名需要由上一级域名进行分配。例如我的博客 n0texpecterr0r.cn 就是 cn 下的一个二级域名。

对于域名的管理,统一由 NIC 负责对顶级域名进行管理,当一个机构被委派管理一个区间的域名后,它需要为这个区间提供 DNS 解析服务。

DNS 解析

DNS 服务器

首先,我们需要了解到,DNS 服务器主要分为了根 DNS 服务器顶级域名 DNS 服务器权威 DNS 服务器,全球共有 13 个根 DNS 服务器,而每个负责顶级域名的组织都具有一个对应的顶级域名服务器,权威 DNS 服务器则是某些组织自己维护的 DNS 服务器。

上面的这三种 DNS 服务器都会存储区域数据,从而用来查询自己区域内的域名到 IP 地址的映射。

同时,还存在着一种不属于 DNS 层次结构,不存储区域数据,仅仅帮助 DNS 客户端向其他 DNS 服务器进行转发,并将查询结果缓存在本地用于提供更快捷的 DNS 查询的本地 DNS 服务器,它往往由 ISP 所维护,本地 DNS 服务器往往保存了每个根服务器的 IP 地址。这个本地 DNS 服务器的地址是由我们用户所配置在操作系统中的,例如如图就是我的配置:

递归查询、迭代查询

DNS 解析的过程分为了递归查询迭代查询两种方式,它们两种查询方式的区别实际上是在于究竟由谁进行查询:

  • 递归查询:如果该 DNS 服务器没有缓存的 DNS 信息,则会自己向其他服务器进行询问,获得结果后告诉客户端。
  • 迭代查询:如果该 DNS 服务器没有缓存的 DNS 信息,则会告诉查询方能够查询到这个 DNS 信息的 IP 地址,之后客户端再去自己向获得的 IP 地址进行查询。

具体使用哪种策略取决于 DNS 服务器的配置。

DNS 解析过程

下面让我们来看看 DNS 解析究竟经过了怎样的一个过程:当我们在浏览器中输入了一个 url 时,会经过如下的步骤:

  1. 浏览器缓存:首先,浏览器会尝试在自己的缓存中查找是否有这个域名到 IP 的映射。
  2. 系统缓存:当浏览器的缓存中没有对应的映射时,会通过操作系统的 Hosts 文件的 DNS 缓存查看是否有对应的映射。
  3. 路由器缓存:浏览器、路由器中均没有对应的映射时,会通过路由器的缓存进行查看是否具有对应的映射。
  4. 本地 DNS 服务器:当在前面三步的本地客户端中无法找到对应映射时,则会通过本地 DNS 服务器进行查询,本地 DNS 服务器首先会对请求方的请求权限进行检验,之后查看是否存在缓存记录。
  5. 根服务器上面的部分都是基于缓存实现的,这里开始才是查询的真正开始。若仍然找不到对应映射,则本地 DNS 服务器会联系根服务器进行查询,根服务器会对区域数据进行查询,若根服务器没有则将对应顶级域名 DNS 服务器的 IP 地址告诉本地 DNS 服务器。
  6. 顶级域名服务器:顶级域名服务器收到查询请求后,会对区域数据进行查询,若仍然查不到则将它管辖范围内的主域名服务器告诉本地 DNS 服务器。
  7. 主域名服务器:主域名服务器接收到查询请求后,会查询自己的缓存,若没有则进入下一级域名服务器查找,直至找到正确的记录。
  8. 存入缓存:本地 DNS 服务器会将结果保存到缓存,以备下次使用。

举个例子,假设我们请求了 www.baidu.com 的数据,在前面的缓存步骤都不存在的情况下,会通过根服务器查询是否存在对应的映射关系。若根服务器找不到,则会返回顶级域名 com 的 DNS 服务器 IP,之后向 com 域名 DNS 服务器进行查询,如果仍然找不到则会返回 baidu.com 的 DNS 服务器域名,通过这样一级一级的查询直到找到对应的映射关系。

DNS 区域传输

为了减轻单台 DNS 服务器的压力,有时候会需要将一台 DNS 服务器的内容向其他的 DNS 服务器进行保存,此时 DNS 提供了一种区域传输功能,它类似于数据备份,是一个数据同步的过程。由于区域传输的过程中传输数据量非常大,而且数据需要确保可靠传输,因此*在 DNS 区域传输时,也是基于提供可靠传输的 TCP 协议进行的

参考资料

《计算机网络:自顶向下方法》

DNS 协议详解

面试官:讲讲DNS的原理?

DNS解析的过程是什么,求详细的?

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注

%d 博主赞过: