[架构之路-237]:目标系统 - 纵向分层 - 网络通信 - DNS的递归查询和迭代查询

目录

一、DNS协议与DNS系统架构

1.1 什么是DNS协议

1.2 为什么需要DNS协议

1.3 DNS系统架构

二、DNS系统的查询方式

2.1 递归与迭代的比较

2.2 DNS递归查询

2.3 DNS迭代查询


一、DNS协议与DNS系统架构

1.1 什么是DNS协议

DNS(Domain Name System)协议是互联网中的一种协议,它用于将域名转换为相应的 IP 地址,以实现将人类可读的域名映射到计算机可理解的 IP 地址的过程

在互联网上,每个设备都有一个唯一的 IP 地址,通过这个 IP 地址,可以定位并访问到设备上提供的服务,比如网页服务器、电子邮件服务器等。然而,IP 地址是一串数字,很难被人类轻松记忆。为了方便人们使用,DNS 协议提供了一种映射机制,使用易于记忆的域名来引用每个设备的 IP 地址。

DNS 协议的工作原理如下:

  1. 当用户在浏览器中输入一个域名(比如www.example.com),浏览器会首先检查本地缓存是否有对应的 IP 地址。如果有且没有过期,浏览器直接使用缓存的 IP 地址。否则,浏览器会向本地 DNS 服务器发送询问请求。

  2. 本地 DNS 服务器是由互联网服务提供商(ISP)或本地网络管理员配置的。本地 DNS 服务器首先检查自己的缓存,如果有对应的 IP 地址,就返回给浏览器。否则,本地 DNS 服务器会向根 DNS 服务器发送查询请求。

  3. 根 DNS 服务器是全球分布的一组服务器,它们保存了顶级域名服务器的信息。当根 DNS 服务器收到查询请求时,它会查找到对应的顶级域名服务器的 IP 地址,并将其返回给本地 DNS 服务器。

  4. 本地 DNS 服务器接收到根 DNS 服务器返回的顶级域名服务器 IP 地址后,再向顶级域名服务器发送查询请求。

  5. 顶级域名服务器是负责管理特定顶级域名(比如.com、.org、.net 等)的服务器。当顶级域名服务器收到查询请求时,它会返回下一级域名服务器的 IP 地址。

  6. 这个过程会按照域名的层级结构一级一级地进行,直到最终获取到域名对应的 IP 地址。最后,本地 DNS 服务器将该 IP 地址返回给浏览器,并将其缓存起来以备后续使用。

通过 DNS 协议,用户可以更方便地使用域名来访问互联网上的资源,而无需记住复杂的 IP 地址。同时,DNS 协议还支持通过反向查询将 IP 地址转换为域名。

1.2 为什么需要DNS协议

DNS协议是互联网中必不可少的一项基础协议,它的存在和作用有以下几个重要原因:

  1. 简化访问:DNS协议使得人们可以通过易于记忆和书写的域名来访问网站、发送电子邮件、访问网络服务等。相比于记忆复杂的IP地址,使用域名更加方便和易于使用。

  2. IP地址解析:将域名解析为对应的IP地址是DNS协议的重要功能。通过DNS协议,可以将人类可读的域名映射到计算机可理解的IP地址,从而实现网络上的资源定位和访问。

  3. 负载均衡***:DNS协议还可以通过域名解析的方式实现负载均衡。通过配置多个具有相同域名的IP地址,DNS服务器可以根据负载情况将域名解析为不同的IP地址,从而分发访问请求到多个服务器,均衡服务器负载,提高系统的可用性和性能

  4. 安全性:DNS协议在实际应用中也有助于保障网络安全。例如,DNS协议可以用于实现域名屏蔽和网络内容过滤,以提供更安全和更合规的网络访问。

总而言之,DNS协议的存在非常重要,它提供了一种将易于记忆的域名映射为计算机可理解的IP地址的机制,使得互联网资源更易访问,同时也支持了负载均衡和网络安全等功能。没有DNS协议,互联网的可用性、可访问性和易用性都将受到很大的限制。

1.3 DNS系统架构

DNS(Domain Name System)系统的架构主要由以下几个组成部分组成:

  1. 用户终端设备:用户通过终端设备(如电脑、手机、平板等)进行域名的访问和查询请求。

  2. 本地递归域名服务器:也称为本地域名解析服务器或递归解析器。它是用户设备与DNS系统之间的中间层,负责接收用户终端设备发送的域名查询请求,并根据需要向其他域名服务器发起迭代或递归查询,最终将解析结果返回给用户终端设备。本地递归域名服务器通常由互联网服务提供商(ISP)或企业的网络管理员提供。本地域名通常采用递归查询,这样本地域名全权为主体提供域名服务,简化了主机的DNS协议的复杂度。主机端就可以把域名的查询完全递交给本地域名服务器,不需要与无数个递归的域名服务器交互。

  3. 根域名服务器:根域名服务器是DNS系统的顶级域名服务器,它存储了顶级域名(如".com"、".net"等)的相关信息。根域名服务器的数量有13个(well known),分布在全球各地。当本地递归域名服务器接收到用户查询请求时,如果没有所需域名的缓存记录,它将向根域名服务器发送查询请求,以获取顶级域名服务器的地址。根域名通常采用迭代查询,否则,根域名很容易超过其负载,容易崩溃。

  4. 顶级域名服务器:顶级域名服务器(TLD服务器)是存储特定顶级域名(如".com"、“.net”、".org"等)下的权威域名服务器地址的服务器。当本地递归域名服务器收到根域名服务器返回的顶级域名服务器地址后,它将向顶级域名服务器发送查询请求,以获取权威域名服务器的地址。该服务器的地址是由跟域名服务器传递给本地域名服务器的。

  5. 权威域名服务器:权威域名服务器(Authoritative Name Server)是存储特定域或子域的解析信息的服务器。当本地递归域名服务器向顶级域名服务器发送查询请求后,顶级域名服务器会返回权威域名服务器的地址。本地递归域名服务器再次向权威域名服务器发送查询请求,并获取所需域名的解析结果。

        DNS系统的架构使用层级分布的方式,从根域名服务器到顶级域名服务器,再到权威域名服务器,逐级进行查询,直到找到所需域名的解析结果。这种分布式架构能够支持海量的域名解析请求,并提供可靠的域名解析服务。

备注:DNS服务器是一个系统,不是一个单一的DNS服务器,查询域名也是分层查询的,并非一步到位!!!因此,如果有些域名不在国内,就可能需要到国外查询其IP地址了。

二、DNS系统的查询方式

2.1 递归与迭代的比较

递归和迭代是编程中常见的两种解决问题的方法,它们在实现上有一些显著的区别。

  1. 实现方式:

    • 递归是通过函数调用自身来解决问题的方法,最终的结果是由函数自身返回的。
    • 迭代是通过循环结构重复执行一组操作来解决问题的方法。
  2. 解决问题的思路:

    • 递归采用"自上而下"的思路,将问题分解成更小的子问题,并通过递归调用自身来解决子问题。
    • 迭代采用"自下而上"的思路,通过不断迭代和更新状态,逐步推进解决问题的过程。
  3. 代码结构和复杂性:

    • 递归代码通常较为简洁和直观,易于理解。但递归函数可能涉及多次函数调用,可能导致额外的堆栈内存开销
    • 迭代代码通常需要更多的变量和状态跟踪,可能会显得繁琐。但迭代通常比递归更高效,并能更好地控制内存使用。
  4. 空间复杂度:

    • 递归因为调用自身的过程会产生函数调用栈,可能导致内存消耗较大,存在堆栈溢出的风险。
    • 迭代通常使用循环结构,不涉及函数调用栈,空间复杂度较低。
  5. 效率:

    • 在某些情况下,递归可能效率较低。因为递归会产生函数调用的开销和重复计算子问题的开销。
    • 迭代通常可以采用递推或循环不变式,避免了重复计算和函数调用的开销,因此在某些情况下更高效。

        在选择递归还是迭代时,需要根据具体的问题和实际情况进行权衡。递归通常在问题分解、树结构和回溯等情况下更加直观和简洁。而迭代通常在循环、迭代次数已知的情况下更适合使用。

需要注意的是,在某些情况下,递归和迭代可以结合使用,使用迭代实现递归的效果,称为迭代式递归。这可以帮助避免递归的缺点,提高代码的效率和可读性。

2.2 DNS递归查询

DNS递归查询是指在DNS系统中进行域名解析时,在用户终端设备向本地递归域名服务器发送查询请求后,递归域名服务器将负责迭代地查询其他域名服务器,直到找到所查询域名的准确解析结果,并将结果返回给用户终端设备。

下面是DNS递归查询的一般过程:

  1. 用户终端设备发送DNS查询请求到本地递归域名服务器。
  2. 本地递归域名服务器接收到查询请求后,检查是否有该域名的缓存记录。如果有,则直接返回缓存的解析结果给用户终端设备。
  3. 如果本地递归域名服务器没有缓存记录或缓存已过期,它将向根域名服务器发送查询请求,询问顶级域名服务器的IP地址。
  4. 本地递归域名服务器收到根域名服务器的回复后,从中获取顶级域名服务器的IP地址,并向顶级域名服务器发送查询请求。
  5. 顶级域名服务器收到查询请求后,会返回该域名的权威域名服务器的IP地址给本地递归域名服务器。
  6. 本地递归域名服务器再次向权威域名服务器发送查询请求,并收到解析结果。
  7. 本地递归域名服务器将解析结果返回给用户终端设备,并将解析结果缓存起来,以备后续查询使用。

通过递归查询,DNS系统能够解析出域名的IP地址或其他相关记录,使得用户能够访问相应的网络资源。递归查询过程中,递归域名服务器扮演着重要的角色,它负责向其他域名服务器进行迭代查询,并将最终的解析结果返回给用户。

2.3 DNS迭代查询

DNS迭代查询是指在DNS系统中进行域名解析时,在用户终端设备向本地递归域名服务器发送查询请求后,本地递归域名服务器将负责迭代地查询其他域名服务器,直到找到所查询域名的准确解析结果。

下面是DNS迭代查询的一般过程:

  1. 用户终端设备发送DNS查询请求到本地递归域名服务器。
  2. 本地递归域名服务器接收到查询请求后,检查是否有该域名的缓存记录。如果有,则直接返回缓存的解析结果给用户终端设备。
  3. 如果本地递归域名服务器没有缓存记录或缓存已过期,它将向根域名服务器发送查询请求,询问顶级域名服务器的IP地址。
  4. 根域名服务器收到查询请求后,会返回本地递归域名服务器一个权威域名服务器的地址。
  5. 本地递归域名服务器向权威域名服务器发送查询请求,并收到解析结果。如果权威域名服务器没有该域名的解析结果,它可能会提供一个更低级别的域名服务器的地址,以便本地递归域名服务器继续迭代查询。
  6. 本地递归域名服务器按照所提供的低一级别域名服务器的地址,向该域名服务器发送查询请求,并迭代地进行查询,直到找到所需的解析结果。
  7. 本地递归域名服务器将最终的解析结果返回给用户终端设备,并将解析结果缓存起来,以备后续查询使用。

通过迭代查询,DNS系统能够解析出域名的IP地址或其他相关记录,使得用户能够访问相应的网络资源。迭代查询过程中,本地递归域名服务器充当了重要的角色,它负责依次向各级域名服务器发送查询请求,直到得到最终的解析结果。

答案:A

本地域名服务器:递归查询

根域名服务器:迭代查询

中介域名服务器:递归查询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年中国商业版服务器操作系统市场发展规模分析:未来将保持稳定增长[图]

服务器操作系统一般指的是安装在大型计算机上的操作系统,比如Web服务器、应用服务器和数据库服务器等,是企业IT系统的基础架构平台,也是按应用领域划分的三类操作系统之一。同时服务器操作系统也可以安装在个人电脑上。 服务器操作系统分类 …

WSL Ubuntu 22.04.2 LTS 安装paddlepaddle-gpu==2.5.1踩坑日记

环境是wsl的conda环境。 使用conda安装paddlepaddle-gpu: conda install paddlepaddle-gpu2.5.1 cudatoolkit11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 等待安装... 报错处理: (1)PreconditionNotMetError: Cannot lo…

excel管理接口测试用例

闲话休扯,上需求:自动读取、执行excel里面的接口测试用例,测试完成后,返回错误结果并发送邮件通知。 分析: 1、设计excel表格 2、读取excel表格 3、拼接url,发送请求 4、汇总错误结果、发送邮件 开始实现…

Hive剔除某时间段进行时间点判断

业务中,遇到这样一个需求:需要判断在前一个节点业务操作后(取前一节点的操作时间),判断后一节点操作是否在3个小时内完成,其中晚上17:00到第二天早上8:00不纳入计算范围。 思路:首先判断前一节点…

LeetCode24.两两交换链表中的节点

这道题还是比较简单,我看完题目的想法就是借助一个第三变量,来改变两个节点的指针的指向,比如我要改变1和2节点的指向,我用h1表示节点1,我创建一个新的节点ans,先拿ans指向节点2(ans.next h1.n…

【面试高频题】难度 1/5,经典树的搜索(多语言)

题目描述 这是 LeetCode 上的 「109. 有序链表转换二叉搜索树」 ,难度为 「中等」 Tag : 「二叉树」、「树的搜索」、「分治」、「中序遍历」 给定一个单链表的头节点 head,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。 本题中&…

架构真题(五十四)

1、软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式,其中,在批量处理风格体系中,每个处理步骤都是单独程序,每一步必需在前一步结束才能开始,并且数据必需是完整性,以(整体&am…

软件工程与计算(十四)详细设计中面向对象方法下的模块化

一.面向对象中的模块 1.类 模块化是消除软件复杂度的一个重要方法,每个代码片段相互独立,这样能够提高可维护性。在面向对象方法中,代码片段最重要的类,整个类的所有代码联合起来构成独立的代码片段。 模块化希望代码片段由两部…

CSS的布局 Day03

一、显示模式: 网页中HTML的标签多种多样,具有不同的特征。而我们学习盒子模型、使用定位和弹性布局把内容分块,利用CSS布局使内容脱离文本流,使用定位或弹性布局让每块内容摆放在想摆放的位置,让网站页面布局更合理、…

探索服务器潜能:创意项目、在线社区与其他应用

目录 一、部署自己的创意项目 优势: 劣势: 结论: 二、打造一款全新的在线社区 优势: 劣势: 结论: 三、其他用途 总结: 随着互联网的发展,越来越多的人开始拥有自己的服务器…

Android ViewBinding和DataBinding功能作用区别

简述 ViewBinding和DataBinding都是用于在 Android 应用程序中处理视图的工具,但它们有不同的作用和用途。 ViewBinding: ViewBinding 是 Android Studio 的一个工具,用于生成一个绑定类,能够轻松访问 XML 布局文件中的视图。ViewBinding 为…

服务器内存总量和内存条有差异是什么问题 103.239.244.X

服务器内存总量和内存条上标注的容量可能会存在一些差异,这是由于以下几个原因: 部分内存被保留给系统和其他硬件设备:在服务器中,一部分内存可能被保留给系统和其他硬件设备,比如显卡、网卡、RAID卡等。这些设备需要一…

ubuntu16.04安装vscode遇到的code 依赖于 libnss3 (>= 2:3.30)解决

ubuntu16.04安装vscode遇到的code 依赖于 libnss3 (> 2:3.30);然而:系统中 libnss3:amd64 的版本为 2:3.28.4-0ubuntu0.16.04.14解决方法 一开始下载了最新版本的vscode,安装时出现了上面的错误状况,最新版本的依赖库版本过低的…

Idea怎么配置Maven才能优先从本地仓库获取依赖

网上的方法 : 在设置中搜索 Runner ,在VM Option中设置参数 -DarchetypeCataloginternal删除 解压后的依赖包中的 _remote.repositories m2e-lastUpdated.properties *.lastUpdated 文件。 上边都没有效果 最终的解决方法,修改maven配置文件settings.xml 主要两个…

mysql数据物理迁移

文章目录 一、mysql数据物理迁移1.1 物理迁移 一、mysql数据物理迁移 1.1 物理迁移 速度快,需要停机 进入数据库,查看数据存放位置: select datadir; 一般默认存放在/var/lib/mysql 停机数据库,防止有写入数据 systemctl stop …

LeetCode讲解篇之198. 打家劫舍

LeetCode讲解篇之198. 打家劫舍 文章目录 LeetCode讲解篇之198. 打家劫舍题目描述题解思路题解代码 题目描述 题解思路 该问题可以通过递推来完成 递推公式: 前n间房的最大金额 max(前n-1间房的最大金额, 前n-2间房的最大金额第n-1间房的最…

MySQL学习(四)——事务与存储引擎

文章目录 1. 事务1.1 概念1.2 事务操作1.2.1 未设置事务1.2.2 控制事务 1.3 事务四大特性1.4 并发事务问题1.5 事务隔离级别 2. 存储引擎2.1 MySQL体系结构2.2 存储引擎2.3 存储引擎的特点2.3.1 InnoDB2.3.2 MyISAM2.3.3 Memory2.3.4 区别和比较 1. 事务 1.1 概念 事务 是一组…

深度分析c+引用的本质以及引用与指针的区别

文章目录 引用的概念引用的定义引用的特性引用的权限问题引用的使用方式引用作参数引用作返回值指针的本质引用和指针的区别 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用…

C语言——二周目——数据在内存中的存储

目录 一、整数的存储方式 二、浮点数的存储方式 一、整数的存储方式 因为CPU只有加法器,所以对于整型来说,数据在内存中通常采用补码的方式进行储存。 在这里复习一下原码、反码、补码。 正数和无符号数的原码、反码、补码相同; 负数的原…

depcheck检查项目依赖的安装情况-帮你解决各种项目运行灵异事件

depcheck检查项目缺失的依赖 depcheck介绍与安装介绍安装 depcheck使用基础使用注意 进阶使用 删除多余的依赖注意 depcheck介绍与安装 介绍 工作中,以下的场景恐怕大家都有经历过: 从代码仓库上面 clone 的项目,自己本地一运行就报错… 用…