浅谈网络 | 应用层之DNS协议

news/2024/12/2 11:03:25/

目录

    • DNS 服务器的工作原理
    • DNS 解析流程
    • 负载均衡
    • 示例:DNS 访问数据中心中对象存储上的静态资源

随着互联网的普及,网站的数量越来越多,常用的网站也有二三十个。如果我们全部用 IP 地址来访问网站,恐怕很难记住。于是,我们就需要一个“地址簿”,通过名称即可查找具体的地址。

例如,我要去西湖边的“外婆家”餐馆,这就是名称,之后我通过地址簿查找它的具体位置,确定是哪条路、多少号。同样的,在网络世界里,我们记得住网站的名称,但很难记住网站的 IP 地址。为了解决这个问题,就需要一个类似“地址簿”的东西,这就是 DNS 服务器

DNS 服务器的工作原理

DNS(域名系统)通过类似树状的层次结构来将域名映射到 IP 地址。具体来说,DNS 的层次结构包括以下几个步骤:

  1. 根 DNS 服务器:当我们请求访问某个网站时,根 DNS 服务器返回顶级域 DNS 服务器的 IP 地址。
  2. 顶级域 DNS 服务器:该服务器返回该域名下的权威 DNS 服务器的 IP 地址。
  3. 权威 DNS 服务器:最终,权威 DNS 服务器返回请求域名的具体主机 IP 地址。

通过这个过程,DNS 系统实现了从域名到 IP 地址的转换,让我们能够通过网站名称顺利访问网站,而不需要记住每个网站的 IP 地址。

DNS 的挑战

从上面的描述可以看出,DNS 在我们的日常生活中扮演着重要角色。每个人在上网时,都需要通过 DNS 来访问互联网。如果 DNS 出现故障,整个互联网将受到严重影响。

此外,全球有数以亿计的互联网用户,如果大家都访问同一个 DNS 服务器,访问延迟将会非常高。因此,DNS 服务器必须具备 高可用性、高并发能力分布式架构,以应对全球用户的访问需求。

DNS 的树状结构

为了应对这些挑战,DNS 采用了树状的层次结构,这种结构使得 DNS 服务器的负载分布均匀,能够有效应对大量并发请求并提供快速响应。
在这里插入图片描述

DNS 解析流程

为了提高 DNS 的解析性能,很多网络会就近部署 DNS 缓存服务器。接下来,我们来看看 DNS 的解析流程是如何进行的。

首先,客户端(比如你的电脑)会发出一个 DNS 请求,询问 www.163.com 的 IP 地址,并将请求发送到 本地域名服务器(本地 DNS)。那么,什么是本地 DNS 呢?

如果通过 DHCP 配置,本地 DNS 服务器通常由你的网络服务商(如电信、移动等)自动分配。它通常位于你网络服务商的某个机房内。

当本地 DNS 收到客户端的请求时,可以将其想象为一台缓存了大量域名和对应 IP 地址的服务器。它首先会检查缓存中是否存在 www.163.com 的记录。

  1. 如果找到了,本地 DNS 会直接返回 IP 地址。

  2. 如果没有找到,本地 DNS 会继续向 根域名服务器 发出请求:“请问,www.163.com 的 IP 地址是多少?”

    根 DNS 服务器位于层次结构的最上层,全球共有 13 套根 DNS 服务器。根服务器并不直接进行域名解析,但它能指引查询者找到正确的方向。

  3. 当根 DNS 收到来自本地 DNS 的请求时,它会查看请求的域名后缀,例如 .com,并回答:“哦,www.163.com 这个域名是由 .com 区域管理的,我会告诉你 .com 的顶级域名服务器的地址,去问它吧。”

    本地 DNS 接着向顶级域名服务器(如 .com.net.org 等)发送查询请求,询问 www.163.com 的 IP 地址。

  4. 顶级域名服务器的职责是管理二级域名,比如 163.com。它会告诉本地 DNS 服务器,“你去找负责 www.163.com 的权威 DNS 服务器问问吧。”

    本地 DNS 向 权威 DNS 服务器(即 163.com 的 DNS 服务器)发出查询请求,询问 www.163.com 对应的 IP 地址。

  5. 权威 DNS 服务器是域名解析的最终来源,它负责给出准确的 IP 地址。它会查找并返回正确的 IP 地址,例如 X.X.X.X

    最终,本地 DNS 将解析得到的 IP 地址返回给客户端。客户端收到 IP 地址后,可以与目标服务器建立连接,完成访问。

通过这个流程,DNS 实现了将域名(如 www.163.com)映射到 IP 地址的功能,使得我们能够方便地通过域名访问互联网资源,而不必记住每个网站的具体 IP 地址。
DNS 的解析过程如下图:
在这里插入图片描述

负载均衡

从客户端的角度来看,DNS 的递归查询过程主要是由本地 DNS 完成的,它会为客户端提供查询服务,而客户端只需要等待查询结果即可。在此过程中,DNS 不仅可以通过名称映射 IP 地址,还可以执行另一项重要任务——负载均衡。

以访问“外婆家”为例,这里假设“外婆家”在杭州有多个分店。当一个顾客想要去吃“外婆家”的时候,他们可以选择离自己最近的那家分店,而不必非得去某一家,这种根据地理位置选择不同服务器的方式,实际上就是负载均衡。

内部负载均衡

在内部负载均衡的情况下,应用程序通过域名访问资源,而不是直接配置 IP 地址。例如,当一个应用要访问数据库时,理应配置数据库的域名而非 IP 地址。原因很简单:如果数据库的 IP 地址发生变化,所有依赖这个数据库的应用都需要做相应的修改。如果使用的是域名,只需要更新 DNS 服务器中的 IP 映射,所有应用都能自动指向新的地址,这大大简化了运维工作。

进一步地,如果某个应用需要访问另一个应用,当我们配置该应用的 IP 地址时,访问关系是固定的、单一的。然而,随着服务的扩展,若要将流量分散到多个服务器上,可以通过域名解析实现负载均衡。例如,DNS 解析可以配置策略,轮流返回不同的 IP 地址(第一次返回第一个 IP,第二次返回第二个 IP),从而将流量分配到不同的服务器上。

全局负载均衡

除了内部负载均衡,DNS 还可以实现 全局负载均衡,这对于保证应用的高可用性非常重要。在这种情况下,应用通常会部署在多个地理位置不同的数据中心,每个数据中心有自己的 IP 地址。当用户访问某个域名时,DNS 可以根据不同的数据中心返回相应的 IP 地址。

如果某个数据中心发生故障,只需要在 DNS 服务器中删除该数据中心的 IP 地址,就能实现故障切换,保证应用的持续可用。

此外,全局负载均衡还可以根据用户的地理位置来选择数据中心。比如,北京的用户访问位于北京的数据中心,上海的用户访问上海的数据中心,这样可以提供更快的响应速度和更好的用户体验。

通过这种方式,DNS 不仅仅是实现域名到 IP 地址的映射工具,它还承担了提升系统高可用性和优化用户体验的重要责任。

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

通过 DNS 访问数据中心中对象存储上的静态资源的过程如下:

1. 假设与架构概述

假设全国有多个数据中心,托管在不同的运营商网络中。每个数据中心至少有三个可用区(Available Zone),并通过跨可用区部署实现高可用性。每个数据中心至少部署两个内部负载均衡器(SLB),这些负载均衡器后接多个对象存储的前置服务器(Proxy-server)。

2. DNS 解析过程

当客户端访问 object.yourcompany.com 时,DNS 解析过程如下:

  1. 本地 DNS 解析器:客户端首先请求本地 DNS 解析器。如果本地 DNS 解析器已有缓存记录,它会直接返回缓存中的结果,避免每次都重新解析。如果没有缓存,则向本地 DNS 服务器发起请求。

  2. 本地 DNS 服务器:本地 DNS 服务器通常部署在数据中心或运营商的网络中。如果本地 DNS 服务器缓存中没有相关记录,它会继续向更高层级的 DNS 服务器发起递归查询。查询过程会经过根 DNS 服务器、顶级域名服务器(如 .com)以及 yourcompany.com 的权威 DNS 服务器,最终返回真实的 IP 地址。

3. 负载均衡机制

  • 对于简单的应用,yourcompany.com 的权威 DNS 服务器会将 object.yourcompany.com 解析为一个或多个 IP 地址,客户端可以通过轮询或随机方式选择其中一个 IP 地址进行访问,从而实现负载均衡。

  • 对于跨地域和跨运营商的大型应用,简单的 DNS 解析方式无法满足需求。此时,需要使用 全局负载均衡器(GSLB) 来提供更复杂的流量调度。

4. 全局负载均衡(GSLB)

在复杂应用场景中,DNS 解析会通过全局负载均衡(GSLB)进行优化,流程如下:

  1. CNAME 配置:在 yourcompany.com 的 DNS 配置中,可能会为 object.yourcompany.com 配置一个 CNAME(如 object.vip.yourcompany.com)。本地 DNS 解析器会根据这个 CNAME 请求 GSLB 来解析该域名,从而进行智能的负载均衡。

  2. 两层 GSLB 架构:为了支持跨地域、跨运营商的流量分配,GSLB 通常采用两层架构:

    • 第一层 GSLB:根据客户端所在的运营商(如移动、联通等),第一层 GSLB 会将流量引导到第二层 GSLB。通过 CNAME 配置,将流量指向 object.yd.yourcompany.com

    • 第二层 GSLB:根据客户端的地理位置,第二层 GSLB 会选择距离用户最近的 Region,并返回该地区的多个内部负载均衡器(SLB)地址。

5. 客户端访问与负载均衡

  • 本地 DNS 解析器:获取到从 GSLB 返回的 IP 地址后,本地 DNS 解析器会缓存这些地址以提高后续请求的响应速度。

  • 客户端访问:客户端通过负载均衡机制(如轮询或随机选择)从多个 IP 地址中选择一个进行访问,从而实现对存储资源的负载均衡。

6. 高可用性设计

为了确保高可用性,每个数据中心的对象存储通常会部署多个副本,并分布在不同的可用区内。通过负载均衡,客户端可以选择最合适的可用区进行访问。

7. 优化与总结

  • 智能流量调度:根据客户端的地理位置和运营商,GSLB 可以动态调整流量分配策略,确保客户端访问到距离最近的资源。

  • 全局负载均衡:避免了跨运营商或跨地域访问带来的时延,提高了系统的吞吐量和响应速度。

  • 容错与冗余:通过跨可用区部署和数据副本,系统确保了对象存储服务的高可用性。

8. 优化建议

  • 精细化地域划分:通过更精细的地域分配策略,进一步缩短用户与目标资源的物理距离,从而优化响应时间。

  • 智能负载均衡:结合实时流量和负载情况,动态调整负载均衡策略,避免单一策略可能带来的资源浪费。

  • 自动化运维与监控:加强系统监控,确保每个数据中心和可用区的健康状态,及时发现并解决故障,保证服务连续性。

在这里插入图片描述
总结

DNS(域名系统)网络世界的地址簿,通过域名查找对应的 IP 地址。由于域名系统采用树状结构进行组织,域名查找过程通常使用递归方法,同时为了提高性能,DNS 采用了缓存机制。

在域名与 IP 地址的映射过程中,DNS 提供了基于域名实现负载均衡的能力:

  • 简单负载均衡:通过返回多个 IP 地址,客户端可以通过轮询或随机选择一个地址进行访问,从而实现负载均衡。

  • 全局负载均衡:对于跨地域、跨运营商的大型应用,DNS 通过全局负载均衡(GSLB)机制,结合客户端的地理位置和运营商信息,动态选择最优的访问路径和资源。这种方式可以显著提升吞吐量、减少时延并提高系统可用性。

总结而言,DNS 不仅仅是一个简单的域名解析工具,它还为现代应用提供了灵活的负载均衡方案,确保高效、可靠的网络访问。


http://www.ppmy.cn/news/1551733.html

相关文章

LeetCode 动态规划 爬楼梯

爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 1 阶 2 阶 示例 2&#xff…

追寻红色足迹,领略西湖古韵今风|中共杭州美创科技有限公司支部党建活动纪实

11月23日,为深入推进党员思想政治教育,大力弘扬红色文化,传承革命先辈不朽精神,中共杭州美创科技有限公司支部于精心组织了一场主题为“追寻红色足迹,领略西湖古韵今风”的党建活动。此次活动以实地学习与亲身体验相结…

JS听到了爆燃的回响

Window对象 BOM(浏览器对象模型) BOM是浏览器对象模型 Window对象是一个全局对象,也可以说是JS中的顶级对象 像是document、alert()、console.log()都是window的属性 所有通过var定义在全局作用域的变量、函数都会变成window对象的属性和…

搭建业务的性能优化指南

这是一篇搭建业务优化的心路历程,也是写给搭建业务的性能优化指南。 前言 直到今天,淘内的页面大多都迁移到了 SSR,从我们终端平台 - 搭建研发团队的视角看,业务大致可以分为两类 —— 搭建派 和 源码派。 这两者互不冲突&#xf…

【UG\NX二次开发-Block UI】指定方位 VisibleManipulatorHandles 设置控制器手柄可见

特定于块属性 VisibleManipulatorHandles 值 Origin 0x1 原点 Ratate X 0x10 旋转 Ratate Y 0x20 Ratate Z 0x40 Translate X 0x2 平移 Translate Y 0x4 Translate Z 0…

基于.NET调用WebService服务

基于.NET调用WebService服务 上一篇文章用java的Spring Boot框架搭建了一个WebService服务端,这篇文章通过.NET进行调用,下文基于Visual Studio 2022 引入WebService服务 项目右键 -> 添加 -> 服务引用 选择WCF Web Service,点击下一…

有效判断住宅IP与机房IP的方法

一、住宅IP与机房IP的定义 1. 住宅IP 是指由互联网服务提供商(ISP)分配给个人用户家庭网络的IP地址。这类IP地址通常是自然分布的,通常来自家庭宽带用户,具有如下特点: 用户身份真实性高:住宅IP通常与真…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…