# DNS介绍

## 概述

人们习惯记忆[域名](https://baike.baidu.com/item/%E5%9F%9F%E5%90%8D)，但机器间互相只认IP地址，域名与IP地址之间是多对一的关系，一个ip地址不一定只对应一个域名，且一个域名只可以对应一个ip地址，它们之间的转换工作称为域名解析，域名解析需要由专门的域名解析服务器来完成，整个过程是自动进行的。

## 原理

当你的网站制作完成后上传到你的[虚拟主机](https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA)时，你可以直接在浏览器中输入IP地址浏览你的网站，也可以输入域名查询你的网站，虽然得出的内容是一样的但是调用的过程不一样，输入IP地址是直接从主机上调用内容，输入域名是通过域名解析服务器指向对应的主机的IP地址，再从主机调用网站的内容。

如图：![](https://190676414-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ltduzpf3rgfQXlGIVmS%2F-Ltdv-RQZ9WmrEARHlJc%2F-Ltdv6n8TrHRZDSNhDNH%2Fimport-dns-02.png?generation=1573735137303164\&alt=media)

> **（1）当用户在浏览器中输入www\.qq.com域名访问该网站时，操作系统会先检查自己本地的hosts文件是否有这个网址映射关系，如果有，就先调用这个IP地址映射，完成域名解析。**&#x20;
>
> **（2）如果hosts里没有这个域名的映射，则查找本地DNS解析器缓存，是否有这个网址映射关系，如果有，直接返回，完成域名解析。**&#x20;
>
> **（3）如果hosts与本地DNS解析器缓存都没有相应的网址映射关系，首先会找TCP/ip参数中设置的首选DNS服务器，在此我们叫它本地DNS服务器，此服务器收到查询时，如果要查询的域名，包含在本地配置区域资源中，则返回解析结果给客户机，完成域名解析，此解析具有权威性。**&#x20;
>
> **（4）如果要查询的域名，不由本地DNS服务器区域解析，但该服务器已缓存了此网址映射关系，则调用这个IP地址映射，完成域名解析，此解析不具有权威性。**&#x20;
>
> **（5）如果本地DNS服务器本地区域文件与缓存解析都失效，则根据本地DNS服务器的设置（是否设置转发器）进行查询，如果未用转发模式，本地DNS就把请求发至13台根DNS，根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理，并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后，将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后，如果自己无法解析，它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后，就会找qq.com域服务器，重复上面的动作，进行查询，直至找到www\.qq.com主机。**&#x20;
>
> **（6）如果用的是转发模式，此DNS服务器就会把请求转发至上一级DNS服务器，由上一级服务器进行解析，上一级服务器如果不能解析，或找根DNS或把转请求转至上上级，以此循环。不管是本地DNS服务器用是是转发，还是根提示，最后都是把结果返回给本地DNS服务器，由此DNS服务器再返回给客户机。**
>
> ***注意：从客户端到本地DNS服务器是属于递归查询，而DNS服务器之间的交互查询就是迭代查询。***

## 资源记录

是用于答复DNS客户端请求的DNS数据库记录，每一个[DNS服务器](https://baike.baidu.com/item/DNS%E6%9C%8D%E5%8A%A1%E5%99%A8)包含了它所管理的DNS命名空间的所有资源记录。资源记录包含和特定[主机](https://baike.baidu.com/item/%E4%B8%BB%E6%9C%BA)有关的信息，如[IP地址](https://baike.baidu.com/item/IP%E5%9C%B0%E5%9D%80)、提供服务的类型等等。常见的资源记录类型有：

| 资源记录类型 | 起始授权结构（SOA)                                                     | 主机（A）                                                                          | 别名（CNAME）                                         | 邮件交换器（MX）                          | 名称服务器（NS）              |
| ------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------------------------------------- | ---------------------------------- | ---------------------- |
| 说明     | 起始授权机构                                                          | 地址                                                                             | 标准名称                                              | 邮件交换器                              | 名称服务器                  |
| 解释     | 此记录指定区域的起点。它所包含的信息有区域名、区域管理员电子邮件地址，以及指示辅 DNS 服务器如何更新区域数据文件的设置等。 | 主机（A）记录是名称解析的重要记录，它用于将特定的主机名映射到对应主机的IP地址上。你可以在DNS服务器中手动创建或通过DNS客户端动态更新来创建。\[1] | 此记录用于将某个别名指向到某个主机（A）记录上，从而无需为某个需要新名字解析的主机额外创建A记录。 | 此记录列出了负责接收发到域中的电子邮件的主机 ，通常用于邮件的收发。 | 此记录指定负责此DNS区域的权威名称服务器。 |

## DNS解析的过程

最简单的响应是一个地址记录（也称A记录）。当客户端创建了一个查询时，该域下授权的DNS服务器会响应一个或多个IP地址。

这里没有固定的顺序，这个地址通常是随机排序的。另一个客户得到的结果顺序可能是完全不一样的。我们的客户会选择其中一个IP。如果只返回一个独立的IP，这个选择过程就会非常短。

规范名字记录：不只是响应一个特定的IP，服务器还可以返回一个规范名字（CNAME）记录。CNAME是将多个完全限定域名（FQDN）指向一个主机的快捷方式。

当服务器到那以后，它可能会发现另一个CNAME记录，和另一个一样。我在复杂的网络环境和广告软件或跟踪平台中看到过，每个过程都委托给其他人，为一个你不想做的链接找到一个真正的IP地址是非常困难的。
