网络是怎样连接的--DNS服务器查询原理

news2025/3/1 21:49:12

文章目录

  • 3.1 DNS服务器基本工作
  • 3.2 寻找相应的DNS服务器并获取ip地址
  • 3.3 通过缓存加快DNS服务器的响应

3.1 DNS服务器基本工作

DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。

其中,来自客户端的查询消息包含以下3种信息:

  • 域名 : 服务器、邮件服务器(邮件地址中@后面的部分)的名称;
  • Class:在最早设计DNS方案时,DNS在互联网以外的其他网络中的应用也被考虑到了,而Class就是用来识别网络的信息。不过,如今除了互联网并没有其他的网络了,因此Class的值永远是代表互联网的IN;
  • 记录类型:表示域名对应何种类型的记录。例如,当类型为A时,表示域名对应的是IP地址;当类型为MX时,表示域名对应的是邮件服务器,而记录类型不止这两种,还比如代表域名属性的SOA,别名的CNAME等;

DNS服务器上事先保存有前面这3种信息对应的记录数据,然后根据这些记录便可以对客户端(DNS解析器)做出响应

在这里插入图片描述

例如,如果要查询www.lab.glasscom.com这个域名对应的IP地址,客户端就会向DNS服务器发送查询消息: 域名=www.lab.glasscom.com,Class = IN,记录类型=A,DNS根据这些信息,就能从图中第一行找到,然后返回IP地址192.0.2.226

如果我们要查询邮件服务器(例如tone@glasscom.com)时则要使用MX类型,客户端就会向DNS服务器发送查询消息:域名=glasscom.com,Class = IN,记录类型=MX,根据这些信息,就能从图中第二行找到,然后返回优先级和其域名;而我们还可以根据其返回的邮件服务器域名查找到其IP地址,例如第三行

因此DNS的基本工作就是

DNS服务器的基本工作就是根据需要查询的域名和记录类型查找相关的记录,并向客户端返回响应消息;

#3.2 域名和DNS的层次结构

上面的讲解中,我们是假设要查询的信息已经保存在DNS服务器(适用于内部网络web等服务器数量有限环境)。然而,互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台DNS服务器中是不可能的,因此一定会出现在DNS服务器中找不到要查询的信息的情况。

那怎么解决这种情形呢

将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而查找出要查询的信息,至于怎么查询稍后再说,先看下信息是怎么在DNS上注册的

首先,DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。层次结构类似于公司中的事业集团、部门、科室这样的结构,能够帮助我们更好地管理大量的信息。DNS中的域名都是用句点来分隔的,在域名中,越靠右的位置表示其层级越高,比如www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是“com事业集团,glasscom部,lab科的www”。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。

其中一个域是作为一个整体存储在DNS服务器上面,且不可拆分分别存储在不同的DNS服务器;因此,按照这种方式DNS服务器也就具有了层次结构,每个域的信息都存放在相应层级的DNS服务器

如果我们想给某团体的子团体配备一台DNS服务器,可以在域的下面创建下级域,然后再将它们分别分配给各个子团体,比如,假设公司的域为example.co.jp,我们可以在这个域的下面创建两个子域,即sub1. example.co.jp和sub2.example.co.jp;通过实际的域名可能更容易理解,比如www.nikkeibp.co.jp这个域名,最上层的jp代表分配给日本这个国家的域;下一层的co是日本国内进行分类的域,代表公司;再下层的nikkeibp就是分配给某个公司的域;最下层的www就是服务器的名称

3.2 寻找相应的DNS服务器并获取ip地址

知道了域名和DNS的层次结构以后,我们就可以提前在上层域的DNS中注册下层域的DNS的IP地址;例如负责管理lab.glasscom.com这个域的DNS服务器的IP地址需要注册到glasscom.com域的DNS服务器中,而glasscom.com域的DNS服务器的IP地址又需要注册到com域的DNS服务器中这样我们就可以通过上级DNS服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求了;

这里有个注意点,com,jp这些域并不是最高级的,在此之上还有个最高域,我们称为根域;它一般是域名末尾最后一个点,只是为了方便书写省略了它,比如百度的真实域名应该是www.baidu.com.,最后会有一个句号.;根域的DNS服务器中保管着com、jp等的DNS服务器的信息。由于上级DNS服务器保管着所有下级DNS服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的DNS服务器。

因此为了能够准确查找到信息,我们需要给每一个DNS服务器中都配置上根域的DNS服务器信息(根域服务器仅仅只有13个IP地址),这样客户端就能通过任意一台DNS服务器找到根域,然后顺藤摸瓜找到所要查询的域名IP;

在这里插入图片描述

假设我们要查询www.lab.glasscom.com这台Web服务器的相关信息,由于最近的DNS没有注册该域名信息,就转问根域,然后根域根据层次结构回复去找com域服务器,同样道理,com回复去找glasscom域服务器,依次往下走,然后就能在lab域服务器找到www.lab.glasscom.com的IP地址,然后最近DNS就把该地址返回个客户端计算机,客户端计算机再通过该IP去找Web服务器查看相关信息(上图);

现在我们把上一章中的浏览器向DNS解析器要IP的过程和DNS服务器中查询IP过程结合起来,图内容如下:

在这里插入图片描述

3.3 通过缓存加快DNS服务器的响应

有时候DNS服务器并不需要从最上级的根域开始查找,因为DNS服务器有一个缓存功能,可以记住之前查询过的域名(比如上面查找的www.lab.glasscom.com的IP地址,下次在查找就不用去根域服务器了)。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。

相比每次都从根域找起来说,缓存可以减少查询所需的时间。并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变(比如百度域名是www.baidu.com,但一段时间后它更名为黑度www.heidu.com了呢,那么原先被缓存的这个域名就会失效),这时缓存中的信息就有可能是不正确的。因此,DNS服务器中保存的信息都设置有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的DNS服务器。

==========================上一章=============================

==========================下一章=============================

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

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

相关文章

Java 面试题 —— 简单工厂、工厂方法、抽象工厂的区别

Java 面试题 —— 简单工厂、工厂方法、抽象工厂的区别 1、简单工厂模式 ​ 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。 ​ 在简单工厂…

常见仿射变换矩阵

旋转(Rotation) def _get_rotation_matrix(rotate_degrees):radian math.radians(rotate_degrees)rotation_matrix np.array([[np.cos(radian), -np.sin(radian), 0.],[np.sin(radian), np.cos(radian), 0.], [0., 0., 1.]],dtypenp.float32)return r…

C# 学习之路(C# 的概念)

C# 学习之路(C# 的概念) - 什么是 C# C# 的发音是 “C sharp”,不是念作 “C 井”(虽然,我在没有接触之前是念“C 井”🤣)。C# 的第一个版本是 2002年发布的 C# 1.0,但到如今&#x…

Redis——》内存淘汰策略

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》内存淘汰策略一、内存淘汰策略二、设置缓存大小三、设置过期时间…

前端常见面试题

前端常见面试题大全前端本地存储的方式有哪些?JS 的参数是以什么方式进行传递的?js中的垃圾回收?作用域链?什么是闭包?原型 与 原型链js的继承判断一个数据是否为数组? > 数组的方法数组去重?this指向问题?Promise是什么? 构造函数 异步代码的容器手写promo深拷贝 …

AQS源码解析 2.简介 内部核心结构

AQS源码解析—简介 & 内部核心结构 AQS内部结构 简介 AbstractQueuedSynchronizer:AQS,抽象队列同步器。主要是为了解决线程锁竞争的问题。 AQS 原理图如下,其本质是一个双向链表/队列 多线程抢锁内部数据结构,如下 核…

m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 蜂窝网络不仅需要能够为用户提供高质量的语音服务,而且要能够提供大量的数据传输服务,这就决定了蜂窝网络的发展必须要进一步提高系统容量和高速数据速率覆盖&…

银行人总结5个影响系统性能的因素,怕是很多人都会忽略

性能测试往往在投产上线前开展,无法对整个系统变更进行全面的覆盖测试,因此性能测试需求提出十分关键。 性能测试需求交付过程中,需要对开发团队提出的测试需求进行审查,重点分析交付的测试需求是否充分覆盖了影响系统性能的因素…

Cisco Packet Tracer HSRP技术练习

公司拓扑图 交换机配置参数表,如表2-3-4所示。 表2-3-4 交换机配置参数表 交换机 vlan IP地址 hsrp组 虚拟网关地址 核心1 Vlan 10 172.16.10.252/24 10 172.16.10.254/24 Vlan20 172.16.20.252/24 20 172.16.20.254/24 核心2 Vlan 10 172.16.10.…

基于springboot+vue的高校迎新系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

Android App开发实战项目之仿手机QQ动感影集动画播放(附源码和演示视频 可直接使用)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 动感影集就是只要用户添加一张图片,动感影集就能给每张图片渲染不同的动画效果,让原本静止的图片变得活泼起来,辅以各种精致的动画特效,营造一种赏心悦目的感觉。 一、需求描述 …

Cadence Allegro PCB设计88问解析(十八) 之 Allegro中差分规则设置

一个学习信号完整性仿真的layout工程师 我们在进行layout设计时,进行会遇到差分信号的layout,像USB和HDMI等,是需要控制阻抗的,那么我们在走线的时候,也需要从电器规则和物理规则上设置差分要求,今天和大家…

K8S kube-scheduler-master CreateContainerError 问题解决及思路

错误信息1: kubectl get pods 发现pod状态一直在 runing-error-CrashLoopBackOff -循环 解决方法:1,查看日志。 kubectl logs pods web-674477549d-zx8gmkubectl describe pods web-674477549d-zx8gm 没有发现错误,并且服务器资源…

2023年MBA/MPA/MEM联考笔试答题抓分点

距离今年的管理类联考还有一个月左右的时间,在最后这个阶段,除了继续稳固的提升自身应试的基本能力之外,一些细节和技巧也要特别关注和留意,说不定可以在考场上帮自己更好的抓分。今天杭州达立易考教育为大家整理主观题答题的五个…

链表OJ题+牛客题

目录 206.反转链表 876.链表的中间节点 链表中倒数第k个节点 CM11链表分割 OR36 链表的回文 206.反转链表 给你单链表的头节点head,请你反转链表,并返回反转后的链表。 实现如下结果: 思路: 取链表中的节点头插: 代码&#…

操作系统的奋斗(二)

第二章 进程与线程2.1进程与线程2.1.1进程的概念、特征、状态与转换2.1.2进程的组织、控制、通信2.1.3进程和多线程模型2.2处理机调度2.2.1调度的概念、目标、实现2.2.2典型的调度算法2.2.3进程切换2.3同步与互斥2.3.1同步与互斥的基本概念2.3.2实现临界区互斥的基本办法2.3.3互…

IPv6与VoIP——配置Cisco CME实现VoIP实验

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.配置Cisco CME实现VoIP 1.实验环境 2.需要设备 Cisco P Co…

解决TypeError: type complex doesn‘t define __round__ method

在调整学习率的时候遇到的一个bug,现已解决。 首先看这个bug说的是:类型complex(复数:ij)类型不能使用round函数。 为啥不能使用呢: round函数是四舍五入,round(lr,10)就是取lr四舍五入后十位。而复数不能…

分享一套宾馆客房管理系统源码,功能完善,代码完整

淘源码:国内专业的免费源码下载平台 需要源码学习可私信 基本介绍: 本宾馆管理系统是一套成熟的客房管理软件,综合了国内多家同行业软件的优点。具有操作简单、功能全面。 适用于酒店、宾馆、招待所等提供住宿服务的企业。 功能简介: 包括入…

文献学习02_A Survey on Deep Learning for Named Entity Recognition_20221121

论文信息 Subjects: Computation and Language (cs.CL) (1)题目:A Survey on Deep Learning for Named Entity Recognition (命名实体识别的深度学习研究综述) (2)文章下载地址:ht…