9个步骤讲解 DNS 访问原理

9个步骤讲解 DNS 访问原理
文章图片
又到了招聘季了 , 前两天遇到一个面试的小伙伴 , 他说面试官和他聊得很投机 , 无意中谈到了DNS请求的过程 。 他一时语塞随便应付了两句 , 虽然对方没有追问的意思 , 但最后面试结果也并不理想 。 本着边面试边学习的态度 , 我们来看看DNS请求的过程中涉及到的定义和原理 。
DNS的含义和结构
众所周知 , 在互联网中是用IP来标识一台服务器的 。 IP地址虽然能够代表一台设备 , 但是由于记忆起来比较困难 , 所以将其替换成一个能够理解和识别的名字 , 这个名字我们称作为域名 。 例如:www.51cto.com就是一个域名 , 在域名后面会定义一个IP地址用来指向网站服务器 。 那么问题来了 , 谁来做这个从域名到IP地址的对应呢?答案是通过DNS来实现 。
DNS是域名系统(DomainNameSystem , 缩写:DNS)是互联网的一项服务 。 它将域名和IP地址相互映射的一个分布式数据库 , 在数据库中保存域名与IP的对照关系 , 从而使人更方便地访问互联网 。
DNS解析是分布式存储的 , 从结构上来说最顶层是 , 根域名服务器(ROOTDNSServer) , 存储260个顶级域名服务器的IP地址 。 对于Ipv4来说全球有13个根域名服务器 , 它储存了每个域(如.com.net.cn)的解析和域名服务器的地址信息 。 简单的说 , 根域名服务器就是存放顶级域名服务器地址的 。
顶级域名又称一级域名 , 顶级域名可以分为三类 , 即gTLD、ccTLD和NewgTLD:
gTLD:国际顶级域名(generictop-leveldomains , gTLD) , 例如:.com/.net/.org等都属于gTLD;
ccTLD:国家和地区顶级域名(countrycodetop-leveldomains , 简称ccTLD) , 例如:中国是.cn域名 , 日本是.jp域名;
NewgTLD:新顶级域名(NewgTLD) , 例如:.xyz/.top/.red/.help等新顶级域名 。
顶级域名服务器就是根据上面三类保存域名IP对应数据的 。
在顶级域名服务器下面一级就是 , 本地域名服务器(LocalDNS)一般是运营商的DNS , 主要作用就是代理用户进行域名分析的 。
如图1所示 , DNS域名服务器分为三级 , 从上到下分别是根域名服务器(RootDNSServer)、顶级域名服务器(gTLD、ccTLD、NewgTLD)、本地域名服务器(LocalDNSServer) 。
9个步骤讲解 DNS 访问原理
文章图片
图1DNS分层结构
DNS解析原理
说完DNS的结构 , 再来谈谈其运行原理 。 通过用户访问网页的过程 , 来描述DNS解析以及获取URL到IP映射的整个过程 。 其中过程比较复杂 , 会存在信息的来回传递 。 画图的过程中我们会简化信息来回传递的线段 , 重点放在信息传递的路径 , 通过9步来诠释DNS解析过程 。
9个步骤讲解 DNS 访问原理
文章图片
图2用户请求以及DNS解析的全过程
1、用户请求通过浏览器输入要访问网站的地址 , 例如:www.51cto.com 。 浏览器会在自己的缓存中查找URL对应IP地址 。 如果之前访问过 , 保存了这个URL对应IP地址的缓存 , 那么就直接访问IP地址 。 如果没有缓存 , 进入到第2步 。
2、通过计算机本地的Host文件配置 , 可以设置URL和IP地址的映射关系 。 比如windows下是通过C:windwossystem32driveretchosts文件来设置的 , linux中则是/etc/named.confg文件 。 这里查找本地的Host文件 , 看是有IP地址的缓存 。 如果在文件中依旧没有找到映射关系 , 进入第3步 。
3、请求LocalDNSServer , 通过本地运营商获取URL和IP的映射关系 。 如果在校园网 , DNS服务器就在学校 , 如果是小区网络 , DNS服务器是运营商提供的 。 总之这个服务器在物理位置上离发起请求的计算机比较近 。 LocalDNSServer缓存了大量的DNS解析结果 。 由于它的性能较好 , 物理上的距离又比较近 , 它通常会在很短的时间内返回指定域名的解析结果 。 80%的DNS解析需求在这一步就满足了 。 如果在这一步还是没有完成DNS解析 , 进入第4步
4、通过RootDNSServer进行解析 , ROOTDNSServer会根据请求的URL返回给LocalDNSServer顶级域名服务器的地址 。 例如:查询的是”.com”的域名 , 就查询gTL对应的域名服务器的地址 。
5、返回顶级域名服务器的地址以后 , 访问对应的顶级域名服务器(gTLD、ccTLD、NewgTLD) , 并且返回NameServer服务器地址 。 这个NameServer就是网站注册的域名服务器 , 上面包含了网站URL和IP的对应信息 。 例如你在某个域名服务提供商申请的域名 , 这个域名就由他们的服务器来解析 。 这个NameServer是由域名提供商维护的 。
6、NameServer会把指定域名的A记录或者CNAME返回给LocalDNSServer , 并且设置一个TTL 。
A(Address)记录是用来指定主机名(或域名)对应的IP地址记录 。 用户可以将该域名下的网站服务器指向到自己的webserver上 。 同时也可以设置您域名的二级域名 。
CNAME:别名记录 。 这种记录允许您将多个名字映射到另外一个域名 。 通常用于同时提供WWW和MAIL服务的计算机 。 例如 , 有一台计算机名为“host.mydomain.com”(A记录) 。 它同时提供WWW和MAIL服务 , 为了便于用户访问服务 。 服务商从方便维护的角度 , 一般也建议用户使用CNAME记录绑定域名的 。 如果主机使用了双线IP , 显然使用CNAME也要方便一些 。
TTL(TimeToLive):也就是设置这个DNS解析在LocalDNSServer上面的过期时间 。 超过了这个过期时间 , URL和IP的映射就会被删除 , 需要获取还要请求NameServer 。
7、如果此时获取的是A记录 , 那么就可以直接访问网站的IP了 。 但是通常来说大型的网站都会返回CNAME , 然后将其传给GTMServer 。
GTM(GlobalTrafficManager的简写)即全局流量管理 , 基于网宿智能DNS、分布式监控体系 , 实现实时故障切换及全球负载均衡 , 保障应用服务的持续高可用性 。 传给GTM的目的就是希望通过GTM的负载均衡机制 , 帮助用户找到最适合自己的服务器IP 。
也就是离自己最近 , 性能最好 , 服务器状态最健康的 。 而且大多数的网站会做CDN缓存 , 此时就更需要使用GTM帮你找到网络节点中适合你的CDN缓存服务器 。
8、找到CDN缓存服务器以后 , 可以直接从服务器上面获取一些静态资源 , 例如:HTML、CSS、JS和图片 。 但是一些动态资源 , 例如商品信息 , 订单信息 , 需要通过第9步 。
9、对于没有缓存的动态资源需要从应用服务器获取 , 在应用服务器与互联网之间通常有一层负载均衡器负责反向代理 。 有它路由到应用服务器上 。
总结
DNS服务器是用来做URL与IP地址解析的 , 帮助用户找到要访问服务器的IP 。 从DNS服务器的结构来说大致分为三层:根域名服务器 , 顶级域名服务器 , 本地域名服务器 。
【9个步骤讲解 DNS 访问原理】申请域名的供应商会提供NameServer作为DNS解析 。 从用户访问一个网站出发 , 经过浏览器 , 本地Host文件、LocalDNSServer、RootDNSServer、顶级域名服务器(gTLD、ccTLD、NewgTLD)、NameServer、GTM、CDN、ApplicationServer 。 共经历了九个步骤 。


    推荐阅读