我是靠谱客的博主 魁梧小天鹅,最近开发中收集的这篇文章主要介绍DNS协议:网络世界的地址簿-域名解析和负载均衡,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • URL
          • 组成部分
          • URL 的语法
          • URL 快捷方式
      • DNS 服务器
      • DNS 解析流程
      • DNS 负载均衡
      • 示例:DNS 访问数据中心对象存储上的静态资源

URL

组成部分

网络上冲浪我们用 URL 来定位资源,一个正确的 URL 必须告诉客户端怎么访问资源,资源在哪里。例如:

https://www.baidu.com/index.html?query=test&userName=testName

  • 协议:告知浏览器客户端怎样访问资源,这里的是 http协议
  • 主机名:就是域名(www.baidu.com),域名会对应一个 ip 地址,告知 Web 客户端资源位置
  • 路径:说明了请求的是服务器上哪个特定的本地资源,这里是 index.html
URL 的语法
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

协议(scheme):访问服务器以获取资源时要使用哪种协议
用户(user):一些资源访问需要用户名和密码来认证(如 ftp),默认值时匿名用户
密码(password):用户名后面可能要包含的密码,中间由冒号分隔
主机(host):资源宿主度武器的主机名或点分 IP 地址
端口(port):资源宿主服务器正在监听的端口号,没有的话对HTTP来说默认的端口号是80
路径(path):服务器上资源的本地名,由一个斜杠将所需的所有附加信息 (如type=d表明访问的资源是目录),参数为 key/value对,URL 中可以包含多个参数,用分号隔开
查询(query):查询某类资源,用问号与其他组件隔开,如果有多个查询,则用 & 隔开。如:https://www.taobao.com/inventory.cig?item=731&color=red
片段(frag):对一个带有章节的文本文档,资源的 URL 会指向整个文档,但是可以根据片段显示感兴趣的章节,片段标识一小片或一部分资源名字,用 # 与其他组件隔开

URL 快捷方式
  • 相对 URL :相对 URL 是一个资源的便捷缩略方式,如 ./index.html
  • 绝对 URL :绝对 URL 中包含有访问资源所需的所有信息,如 http://www.baidu.com/index.html
  • 自动扩展 URL :比如我们访问百度的时候,我们直接访问 baidu.com 即可,浏览器会自动扩展,自动扩展有两种方式,第一种是根据主机名来扩展,比如你输入 baidu,则自动扩展为 www.baidu.com ;第二种是根据历史记录来扩展,也就是浏览器将你访问过的 URL 历史存储起来,下次输入 URL 时会自动扩展。

DNS 服务器

了解了 URL 后,我们知道其中的域名需要解析为 IP 地址,需要一个地址簿来记载 IP 和域名的一对一映射关系。这个地址簿就是DNS 服务器。他负责将域名解析为 IP 供网民们冲浪。可见DNS 在日常生活中多么重要,人们上网需要访问他,这对它来讲也是巨大挑战。一旦出了故障,整个互联网将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方,访问一台服务器,时延将非常大。因而,DNS 服务器,一定要设置成高可用、高并发和分布式的。

于是,就有了这样的树状层次结构。
在这里插入图片描述

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

DNS 解析流程

为了提高 DNS 的解析性能,很多网络都会就近部署 DNS 缓存服务器。于是,就有了以下的 DNS 解析流程。

  1. 电脑客户端会发出一个 DNS 请求,问 www.163.com 的 IP 是啥啊,并发给本地域名服务器(本地 DNS)。本地域名服务器(本地 DNS) 是什么呢?如果是通过 DHCP 配置,本地 DNS 由你的网络服务商(ISP),如电信、移动等自动分配,它通常就在你网络服务商的某个机房。
  2. 本地 DNS 收到来自客户端的请求。会先在自己的数据库中查询。如果能找到 www.163.com,它就直接返回对应的 IP 地址。如果没有,本地 DNS 会去访问它的根域名服务器:“老大,能告诉我 www.163.com 的 IP 吗?”根域名服务器是最高层次的,全球有 13 套。虽然不能直接用于域名解析,但是能指明道路。
  3. 根 DNS 收到本地 DNS 请求,返现后缀是.com,说:“哦,www.163.com啊,这个域名是由.com 区域管理,我给你它的顶级域名服务器地址,你去问问吧”
  4. 本地 DNS 转向问顶级域名服务器:“老二,你能告诉我 www.163.com 的 IP 地址吗?顶级域名服务器就如 .com,.net,.org这些一级域名,它负责管理二级域名,比如 163.com,所以它能提供一条更清晰的方向。”
  5. 顶级域名服务器说:“我给你负责 www.163.com 区域的权威 DNS 服务器地址,你去问它就可以访问到。”
  6. 本地 DNS 问权威 DNS:“您好,www.163.com 对应的 IP 是啥?”163.com 的权威 DNS 服务器是域名解析结果的原出处。为啥叫权威?就是我的域名我做主。查到后就返回给本地 DNS。本地 DNS 在将 IP 地址返回给库换段,客户端和目标简历连接。
    在这里插入图片描述

DNS 负载均衡

站在客户端角度,这是一次 DNS 递归查询过程,因为本地 DNS 全权为他效劳,只要坐等结果就行。这个过程中,DNS 除了用名称映射为 IP 地址,还可以做负载均衡。

好比“海底捞”在一个地方连锁了好几个门店,就对应了多个地址。每个人去吃只需要找距离自己最近的就好,不用都去同一家门店,这就是负载均衡。

DNS 首先可以做内部负载均衡

比如,一个应用要访问数据库,在这个应用里面应该配置这个数据库的 IP 地址,还是应该配置这个数据库的域名呢?显然是配置域名,因为一旦这个数据库因为某种原因,换到了另外一台机器上,此时若有多个应用都配置了这台数据库的话,一换 IP ,就需要将这些应用全部修改一遍。但是如果配置了域名,则只要在 DNS 服务器里,将域名映射为新的 IP 地址,这个工作就完成了,大大简化了运维。

在这个基础上,我们再进一步。如某个应用要访问另外一个应用,如果配置另外一个应用的 IP 地址,那么这个访问就是一对一的。但是当访问的应用撑不住时,我们其实可以部署多个。但是访问他的应用,如何再多个之间进行负载均衡?只要配置称为域名就可以了。在域名解析的时候,我们只要修改配置策略,这次只返回第一个 IP,下次返回第二个就可以实现负载均衡了。

另外一个 DNS 还可以做全局负载均衡

为了保证应用的高可用,往往会部署在多个机房,每个地方都会有自己的 IP。当用户访问某个域名的时候,这个 IP 地址可以轮询访问多个数据中心。如果一个数据中心因为某种原因挂了,只要在 DNS 服务器里面,将这个数据中心对应的 IP 删除,就可以实现一定的高可用。
另外我们肯定希望北京的用户访问北京的数据中心,杭州的用户访问杭州的数据中心,这样,客户的体验会非常好,访问速度会超快。这就是全局负载均衡的概念。

示例:DNS 访问数据中心对象存储上的静态资源

假设全国有多个数据中心,托管在多个运营商,每个数据中心可用区(Available Zone)。对象存储通过跨可用区部署,实现高可用性。在每个数据中心种,都至少部署两个内部负载据衡器,内部负载均衡器后面对接多个对象存储的前置服务器 (Proxy-server)。
在这里插入图片描述

  1. 当一个客户端要访问 object.your.company.com 的时候,需要将域名转换为 IP 地址进行访问,所以它要请求 DNS 解析器。
  2. 本地 DNS 解析器先查看本地缓存是否有这个记录。如果有则直接使用,因为上面的过程太复杂了,如果每次都要递归解析,就太麻烦。
  3. 如果本地无缓存,则需要请求本地的 DNS 服务器。
  4. 本地的 DNS 服务器一般部署在你的数据中心或者所在的运营商网络中,本地 DNS 服务器也需要看本地是否有缓存,有则返回。
  5. 至 7. 如果本地没有,本地 DNS 才需要递归地从根 DNS 服务器,查到 .com 地顶级域名服务器,最终查到 yourcompany.com 权威 DNS 服务器,给本地 DNS ,权威 DNS 服务器按说会返回真实要访问地 IP。

对于不需要做全局负载均衡地简单应用,yourcompany.com 的权威 DNS 服务器可以直接将 object.yourcompany.com 这个域名解析为一个或者多个 IP,然后客户端可以通过多个 IP 进行简单轮询和负载均衡。

但是对于复杂的应用,尤其是跨地域跨运营商的大型应用,则需要更加复杂的全局负载均衡机制,因而需要专门的设备或者服务器来做这件事,这就是全局负载均衡器。

上图画了两层的 GSLB,是因为分运营和地域。我们希望不同运营商的客户,可以访问相同运营商机房中的资源,这样不跨运营商访问,有利于提高吞吐量,减少时延。

  1. 第一层 GSLB,通过插卡请求它本地 DNS 服务器所在运营商,就知道用户所在的运营商。假设是移动,通过 CNAME 的方式,通过另一个别名来告诉本地 DNS 去请求第二层的 GSLB
  2. 第二次 GSLB,通过产看请求它的本地 DNS 服务器所在的地址,就知道用户所在地理位置然后将距离用户位置比较近的 Region里面,六个内部负载均衡的地址,返回给本地 DNS。
  3. 本地 DNS 服务器将结果返回给本地 DNS 解析器。本地解析器将结果缓存后返回客户端
  4. 客户端开始访问属于运营商比较近的 Region1 中的对象春初,当客户端得到了 六个 IP 地址,可以通过负载均衡的方式,随机或轮询选择一个可用区进行访问。对象存储一般有三个备份,从而可以实现存储读写的负载均衡。

EOF
《趣谈网络协议》笔记

最后

以上就是魁梧小天鹅为你收集整理的DNS协议:网络世界的地址簿-域名解析和负载均衡的全部内容,希望文章能够帮你解决DNS协议:网络世界的地址簿-域名解析和负载均衡所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部