探讨 DNS 解析
时间:2023-01-31 15:36:01 | 来源:建站知识
时间:2023-01-31 15:36:01 来源:建站知识
DNS 服务器
在现实世界中,当您进行阅览新闻、在线下单、下载文件或观看直播时,您需要通过访问域名来访问目标网站,例如
http://youtube.com、
http://google.com 等。您只需记住这些网站的名称,而非它们的 IP 地址,因为与网站名称相比,IP 地址是很难记住的。因此,您需要一个作为 DNS 服务器的网站/域名地址本。
DNS 在日常生活中非常重要。每个在线的人都需要访问它,但同时,这对它来说也是一个非常大的挑战。如果 DNS 服务器出现故障,整个 Internet 网络都将关闭。
另外,上网的人分布在世界各地,如果每个人都去同一个地方访问某个服务器,延迟会非常大。因此,DNS 服务器必须设置为
高可用、
高并发和
分布式的。
因此,它应具有如下树状层次结构:
- 根 DNS 服务器:返回顶级域 DNS 服务器的 IP 地址。
- 顶级域 DNS 服务器:返回权威 DNS 服务器的 IP 地址。
- 权威 DNS 服务器:返回对应主机的 IP 地址。
DNS 解析过程
为了提高 DNS 解析性能,许多网络会根据位置部署
DNS 缓存服务器。
DNS 解析过程如下:(这里以访问
http://google.com 为例)
- 客户端会发出 DNS 请求,询问 http://google.com 的 IP 是什么,它会先在浏览器缓存中查找 http://google.com 的 IP 地址。
- 然后请求将被发送到本地 DNS 服务器。本地 DNS 服务器由您的网络服务供应商 (ISP, Internet Service Provider) 自动分配,这通常是您的 ISP 提供的路由器。
- 本地 DNS 服务器收到来自客户端的 DNS 请求,它会在其缓存中查找 http://google.com 的 IP 地址。如果它可以找到对应的条目,它将直接将 IP 地址返回给客户端。否则,本地 DNS 服务器会询问它的根域名服务器:“你能告诉我 http://google.com 的 IP 地址吗”?根域名服务器作为最高级别的 DNS 服务器,全球共 13 台。它不会直接解析域名,而起到一个“指路”的作用。
- 根 DNS 服务器收到本地 DNS 的请求,发现要查找域名的后缀是
.com
,然后告诉本地 DNS 服务器:“好的,你要找的既然是 .com
后缀的域名,它是由 .com
管理的。这里是 .com
区域的顶级域 DNS 服务器的 IP 地址,去找它问吧”。
- 本地 DNS 服务器转向
.com
区域的顶级域名服务器,并请求 http://google.com 的 IP 地址。顶级 .com
区域 DNS 服务器再次为该请求指明了方向。它提供了负责 google.com 的权威 DNS 服务器的 IP 地址。
- 本地 DNS 服务器然后转向了权威 DNS 服务器并询问 http://google.com 的 IP 地址。这次,http://google.com 的权威 DNS 服务器是域名解析结果的原始来源。它会将 http://google.com 的 IP 地址直接返回到本地 DNS 服务器。
- 然后本地 DNS 服务器将 IP 返回给客户端并将其缓存。至此,DNS 解析完成。
总结一下,我画了下面这张图:
DNS 负载均衡
内部负载均衡
DNS 服务器首先进行
内部负载均衡。比如,应用要访问数据库,应该在应用中配置数据库的 IP 地址,还是应该配置数据库的域名呢?
很明显,应该配置域名,因为一旦数据库因为某种原因换到另一台机器上,如果多个应用都配置了这个数据库,一旦 IP 地址改变了,所有这些应用都需要重新修改。
但是,如果配置了域名,只要在 DNS 服务器中将域名映射到一个新的 IP 地址就完成了这项工作,如此大大简化了运维工作。
在此基础上,我们可以走得更远。例如,如何在访问它的多个应用程序之间进行负载均衡?只需将其配置为域名即可。在域名解析中,我们只需要配置策略,这次返回第一个 IP,下次返回第二个 IP,就可以实现负载均衡了。
全局负载均衡
为了保证我们的应用程序的
高可用性,它们经常被部署在多个计算机数据中心,而每个地方都会有自己的 IP 地址。
当用户访问一个域名时,这个 IP 地址可以轮询多个数据中心。如果某个数据中心由于某种原因宕机了,只要在 DNS 服务器中删除该数据中心对应的 IP 地址即可。这样就可以实现一定程度的高可用。
另外,我们肯定希望纽约的用户访问纽约的数据中心,西雅图的用户访问西雅图的数据中心,这样客户体验会非常好,访问速度会超级快。这就是
全局负载均衡的概念。
我们来看看它是如何工作的,假设全国有多个地区,每个地区都有三个可用区域。
- 当客户端要访问 http://app.metaleap.com 时,需要将域名转换为 IP 地址才能访问,所以需要请求本地 DNS 解析器。
- 本地 DNS 解析器首先检查本地缓存是否有此记录。如果有,直接使用。
- 如果没有本地缓存,则需要请求本地 DNS 服务器。
- 本地 DNS 服务器也需要检查本地是否有缓存,如果有则返回。
- 如果没有本地 DNS,需要从根 DNS 服务器递归查找
.com
的顶级域名服务器,直到找到 metaleap.com 的权威 DNS 服务器,交给本地 DNS 服务器。权威 DNS 服务器通常会返回真实 IP 地址。
对于不需要
全局负载均衡的简单应用,
http://metaleap.com 的权威 DNS 服务器可以直接将域名
http://app.metaleap.com 解析为一个或多个 IP 地址,然后客户端可以使用多个 IP 地址进行轮询来实现
简单的负载均衡。
但是对于复杂的应用,尤其是跨区域、跨数据中心的大型应用,需要更复杂的
全局负载均衡机制,这需要专门的设备或服务器来做这件事——
全局负载均衡器(GSLB,Global Load Balancer)。
在
http://metaleap.com 的 DNS 服务器中,一般通过配置
CNAME,给
http://app.metaleap.com 起一个别名,如
http://app.vip.metaleap.com,然后告诉
本地 DNS 服务器去请求
GSLB 来解析域名,
GSLB 在解析这个域名的过程中,可以通过自己的策略来实现
负载均衡。
图中绘制了两层
GSLB,分别为
数据中心和
区域。我们希望不同数据中心的客户可以访问同一数据中心的资源,以提高吞吐量并减少延迟。
结论
DNS 是网络世界的通讯录,可以通过域名搜索地址,因为域名服务器是按树状结构组织的,所以域名搜索采用递归的方式,通过缓存来提升性能。
在域名和 IP 的映射过程中,应用程序有机会进行基于域名的负载均衡,可以是简单的负载均衡,也可以是基于地址、数据中心和区域的全局负载均衡。
链接:https://medium.com/geekculture/dns-deep-dive-421e321a0a06(版权归原作者所有,侵删)- END -本文仅代表作者个人观点,不代表本公众号立场。本公众号转载此图文仅出于传播更多资讯之目的。如有侵权或违规请及时联系我们,我们将立刻予以删除。—— 推荐 阅 读 ——2021 年最常用密码公布,第一毫无悬念!黑客干货|命令行/终端下载指令大全推荐大家学习100个黑客小知识!最近整理一份小白入门黑客资料《初学者如何入门黑客教程》,覆盖了网络渗透、网络攻击、防御、各种黑客常用工具入门等等。获取方式:关注公众号并回复黑客领取,更多内容陆续奉上。明天见(。・ω・。)ノ♡