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

news2024/11/19 14:47:07

目录

一、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.coloradmin.cn/o/1099182.html

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

相关文章

nRF52832蓝牙从机

具体内容直接参考《nRF52832开发指南》 本文仅对关键内容和容易搞错的内容进行描述。 广播事件 扫描事件 连接事件 从机框架 日志配置和初始化log_init,具体参考手册和示例程序;APP定时器初始化timers_init,具体参考手册和示例程序&…

EFLK与logstash过滤

目录 一、Filebeat工作原理: 二、为什么要使用Filebeat: 三、Filebeat和Logstash的区别: 四、logstash 的过滤插件: 五、FilebeatELK 部署: 1. 安装filebeat: 2. 设置 filebeat 的主配置文件&#xff1…

SpringBoot面试题7:SpringBoot支持什么前端模板?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot支持什么前端模板? Spring Boot支持多种前端模板,其中包括以下几种常用的: Thymeleaf:Thymeleaf是一种服务器端Java模板引擎,能够…

【2】c++11新特性(稳定性和兼容性)—>超长整型 long long

c11标准要求long long整型可以在不同的平台上有不同的长度,但是至少64位,long long整型有两种: 有符号long long:–对应类型的数值可以使用LL或者ll后缀 long long num1 123456789LL; long long num2 123456789ll;无符号unsign…

Linux性能优化--实用工具:性能工具助手

8.0 概述 本章介绍一些在Linux系统上可用的实用程序,它们能够加强性能工具的有效性和可用性。实用工具本身不是性能工具,但是当它们与性能工具一起使用时,它们可以帮助完成如下功能:自动执行繁琐的任务、分析性能统计数据&#x…

【机器学习】逻辑回归

文章目录 逻辑回归定义损失函数正则化 sklearn里面的逻辑回归 逻辑回归 逻辑回归,是一种名为“回归”的线性分类器,其本质是由线性回归变化而来的,一种广泛使用于分类问题中的广义回归算法。 线性回归是机器学习中最简单的的回归算法&#…

基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)

1.分段 1.进程的地址空间: 按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名 (在低级语言中,程序员使用段名来编程),每段从0开始编址. 2.内存分配规则: 以段为单位进行分配,每个段在内存中占据…

BIM轻量化技术简介

BIM轻量化技术是指在工程建筑的BIM模型建立之后(利用专业的BIM建模软件,比如Autodesk Revit, Bentley MicroStation, DS Catia等),通过对BIM模型的压缩处理等技术手段,让BIM可以在各类WEB浏览器、移动App上被使用的技术…

【网络协议】聊聊DHCP和PXE 工作原理

DHCP 动态主机配置协议 对于每个主机来说,只要连接了网络,那么就会配置一个IP地址,那么这个IP地址,如果是手动配置的话,对于公司内部的人员来说都要找IT进行配置,这个太浪费人力物力了,所以解决…

【软件设计师】面向对象类图的六种关系

面向对象类图的六种关系(继承、实现、依赖、关联、聚合、组合) 1、泛化(继承)2、实现3、依赖4、关联5、聚合6、组合 面向对象类图的六种关系(继承、实现、依赖、关联、聚合、组合) 进行面向对象设计时&…

为什么要做服务器监控?

应用程序一般都是在服务器上运行,可以这么说,服务器就是一家公司的全部,因此,服务器必须要监控,来确保性能和正常运行。 如果服务器宕机,那会导致很多问题,会给公司带来巨大的损失,…

[论文精读]Semi-Supervised Classification with Graph Convolutional Networks

论文原文:[1609.02907] Semi-Supervised Classification with Graph Convolutional Networks (arxiv.org) 论文代码:GitHub - tkipf/gcn: Implementation of Graph Convolutional Networks in TensorFlow 英文是纯手打的!论文原文的summari…

小黑子—MyBatis:第五章

MyBatis入门5.0 十三 小黑子的MyBatis高级映射及延迟加载13.1 多对一映射13.1.1 实体类关系怎么设计13.1.2 第一种方式:级联属性映射13.1.2 第二种方式 association 关联13.1.3 第三种方式 分步查询13.1.3 延迟加载 13.2 一对多映射13.2.1 一对多的映射原理13.2.2 第…

lv8 嵌入式开发-网络编程开发 18 广播与组播的实现

目录 1 广播 1.1 什么是广播? 1.2 广播地址 1.3 广播的实现 2 组播 2.1 分类的IP地址 2.2 多播 IP 地址 2.3 组播的实现 1 广播 1.1 什么是广播? 数据包发送方式只有一个接受方,称为单播 如果同时发给局域网中的所有主机&#xff0…

Python浏览器自动化

如果你正在进行手机爬虫的工作,并且希望通过模拟浏览器行为来抓取数据,那么Pyppeteer将会是你的理想选择。Pyppeteer是一个强大的Python库,它可以让你控制浏览器进行自动化操作,如点击按钮、填写表单等,从而实现数据的…

以数智化指标管理,驱动光伏能源行业的市场推进

近年来,碳中和、碳达峰等降低碳排放、提升环境健康度的政策和技术改进正在不断地被社会所认可和引起重视,也被越来越多的企业在生产运营和基础建设中列为重要目标之一。而光伏能源行业作为全球绿色能源、新能源的优秀解决方案,充分利用太阳能…

Linux小程序---进度条

一&#xff1a;\r 和 \n \r --- 回车 --- 使光标回到这一行的开头 \n --- 换行 --- 会来到下一行与之平行的位置 缓冲区的问题&#xff1a; <1>: \n 的示例 正常输出 hehehehe 。 <2>: \r 的示例 为了方便观察&#xff0c;加入一个 sleep &#xff08;休眠函数…

[GSEP202306 一级] C++ 时间规划

题目描述 小明在为自己规划学习时间。现在他想知道两个时刻之间有多少分钟&#xff0c;你通过编程帮他做到吗? 输入格式 输入4行&#xff0c;第一行为开始时刻的小时&#xff0c;第二行为开始时刻的分钟&#xff0c;第三行为结束时刻的小时&#xff0c;第四行为结束时刻的分…

新能源电池试验中准确模拟高空环境大气压力的解决方案

摘要&#xff1a;针对目前新能源电池热失控和特性研究以及生产中缺乏变环境压力准确模拟装置、错误控制方法造成环境压力控制极不稳定以及氢燃料电池中氢气所带来的易燃易爆问题&#xff0c;本文提出了相应的解决方案。方案的关键一是采用了低漏率电控针阀作为下游控制调节阀实…

MySQL锁学习笔记

锁 事务的隔离性由锁来实现。 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等&#xff09;&#xff0c;我…