DNS解析过程

209 阅读4分钟

DNS

  • DNS 即域名系统,全称是 Domain Name System。 在浏览器输入一个 URL 地址时,浏览器要向这个 URL 的主机名对应的服务器发送请求,就得知道服务器的 IP, DNS 的作用就是将主机名转换成 IP 地址。

    从理论上讲,任何 DNS 查询既可以是递归的,也可以是迭代的。

  • DNS 是

    1. 一个由分层的 DNS 服务器实现的分布式数据库 DNS 是一个分布式数据库,整个 DNS 系统由分散在世界各地的很多台 DNS 服务器组成,每台 DNS 服务器上都保存了一些数据,这些数据可以让我们最终查到主机名对应的 IP。
    2. 一个使得主机能够查询分布式数据库的应用层协议 应用层协议就是发送一个请求(包含我们的主机名),就会返回这个主机名对应的IP
  • DNS 的查询过程 就是去向这些 DNS 服务器询问,你知道这个主机名的 IP 是多少吗,不知道?那你知道去哪台 DNS 服务器上可以查到吗?直到查到我想要的 IP 为止。

分布式、层次数据库

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

  • 什么是层次? DNS 服务器有 3 种类型:根 DNS 服务器、顶级域(Top-Level Domain, TLD)DNS 服务器和权威 DNS 服务器。它们的层次结构如下图所示:

    根域名服务器:www.baidu.com 的完整写法是 www.baidu.com.,最后的这个 . 就是根域名。 作用是管理它的下一级,也就是顶级域 DNS 服务器,通过询问根 DNS 服务器,我们可以知道一个主机名对应的顶级域 DNS 服务器的 IP 是多少, 从而继续向顶级域 DNS 服务器发起查询请求。

    顶级域(Top-Level Domain, TLD)域名服务器:常见的顶级域名还有 com、cn、org、edu 等。顶级域 DNS 服务器, 也就是 TLD,提供了它的下一级,也就是权威 DNS 服务器的 IP 地址。

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

  • 本地 DNS 服务器 每个 ISP 都有一台本地 DNS 服务器,本地 DNS 服务器起着代理的作用,并负责将该请求转发到 DNS 服务器层次结构中。

DNS 服务器层级:

dnsServer.png

DNS查询过程

  • DNS查询有两种方式:递归和迭代。 DNS 客户端设置使用的 DNS 服务器一般都是递归服务器,它负责全权处理客户端的 DNS 查询请求,直到返回最终结果。而 DNS 服务器之间一般采用迭代查询方式。

  • 以 kc.meishakeji.com 为例:

    1. 客户端查询操作系统是否有 DNS 缓存或 hosts 文件是否存在记录,如果存在记录则直接返回结果。 (如果是 Web 浏览器,存在 DNS 缓存则直接返回结果) 如果记录不存在或者过期,则: (1)DNS 服务器向根域名服务器发送查询报文“query kc.meishakeji.com”, 根域名服务器返回顶级域名 .com的顶级域名服务器地址。 (2)DNS 服务器向 .com 域的顶级域名服务器发送查询报文“query kc.meishakeji.cim”, 得到二级域 .meishakji.com 的权威域名服务器地址 (3)DNS 服务器向 .meishakeji.com 域的权威域名服务器发送查询报文“query kc.meishakeji.com”, 得到主机 kc 的 A 记录,存入自身缓存并返回客户端。

递归: digui.png 迭代: diedai.png

DNS 缓存

为了让我们更快的拿到想要的 IP,DNS 广泛使用了缓存技术。DNS 缓存的原理非常简单,在一个 DNS 查询的过程中,当某一台 DNS 服务器接收到一个 DNS 应答(例如,包含某主机名到 IP 地址的映射)时,它就能够将映射缓存到本地,下次查询就可以直接用缓存里的内容。当然,缓存并不是永久的,每一条映射记录都有一个对应的生存时间,一旦过了生存时间,这条记录就应该从缓存移出。

事实上,有了缓存,大多数 DNS 查询都绕过了根 DNS 服务器,需要向根 DNS 服务器发起查询的请求很少。

DNS缓存优化方式

  1. Web 端 ```html
```
  1. 在操作系统的 hosts 文件中加入 ip-域名 的映射

浏览器 DNS 请求过程

浏览器 DNS 缓存--->操作系统 hosts 文件 ---> DNS 本地服务器  ---> 根 DNS 服务器 ---> 顶级域名服务器 ---> 权威域名服务器

DNS 劫持

DNS 劫持是一类旁观者攻击,攻击者借由其在网络拓扑中的特殊位置,发送比真实的 DNS 回应更早到达攻击目标的伪造 DNS 回应。 一部连上了互联网的电脑一般都会使用互联网服务提供商提供的递归 DNS 服务器,这个服务器通常都会将部分客户曾经请求过的域名暂存起来。 缓存污染攻击就是针对这一特性,影响服务器的用户或下游服务。

参考文献

DNS