|
理解DNS原理,这一篇就够了
理解DNS原理,这一篇就够了
陈祥芬@贝壳找房
贝壳产品技术
贝壳产品技术 “贝壳产品技术公众号”作为贝壳官方产品技术号,致力打造贝壳产品、技术干货分享平台,面向互联网/O2O开发/产品从业者,每周推送优质产品技术文章、技术沙龙活动及招聘信息等。欢迎大家关注我们。 242篇内容
2020年08月17日 22:09
-1. DNS 是什么我们在访问某个网站的时候,经常会在浏览器的地址栏里输入一个名字,例如:notice.ke.com、gem.ke.com等,那么这个就是所谓的域名。然而,网络通信一般基于 TCP/IP,而 TCP/IP 又基于 IP 地址,因此对于计算机而言,光有域名是不够的,还需要对方的 ip 地址方可进行通信。那么 DNS (Domain Name System)域名系统,就在域名和 ip 地址之间架起了一座桥梁,更贴近的说,DNS 相当于一个'翻译官',具有将域名解析成 ip 地址的能力。DNS 的简易版工作原理如下图所示:DNS工作原理那么到这里,您可能问了,既生 ip 何生 域名 呢?答,便于记忆。相比于一串数字,具有特定含义的名字更容易让人记住呢。嗯...,我是这样的,哈哈。2. DNS 服务器工作原理既然知道了 DNS 做了一份翻译工作,那么咱们就来挖一挖 DNS 服务器是怎么个翻译发。DNS 服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。其中,来自客户端的查询消息包含以下三种信息:域名服务器、邮件服务器(邮件地址中@后面的部分)的名称。Class在最早设计 DNS 方案时,DNS 在互联网以外的其他网络中的应用也被考虑到了,而 Class 就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此 Class 的值永远是代表互联网的 IN记录类型表示域名对应何种类型的记录。常见的 DNS 记录类型如下:1) A:地址记录(Address),返回域名指向的 IP 地址。2) NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为 IP 地址。3)CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。4)MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。5)PTR:逆向查询记录(Pointer Record),只用于从 IP 地址查询域名。DNS 服务器会事先保存,以上这 三种信息对应的记录数据,然后根据这些记录查找符合查询请求的内容并对客户端作出响应的。查找过程如下图所示:DNS服务器域名解析原理例如,如果要查询 notice.ke.com 这个域名对应的 IP 地址:第一步:客户端会向 DNS 服务器发送包含以下信息的查询消息:域名=notice.ke.comClass = IN记录类型=A第二步:DNS 服务器接收到来自客户端发来的消息后,从已有的记录中查找域名、Class 和记录类型全部匹配的记录。经过查找,发现,上图中第一行记录与查询消息中的 3 项内容完全一致。第三步:于是,DNS 服务器将记录中的值:10.200.11.114,返回给客户端。3. 域名解析过程详解咱们在上一部分了解了,DNS 服务器会从域名与 IP 地址的对照表中查找相应的记录,并将查询结果返回给客户端。那么问题来了,全世界有着不计其数的服务器,这得用什么样的机器来存储这张信息表呢?答:没有。不是 1 台,而是将信息分布保存在多台 DNS 服务器中,这些 DNS 服务器相互接力配合,从而找到要查询的信息。说到这里,我们不得不提一下,域名的结构。3. 1 域名结构DNS 采用层次树状结构的方法,来命名域名。“域”(domain)是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。例如下图所示的域名空间。域名空间例如: notice.ke.com域名分级解释:根 :. ,通常是省略的顶级域名:com二级域名:ke三级域名:notice那么相应的,DNS 域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。DNS 服务器中的所有信息,会按照层次结构注册到相应的服务器中。域名服务器根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:根域名服务器所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址,全世界共有13个不同IP地址的根域名服务器,它们的名字是用一个英文字母命名,从 a 一直到 m (前 13 个字母)。这些根域名服务器相应的域名分别是a.rootservers.net, …, m.rootservers.net。顶级域名服务器这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答。权限域名服务器负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。本地域名服务器当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。如果本地域名服务器无法对域名进行解析(即转换为 IP 地址),会求助于根域名服务器3.2 顺藤摸瓜查 IP下面我们来看一下,这个过程是怎样执行的。互联网中有数万台 DNS 服务器,肯定不能一台一台挨个去找。没关系,我们有办法:首先将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中;然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中;以此类推。由于上级 DNS 服务器保管着所有下级 DNS 服务器的信息,所以我们从根域开始,一路往下顺藤摸瓜必定会找到任意一个域的 DNS 服务器。除此之外,有个重要的步骤就是,互联网中任意一台 DNS 服务器中,均保存着根域 DNS 服务器信息。这样一来,任何 DNS 服务器就都可以找到并访问根域 DNS 服务器了。以notice.ke.com为例,看一下 DNS 服务器之间的查询操作,如下图所示:域名解析过程图解释:01客户端首先会访问本地 DNS 服务器,也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址,图中(1)。02由于最近的 DNS 服务器中没有存放 notice.ke.com 这一域名对应的信息,所以我们需要从顶层开始向下查找。因此它会将来自客户端的查询消息转发给根域 DNS 服务器,图中(2)。03根域服务器中也没有 notice.ke.com 这个域名,但是它判断出,这个域名属于 com 域,因此根域 DNS 服务器返回了它所管理的 com 域中的 DNS 服务器的 IP 地址。意思是“虽然我不知道你要查的那个域名的地址,但你可以去 com 域问问看”。04本地 DNS 服务器又向 com 域的 DNS 服务器发送查询消息,图中(3)。com 域中也没有 notice.ke.com 这个域名的信息,和刚才一样,com 域服务器会返回它下面的 ke.com 域的 DNS 服务器的 IP 地址。05以此类推,重复前面的步骤,终于找到目标 DNS 服务器,图中(4)。并将 ip 地址返回给客户端,图中(5)。06客户端获取 Web 服务器的 IP 地址后,便可以对其进行访问了,图中(6)。了解了上面的域名到 ip 地址的查询过程,我们可以总结出两点信息:a.客户端向本地域名服务器的查询:递归查询说白了就是替该客户端查询。怎么个替法呢,如果客户端所询问的本地域名服务器,不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步的查询。b.本地域名服务器向根域名服务器的查询:迭代查询当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不是替本地域名服务器进行后续的查询)。4. DNS 高速缓存DNS 解析 ip 这么磨叽嘛,兜了一大圈才拿到对方的 ip 地址,就不能简化一下,让我快速的迈出上网的第一步吗?小主,别急,这不还没结束嘛。4.1 缓存机制为了提高 DNS 查询效率,减轻根域名服务器的负荷、减少 DNS 查询报文的数量,高速缓存登场了。它用来存放最近查询过的域名以及从何处获得域名映射信息的记录。例如,在上一部分的查询过程中,如果在不久前查询过域名为 notice.ke.com 的 IP 地址,那么本地域名服务器就不必向根域名服务器重新查询 notice.ke.com 的 IP 地址,而是直接把缓存中存放的上次查询结果(即 notice.ke.com 的 IP 地址)告诉用户。假定本地域名服务器的缓存中并没有 notice.ke.com 的 IP 地址,而是存放着顶级域名服务器 ke.com 的 IP 地址,那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向 com 顶级域名服务器发送查询请求报文。这样一来,就缓和了根域名服务器的负荷,而且也能够使 DNS 查询请求和回答报文的数量大为减少。4.2 缓存有效期使用高速缓存,会面临的一个问题就是:查询结果被缓存后,若原本的数据改变了,那么可能会导致所缓存的信息不可靠了。因此,DNS 服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。DNS 高速缓存的优缺点:优点- 减轻根域名服务器的负荷- 减少 DNS 查询报文的数量- 提高 DNS 查询效率缺点- 若缓存有效时间设置不当,会让缓存信息失效,导致访问错误等。5. 总结OK,咱们来简单做一下总结:DNS 的作用就是,根据域名查出 IP 地址。那么功能是既定的,不可改变,我们所能做的是对域名解析的优化,快速的得到 ip 地址,缩短用户等待时间,提高用户的上网体验。对于解析优化(感兴趣的同学可以了解下),我们这里提供以下两个切入点:域名服务器的解析时间解析次数咱们在文章中也提到了,使用缓存可以提高解析效率。除此之外,也有很多其他的方式,可以减少用户等待时间哦,例如,前端优化中使用的DNS Prefetch等。好了,话不多说,小伙伴们,赶紧躁起来吧,我们在优化的路上再见。咳,咳....,稍等一下,文章的最后呢,附上几个命令,以辅助我们了解 DNS 解析的过程。digdig 命令可以单独查看每一级域名的 NS 记录dig 域名dig +trace 域名//显示 DNS 的整个分级查询过程dig +short 域名//简化参数信息hostdig 命令的简化版本,返回当前请求域名的各种记录nslookupnslookup 命令用于互动式地查询域名记录whoiswhois 命令用来查看域名的注册情况。关于 DNS 的分享到这里先告一段落了,若内容让您有不适的赶脚,请尽情的来 diss 我吧。6. 参考资料《网络是怎样连接的》[日]户根勤 ,周自恒(译)《计算机网络(第 6 版)》谢希仁DNS 原理入门http://www.ruanyifeng.com/blog/2016/06/dns.html
预览时标签不可点
FE33大前端69FE · 目录#FE上一篇webpack loader开发下一篇koa-session源码解读关闭更多小程序广告搜索「undefined」网络结果
|
|