多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 什么是DNS DNS (Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上是一个 **域名** 和 **IP** 相互映射的分布式数据库,有了它,我们就可以通过域名更方便的访问互联网。 DNS有以下特点: * 分布式的 * 协议支持TCP 和 UDP, 常用端口是53 * 每一级域名的长度限制是63 * 域名总长度限制是253 <br> <br> # DNS域名称空间的组织方式 | 名称类型 | 说明 | 说明 | | --- | --- |--- | | 根域 | DNS域名中使用时,规定由尾部句号(.)来制定与名称位于根或者更好基本的域层次结构 | 单个句号(.)或句号用于末尾的名称 | 顶级域 | 用例指示某个国家/地区或组织使用的名称的类型名称 | .com | 第二层域 | 个人或组织在Internet上使用的注册名称 | `qq.com` | 子域 | 已注册的耳机域名派生的域名,通俗讲就是网站名 | `www.qq.com` | 主机名 | 通常情况下,DNS域名的最左侧的标签标识网络上的特定计算机,如h1 | `h1.www.qq.com` <br> <br> # DNS 解析流程 ![](https://img.kancloud.cn/c6/91/c691717db1e14d02681cdf88f903fbc8_830x460.png) * 根服务器:解析后缀 * TLD服务器:解析一级域名 * Name服务器:解析二、三、四……级域名 <br> DNS 查询以各种不同的方式进行解析。客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询,也可代表请求客户机来查询或联系其他 DNS 服务器,以完全解析该名称,并随后将应答返回至客户机。这个过程称为递归。 <br> 另外,客户机自己也可尝试联系其他的 DNS 服务器来解析名称。如果客户机这么做,它会使用基于服务器应答的独立和附加的查询,该过程称作迭代,即DNS服务器之间的交互查询就是迭代查询。 <br> | 记录类型 | 含义 | | --- | --- | | SOA:(StartOf Authority, 起始授权记录) | 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条 | | A记录(主机记录、IPV4) | 用于名称解析的重要记录,将特定的主机名映射到对应主机的IP地址上 CNAME记录(别名记录) | ⽤于返回另一个域名,即当前查询的域名是另⼀个域名的跳转, 主要用于域名的内部跳转,为服务器器配置提供灵活性 NS记录(域名服务器记录) | ⽤于返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址 MX(邮件记录)|用于返回接收电子邮件的服务器地址 | IPv6主机记录(AAAA记录) | 与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址 ## 客户端解析流程 ![](https://box.kancloud.cn/ca7d5efabb0e0824cf50a6d8c1bac021_615x537.png) 1、在浏览器中输入 `www.qq.com` 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。 <br> 2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。 <br> ## 服务端解析流程 ![](https://box.kancloud.cn/7bc0494afd514cef8c751d37cb8b787b_1053x601.png) <br> 1. 客户端向本地DNS服务器(递归解析服务器) 发出解析tool.chinaz.com域名的请求 2. 本地dns服务器查看缓存,是否有缓存过tool.chinaz.com域名,如果有直接返回给客户端;如果没有执行下一步 3. 本地dns服务器向根域名服务器发送请求,查询com顶级域的nameserver 地址 4. 拿到com域名的IP后,再向com nameserver发送请求,获取chinaz域名的nameserver地址 5. 继续请求chinaz的nameserver, 获取tool域名的地址,最终得到了tool.chinaz.com的IP,本地dns服务器把这个结果缓存起来,以供下次查询快速返回 6. 本地dns服务器把把结果返回给客户端 <br> ## 递归解析服务器 vs 权威域名服务器 我们在解析流程中发现两类DNS服务器,客户端直接访问的是 `递归解析服务器`, 它在整个解析过程中也最忙。 它的查询步骤是递归的,从根域名服务器开始,一直询问到目标域名。 <br> 递归解析服务器通过请求一级一级的权威域名服务器,获得下一目标的地址,直到找到目标域名的 `权威域名服务器` <br> 简单来说: `递归解析服务器` 是负责解析域名的, `权威域名服务器`是负责存储域名记录的 <br> 递归解析服务器一般由ISP提供,除此之外也有一些比较出名的公共递归解析服务器, 如谷歌的8.8.8.8,联通的114,BAT也都有推出公共递归解析服务器,但性能最好的应该还是你的ISP提供的,只是可能会有 `DNS劫持` 的问题 <br> ## 为什么只有13个根域名服务器呢 DNS 协议使用了UDP查询, 由于UDP查询中能保证性能的最大长度是512字节,要让所有根域名服务器数据能包含在512字节的UDP包中, 根服务器只能限制在13个, 而且每个服务器要使用字母表中单字母名 ![](https://box.kancloud.cn/317d5491315c6210bc5df50b6d638e27_610x671.png) <br> <br> # DNS预热 预热的目的: 1. 减少请求次数 2. 提前对DNS预获取 ## 预热的方式 1. 爬虫 2. APP 3. 网页meta ~~~ <meta http-equiv="x-dns-prefetch-control" content="on" /> <link rel="dns-prefetch" href="//webresource.english.c-ctrip.com" /> <link rel="dns-prefetch" href="//webresource.c-ctrip.com" /> <link rel="dns-prefetch" href="//s.c-ctrip.com" /> <link rel="dns-prefetch" href="//pic.english.c-ctrip.com" /> <link rel="dns-prefetch" href="//m.ctrip.com" /> ~~~ <br> <br> # 参考资料 [DNS基础知识](https://juejin.im/post/59c6201df265da064428b835) [DNS解析的过程是什么,求详细的?](https://www.zhihu.com/question/23042131)