网络协议 16 - DNS 协议:网络世界的地址簿

【前五篇】系列文章传送门:html

  1. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚
  2. 网络协议 12 - HTTP 协议:经常使用而不简单
  3. 网络协议 13 - HTTPS 协议:加密路上无尽头
  4. 网络协议 14 - 流媒体协议:要说爱你不容易
  5. 网络协议 15 - DNS 协议:网络世界的地址簿

    为何在地址栏输入域名,就能直接访问到对应服务器?全局负载均衡和内部负载均衡又是什么?这些都和 DNS 解析息息相关,让咱们一块儿来解密 DNS 解析。数据库

    其实提及 DNS 解析,应该都知道它很像地址簿。就像咱们去一家新开的沃尔玛超市,经过地址簿查出来沃尔玛在哪条路多少号,而后再去找。编程

    在网络世界中,也是这样的。咱们能够记住网站的名称,可是很难记住网站的 IP 地址,所以须要一个“地址簿”,帮咱们将网站名称转换成 IP。这个“地址簿”就是 DNS 服务器缓存

DNS 服务器

    对于 DNS 服务器而言,全球每一个人上网,都须要访问它。     而全球的网民数,据最新统计,已经有 40 亿,每一个人都访问它,可想而知 DNS 服务器会有很大的访问流量压力(高并发)。     并且,它还很是重要,一旦出了故障,整个互联网都将瘫痪(高可用)。     此外,上网的人分布在全世界各地,若是你们都去同一个地方的某一台服务器,时延将会很是的(分布式)。服务器

    所以,DNS 服务器必定要具有高可用、高并发、分布式的特色。网络

    基于此,DNS 服务器设计成树状的层次结构。以下图:并发

  • 根 DNS 服务器:返回顶级域 DNS 服务器的 IP 地址;
  • 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址;
  • 权威 DNS 服务器:返回相应主机的 IP 地址。

DNS 解析流程

    上面说了 DNS 服务器面临大流量访问的压力,所以,为了提升 DNS 的解析性能,不少网站都会就近部署 DNS 缓存服务器。因此,咱们常见的 DNS 解析流程就变成了:负载均衡

  1. 客户端发出 DNS 请求给本地域名服务器。咱们访问博客园,客户端会问本地域名服务器, www.cnblogs.com 的 IP 是什么?(本地域名服务器,若是网络是经过 DHCP 配置,本地 DNS 是由你的网络服务商,如电信、联通等自动分配,它一般就在网络服务商的机房里);
  2. 本地 DNS 收到来自客户端的请求,查找“地址簿”,返回 IP 或请求根域名服务器。咱们能够理解为服务器上缓存了一张域名与 IP 对应的大表,若是能找到 www.cnblogs.com,就直接返回对应的 IP 地址。若是没有找到,本地 DNS 会去问它的根域名服务器;
  3. 根 DNS 收到来自本地 DNS 的请求,返回 .com 对应的顶级域名服务器的地址。根域名服务器是最高层次的,全球共有 13 套,它不直接用于域名解析,而是指明怎样去查找对应 IP。它发现请求的域名后缀是 .com,就会返回 .com 对应的顶级域名服务器的地址;
  4. 本地 DNS 服务器收到顶级 DNS 服务器地址,请求顶级 DNS 服务器查询域名 IP
  5. 顶级 DNS 服务器返回权威 DNS 服务器地址。顶级域名服务器就是大名鼎鼎的,负责 .com、.net、.org 这些二级域名,好比 cnblogs.com,它会返回对应的权威 DNS 服务器地址;
  6. 本地 DNS 服务器收到权威 DNS 服务器地址,请求权威 DNS 服务器查询域名 IP。而 cnblogs.com 的权威 DNS 服务器就是域名解析结果的原出处;
  7. 权威 DNS 服务器返回对应 IP。权威 DNS 服务器查询“地址簿”,获取到域名对应 IP 地址,返回给本地 DNS 服务器;
  8. 本地 DNS 服务器收到 IP,返回给客户端
  9. 客户端与目标创建链接

    至此,咱们完成了 DNS 的解析过程,整个过程以下图:分布式

负载均衡

    站在客户端角度,上述过程是一次 DNS 递归查询过程。由于本地 DNS 全权为它代劳,它只要坐等结果就行了。在这个过程当中,DNS 除了能够经过名称映射为 IP 地址外,它还能够作另一件很重要的事 - 负载均衡高并发

    仍是拿咱们逛沃尔玛超市为例。它可能在一个城市里会有多家店,咱们要逛沃尔玛,能够就近找一家,而不用都去同一家,这就是负载均衡。

DNS 作负载均衡也有花样能够玩。 1)DNS 作内部负载均衡     所谓的内部负载均衡,其实很好理解。就像咱们的应用访问数据库,在应用里配置的数据库地址。若是配置成 IP 地址,一旦数据库换到了另一台机器,咱们就要修改配置。若是咱们有不少台应用同时连一个数据库,一换 IP,就须要将这些应用的配置所有修改一遍,是否是很麻烦?因此,咱们能够将数据地址配置成域名。在更换数据库位置时,只要在 DNS 服务器里,将域名映射为新的 IP 地址就能够了。

    在这个基础上,咱们能够更进一步 。例如,某个应用要访问另一个应用,若是配置另一个应用的 IP 地址,那么这个访问就是一对一的。可是当被访问的应用因流量过大撑不住的时候,咱们就须要部署多个应用。这时候,咱们就不能直接配置成 IP,而是要配置域名了。只要在域名解析的时候,配置好策略,此次返回一个 IP,下次返回第二个 IP,就实现了负载均衡。

2)DNS 作全局负载均衡     为了保证咱们应用的高可用性,每每会将应用部署在多个机房,每一个地方都会有本身的 IP 地址。当用户访问某个域名的时候,这个 IP 地址能够轮询访问多个数据中心。若是一个数据中心由于某种缘由挂了,只要将这个 IP 地址从 DNS 服务器中删掉就能够了,用户不会访问到宕机的服务器,保证了应用的可用性。

    另外,咱们确定但愿用户能访问就近的数据中心。这样客户访问速度就会快不少,体验也会好不少,也就实现了全局负载均衡的概念。

负载均衡示例

    咱们经过 NDS 访问数据中心对象存储上的静态资源为例,来看一看整个过程。

    假设全国有多个数据中心,托管在多个运营商,每一个数据中心有三个可用区。对象存储能够经过跨可用区部署,实现高可用性。在每一个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)。那么,请求过程以下图:

  1. 当一个客户端要访问 object.yourcompany.com 的时候,须要将域名转换为 IP 地址进行访问,因此它要请求本地 DNS 解析器;
  2. 本地 DNS 解析器先查看本地的缓存是否有这个记录。若是有,就直接用,省略后续查询步骤,提升相应时间;
  3. 若是本地无缓存,就须要请求本地的 DNS 服务器;
  4. 本地 DNS 服务器通常部署在数据中心或者你所在的运营商网络中。本地 DNS 服务器也须要看本地是否有缓存,若是有,就直接返回;
  5. 本地没有,经过第 五、六、7 步骤获取到 IP 地址,缓存到本地 DNS 解析器中,而后在返回给客户端。

    对于不须要作全局负载均衡的简单应用来说,yourcompany.com 的权威 DNS 服务器能够直接将 object.yourcompa.com 这个域名解析为一个或者多个 IP 地址,而后客户端能够经过多个 IP 地址,进行简单的轮询,实现简单的负载均衡。

    可是对于复制的应用,尤为是跨地域跨运营商的大型应用,就须要更加复杂的全局负载均衡机制,于是须要专门的设备或者服务器来作这件事情,这就是全局负载均衡器(GSLB,Global Server Load Balance)

    在 yourcompany.com 的 DNS 服务器中,通常是经过配置 CNAME 的方式,给 object.yourcompany.com 起一个别名。例如 object.vip.yourcompany.com,而后告诉本地 DNS 服务器,让它请求 GSLB 解析这个域名,GSLB 就能够在解析这个域名的过程当中,经过本身的策略实现负载均衡。

上图中画了两层的 GSLB,是由于分运营商和地域。咱们但愿不一样运营商的客户,能够访问对应运营商机房中的资源,这样不跨运营商访问,有利于提升吞吐量,减小时延。两层 GSLB 的过程以下:

  1. 第一层 GSLB,经过查看请求它的本地 DNS 服务器所在的运营商,就知道用户所在的运营商。假设是移动,经过 CNAME 的方式,经过另外一个别名 object.yd.yourcompany.com,告诉本地 DNS 服务器去请求第二层的 GSLB;
  2. 第二层 GSLB,经过查看请求它的本地 DNS 服务器的地址,知道用户所在的地理位置,而后将距离用户位置比较近的一个 Region 的六个内部负载均衡的地址,返回给本地 DNS 服务器;
  3. 本地 DNS 服务器将结果返回给本地 DNS 解析器;
  4. 本地 DNS 解析器将结果缓存后,返回给客户端;
  5. 客户端开始访问属于相同运营商的,且距离比较近的 Region1 中的对象存储。固然,客户端获得了六个 IP 地址,它能够经过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储通常会有三个备份,从而实现对存储读写的负载均衡。

小结

  • DNS 是网络世界的地址簿。能够经过域名查地址,由于域名服务器是按照树状结构组织的,于是域名查找是使用递归查询的方式,并经过缓存的方式加快效率;
  • 在域名和 IP 的映射中,给了应用基于域名作负载均衡的机会,能够是简单的负载均衡,也能够是根据地址和运营商作的全局负载均衡。

参考:

  1. 维基百科-域名系统 词条;
  2. 知乎-域名解析
  3. 刘超 - 趣谈网络协议系列课;

原文出处:https://www.cnblogs.com/BeiGuo-FengGuang/p/10176702.html

相关文章
相关标签/搜索