Loading... <h3><span style="font-size: 16px">一、什么是DNS</span></h3> <p><span style="font-size: 14px"> DNS全称为Domain Name System,即域名系统,其作用就是将我们经常使用的“网址”解析为IP地址。</span></p> <p><span style="font-size: 14px"> 在互联网上通信需要借助于IP地址,但人类对于数字的记忆能力远不如文字,那么将IP地址转换成容易记忆的文字是个好办法,可是计算机只能识别0、1代码,这时就需要一种机制来解决IP地址与主机名的转换问题。</span></p> <p><span style="font-size: 14px"> 早期由于网络上的主机数量有限,主机名和IP的解析借助于hosts文件即可完成,Linux中此文件一般存放路径为/etc/hosts,在此文件中手动记录每个主机名与其IP的对应关系;但hosts文件的内容不能自动更新,一旦主机名或IP地址发生变化,需要手动对每一台主机进行更新。</span></p> <p><span style="font-size: 14px"> 随着互联网的发展,网络上可供人们访问的网站越来越多,hosts文件已经不能满足需求;为了解决此问题,伯克利大学研究出了一套系统,被称为BIND(Berkeley Internet Name Domain),也就是现在流行的DNS。</span></p> <p><span style="font-size: 14px"> DNS利用树形目录结构,将主机名的管理分配给不同的层级,这样可以实现更加快速的完成主机名的查找,修改主机名解析时也更加方便。</span></p> <h3><span style="font-size: 16px">二、相关概念</span></h3> <p><span style="font-size: 14px"> 1、域</span></p> <p><span style="font-size: 14px"> TLD<span style="font-size: 14px;font-family: 宋体">:</span>Top Level Domain (顶级域名)</span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">组织域:</span>.com, .org, .net, .edu,.gov,.mil,.cc,…</span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">国家域:</span>.cn, .us, .tw, .iq,…</span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">反向域:</span> .in-addr-arpa</span></p> <p><span style="font-family: 宋体;font-size: 14px"> 上面提到过,DNS采用分级的授权管理机制,其结构如下所示:</span></p> <p><span style="font-family: 宋体;font-size: 14px"> <img src="//cto.wang/usr/uploads/2016/07/20160703161139-92.png" title="1430272851121845.png" alt="blob.png" /></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 根域与一级域由</span>IANA<span style="font-size: 14px;font-family: 宋体">直接管理。</span></span></p> <p><span style="font-size: 14px"> 2、FQDN</span></p> <p><span style="font-size: 14px"> FQDN全称为Fully Qualified Domain Name,即完全合格域名。</span></p> <p><span style="font-size: 14px"> FQDN由两个部分组成:主机名和域名。因为DNS是逐级管理的,所以在不同的层级中主机名与域名也是不同的;以www.google.com为例,在第二层中,.com就是域名,google就是主机名,而到了第三层中,.google.com就成了域名,www就成了主机名。</span></p> <p><span style="font-size: 14px"> 注意:主机名与域名并不是依据"."来划分的,主机名中也可以包含"."号的,主要还是要根据域名的注册情况来划分。</span></p> <p><span style="font-size: 14px"> 3、正向解析</span></p> <p><span style="font-size: 14px"> 从FQDN转换为IP地址称为正向解析。</span></p> <p><span style="font-size: 14px"> 4、反向解析 </span></p> <p><span style="font-size: 14px"> 从IP地址转换为FQDN称为反向解析。 </span></p> <p><span style="font-size: 14px"> 5、区域</span></p> <p><span style="font-size: 14px"> 正向解析或反向解析中,每个域的记录就是一个区域。</span></p> <h3><span style="font-size: 16px">三、DNS的解析库</span></h3> <p><span style="font-size: 14px"> DNS的主要作用是进行主机名的解析。</span></p> <p><span style="font-size: 14px"> 解析<span style="font-size: 14px;font-family: 宋体">:根据用户提供一种名称,去查询解析库,以得到另一种名称。</span> </span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">正向解析与反向解析使用不同的解析库。</span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 正向解析库:</span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">资源记录:</span>rr(resource record)</span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">有类型的概念;用于此记录解析的属性。</span></span></p> <p><span style="font-size: 14px"> SOA<span style="font-size: 14px;font-family: 宋体">:</span>Start of Authority<span style="font-size: 14px;font-family: 宋体">,起始授权记录,一个区域文件只能有一个。</span></span></p> <p><span style="font-size: 14px"> NS<span style="font-size: 14px;font-family: 宋体">:</span>Name Server<span style="font-size: 14px;font-family: 宋体">,可以有多个。</span></span></p> <p><span style="font-size: 14px"> MX<span style="font-size: 14px;font-family: 宋体">:</span>Mail eXchange<span style="font-size: 14px;font-family: 宋体">,邮件交换器。标明域内的邮件服务器,</span>MX<span style="font-size: 14px;font-family: 宋体">记录有优先级属性(</span>0-99<span style="font-size: 14px;font-family: 宋体">);数字越小,优先级越高。</span></span></p> <p><span style="font-size: 14px"> A<span style="font-size: 14px;font-family: 宋体">:</span>FQDN<span style="font-size: 14px;font-family: Wingdings">à</span>IP<span style="font-size: 14px;font-family: 宋体">,专用于正向解析库。</span></span></p> <p><span style="font-size: 14px"> PTR<span style="font-size: 14px;font-family: 宋体">:</span>IP<span style="font-size: 14px;font-family: Wingdings">à</span>FQDN<span style="font-size: 14px;font-family: 宋体">,专用于反向解析库。</span></span></p> <p><span style="font-size: 14px"> AAAA<span style="font-size: 14px;font-family: 宋体">:</span>FQDN<span style="font-size: 14px;font-family: Wingdings">à</span>IPv6<span style="font-size: 14px;font-family: 宋体">,专用于正向解析库。</span></span></p> <p><span style="font-size: 14px"> CNAME<span style="font-size: 14px;font-family: 宋体">:</span>Canonical Name<span style="font-size: 14px;font-family: 宋体">,正式名称。</span></span></p> <p><span style="font-family: 宋体;font-size: 14px"></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 解析库文件同步的过程:区域传送(单方向传送)</span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 完全区域传送:</span>axfr</span></p> <p><span style="font-size: 14px"> 将整个区域传送到各服务器。<br /></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 增量区域传送:</span>ixfr</span></p> <p><span style="font-size: 14px"> 只将区域有改动的记录传送到各服务器。</span></p> <h3><span style="font-size: 16px">四、DNS的查询过程</span></h3> <p><span style="font-size: 14px"> DNS采用两种查询机制:递归和迭代。</span></p> <p><span style="font-size: 14px"> </span><img src="//cto.wang/usr/uploads/2016/07/20160703161139-44.png" title="1430278660104919.png" alt="blob.png" /></p> <p><span style="font-size: 14px"> 客户端向DNS服务器发起查询请求,DNS服务器搜索本地解析库没有结果,于是向根域发起查询请求,根域告诉DNS服务器.com服务器上有它需要的资源,DNS服务器又向.com服务器发起查询请求,结果被告知.google.com服务器上有它想要的结果,最后终于在.google.com服务器上找到了解析记录,并返回给了客户端。</span></p> <p><span style="font-size: 14px"> 在上面的查询过程中,客户端只发起了一次请求,并得到了最后的结果,这种查询方式被称为递归。</span></p> <p><span style="font-size: 14px"> 而DNS服务器在查询过程中不停的发起请求,直到找到想要的结果,这种查询方式被称为迭代。</span></p> <p><span style="font-size: 14px"> 这就好比你想知道某日本微电影女星的健康状况,你去问了小A,虽然小A也不知道,但他好面子想表现,于是他向小B咨询,小B让他问问小C,小C让他利用翻墙软件去日本的网站上去看看,最后终于知道了答案并将告诉了你,在这个求知过程中你向小A发起的询问就是递归的,对于你来说是最省心,而对于小A来说是比较悲催的;小A的发起查询就是迭代的,对于小A来说是比较辛苦的,但对于小B、小C来说是基本上没什么工作量的。</span></p> <p><span style="font-size: 14px"> 注意:<span style="font-size: 14px;font-family: 宋体">根不会为任何请求递归。</span></span></p> <p><span style="font-family: 宋体;font-size: 14px"> DNS服务器并不需要在客户端每次发起请求时都执行迭代查询,DNS服务器会将之前的查询结果在本地存储一份,如果客户端再次请求此资源,可以马上做出响应,这个存储空间称为本地DNS缓存。</span></p> <p><span style="font-family: 宋体;font-size: 14px"> 另外我们可能还经常会听到两个概念权威DNS服务器和非权威应答。<br /></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 权威DNS服务器说的容易理解一点,就是如果本地DNS的配置文件中写明了FQDN与IP的对应关系的,并授权管理这个域时,那么就称这台DNS服务器是该域的权威DNS服务器。<br /></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 客户端得到的DNS查询结果是从本地DNS缓存中获得的,那么称这个解析结果为非权威应答;非权威应答的结果不一定是正确的,有可能权威DNS服务器上记录已修改,而缓存中还是未更新的记录。</span></p> <h3><span style="font-family: 宋体;font-size: 16px">五、DNS的查询顺序</span></h3> <p><span style="font-family: 宋体;font-size: 14px"> 1、本地hosts文件<br /></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 2、本地DNS缓存</span></p> <p><span style="font-family: 宋体;font-size: 14px"> 3、本地DNS服务器<br /></span></p> <p><span style="font-family: 宋体;font-size: 14px"> 4、发起迭代查询</span></p> <h3>六、DNS使用的端口号</h3> <p><span style="font-size: 14px"> DNS协议使用udp/tcp的53端口提供服务,客户端向DNS服务发起请求时,使用udp的53端口;DNS服务器间进行区域传送的时候使用TCP的53端口。</span></p> <h3><span style="font-size: 16px">七、DNS<span style="font-family: 宋体">服务器类型</span></span></h3> <p><span style="font-size: 14px"> 1、<span style="font-size: 14px;font-family: 宋体">主</span>DNS<span style="font-size: 14px;font-family: 宋体">服务器</span></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 为客户端提供域名解析的主要区域,主DNS服务器宕机,会启用从DNS服务器提供服务。<br /></span></span></p> <p><span style="font-size: 14px"> 2、<span style="font-size: 14px;font-family: 宋体">从</span>DNS<span style="font-size: 14px;font-family: 宋体">服务器</span></span></p> <p><span style="font-size: 14px"> <span style="font-size: 14px;font-family: 宋体">主服务器</span>DNS<span style="font-size: 14px;font-family: 宋体">长期无应答,从服务器也会停止提供服务。</span></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"><span style="font-size: 14px;font-family: 宋体"> 主从区域之间的同步采用周期性检查</span><span style="font-size: 14px">+</span><span style="font-size: 14px;font-family: 宋体">通知的机制,从服务器周期性的检查主服务器上的记录情况,一旦发现修改就会同步,另外主服务器上如果有数据被修改了,会立即通知从服务器更新记录。</span></span></span></p> <p><span style="font-size: 14px"> 3、<span style="font-size: 14px;font-family: 宋体">缓存服务器</span></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 服务器本身不提供解析区域,只提供非权威应答。<br /></span></span></p> <p><span style="font-size: 14px"> 4、<span style="font-size: 14px;font-family: 宋体">转发服务器</span></span></p> <p><span style="font-size: 14px"><span style="font-size: 14px;font-family: 宋体"> 当DNS服务器的解析区域(包括缓存)中无法为当前的请求提供权威应答时,将请求转发至其它的DNS服务器,此时本地DNS服务器就是转发服务器。<br /></span></span></p> <p></p> <p><span style="font-size: 14px"> </span></p> <p><span style="font-size: 14px"> </span></p> <p></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信