又到了招聘季了,前两天遇到一个面试的小伙伴,他说面试官和他聊得很投机,无心中谈到了DNS请求的过程。他一时语塞随便应付了两句,虽然对方没有追问的意思,但最后面试结果也并不理想。本着边面试边学习的态度,咱们来看看DNS请求的过程当中涉及到的定义和原理。linux
众所周知,在互联网中是用IP来标识一台服务器的。IP地址虽然可以表明一台设备,可是因为记忆起来比较困难,因此将其替换成一个可以理解和识别的名字,这个名字咱们称做为域名。例如:www.51cto.com 就是一个域名,在域名后面会定义一个IP地址用来指向网站服务器。那么问题来了,谁来作这个从域名到IP地址的对应呢?答案是经过DNS来实现。web
DNS 是域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它将域名和IP地址相互映射的一个分布式数据库,在数据库中保存域名与IP的对照关系,从而令人更方便地访问互联网。面试
DNS解析是分布式存储的,从结构上来讲最顶层是,根域名服务器(ROOT DNS Server),存储260个顶级域名服务器的IP地址。对于Ipv4来讲全球有13个根域名服务器,它储存了每一个域(如.com .net .cn)的解析和域名服务器的地址信息。简单的说,根域名服务器就是存放顶级域名服务器地址的。数据库
在根域名服务器下一级就是,顶级域名服务器。例如.com的域名服务器,存储的是一些一级域名的权威DNS服务器地址(如toutiao.com的DNS)。windows
顶级域名又称一级域名,顶级域名能够分为三类,即gTLD、ccTLD和New gTLD:浏览器
在顶级域名服务器下面一级就是,本地域名服务器(Local DNS)通常是运营商的DNS,主要做用就是代理用户进行域名分析的。缓存
如图1 所示,DNS域名服务器分为三级,从上到下分别是根域名服务器(Root DNS Server)、顶级域名服务器(gTLD、ccTLD、New gTLD)、本地域名服务器(Local DNS Server)。
图1 DNS 分层结构服务器
说完DNS的结构,再来谈谈其运行原理。经过用户访问网页的过程,来描述DNS解析以及获取URL到IP映射的整个过程。其中过程比较复杂,会存在信息的来回传递。画图的过程当中咱们会简化信息来回传递的线段,重点放在信息传递的路径,经过9步来诠释DNS解析过程。网络
图2 用户请求以及DNS解析的全过程负载均衡
①用户请求经过浏览器输入要访问网站的地址,例如:www.51cto.com。 浏览器会在本身的缓存中查找URL对应IP地址。若是以前访问过,保存了这个URL对应IP地址的缓存,那么就直接访问IP地址。若是没有缓存,进入到第2步。
②经过计算机本地的Host文件配置,能够设置URL和IP地址的映射关系。好比windows下是经过C:\windwos\system32\driver\etc\hosts文件来设置的,linux中则是/etc/named.confg文件。这里查找本地的Host文件,看是有IP地址的缓存。若是在文件中依旧没有找到映射关系,进入第3步。
③请求Local DNS Server,经过本地运营商获取URL和IP的映射关系。若是在校园网,DNS服务器就在学校,若是是小区网络,DNS服务器是运营商提供的。总之这个服务器在物理位置上离发起请求的计算机比较近。Local DNS Server缓存了大量的DNS解析结果。因为它的性能较好,物理上的距离又比较近,它一般会在很短的时间内返回指定域名的解析结果。80%的DNS解析需求在这一步就知足了。若是在这一步仍是没有完成DNS解析,进入第4步
④经过Root DNS Server进行解析,ROOT DNS Server会根据请求的URL 返回给Local DNS Server顶级域名服务器的地址。例如:查询的是”.com”的域名,就查询 gTL对应的域名服务器的地址。
⑤返回顶级域名服务器的地址之后,访问对应的顶级域名服务器(gTLD、ccTLD、New gTLD),而且返回Name Server服务器地址。这个Name Server就是网站注册的域名服务器,上面包含了网站URL和IP的对应信息。例如你在某个域名服务提供商申请的域名,这个域名就由他们的服务器来解析。这个Name Server是由域名提供商维护的。
⑥Name Server会把指定域名的A记录或者CNAME返回给Local DNS Server,而且设置一个TTL。
GTM(Global Traffic Manager的简写)即全局流量管理,基于网宿智能DNS、分布式监控体系,实现实时故障切换及全球负载均衡,保障应用服务的持续高可用性。传给GTM的目的就是但愿经过GTM的负载均衡机制,帮助用户找到最适合本身的服务器IP。
也就是离本身最近,性能最好,服务器状态最健康的。并且大多数的网站会作CDN缓存,此时就更须要使用GTM帮你找到网络节点中适合你的CDN缓存服务器。
⑧找到CDN缓存服务器之后,能够直接从服务器上面获取一些静态资源,例如:HTML、CSS、JS和图片。可是一些动态资源,例如商品信息,订单信息,须要经过第9步。
⑨对于没有缓存的动态资源须要从应用服务器获取,在应用服务器与互联网之间一般有一层负载均衡器负责反向代理。有它路由到应用服务器上。
DNS服务器是用来作URL与IP地址解析的,帮助用户找到要访问服务器的IP。从DNS服务器的结构来讲大体分为三层:根域名服务器,顶级域名服务器,本地域名服务器。
申请域名的供应商会提供Name Server做为DNS解析。从用户访问一个网站出发,通过浏览器,本地Host文件、Local DNS Server、Root DNS Server、顶级域名服务器(gTLD、ccTLD、New gTLD)、Name Server、GTM、CDN、Application Server。共经历了九个步骤。