计算机网络第2章-DNS(3)

news2025/4/7 23:20:53

DNS:因特网的目录服务

在因特网上,主机和人类都一样,可以用很多种方式进行标识,主机的一种标识方法是它的主机名。

但是主机名一般是用IP来表示,IP是由四个字节组成,并且有严格的层次结构,不利于人类的记忆,为此一种新式的、允许人类以喜欢的方式、创建标识的方式诞生,域名和DNS。

DNS提供的服务

DNS是:

1.一个由分层的DNS服务器实现的分布式数据库。

2.一个使得主机能够查询分布式数据库的应用层协议。

DNS协议运行在UDP之上,使用53号端口。

DNS通常是由其它应用层协议所使用的,包括HTTP、SMTP、FTP等,将用户提供的主机名解析为IP地址。

DNS的其它服务

主机别名

有着复杂的主机名的主机能拥有一个或者多个别名。

例如:

一台名为relay1.west-coast.enterprise.com的主机,可能还有两个别名为enterpraise.comwww.enterprise.com两个别名。

在这种情况下,relay1.west-coast.enterprise.com称为规范主机名。

主机别名比规范主机名更容易记忆,应用程序可以调用DNS来获得主机别名对应的规范主机名以及对应的主机IP地址。

邮件服务器别名

显而易见,人们也希望电子邮件地址也好记忆。

为此电子邮件应用程序也可以调用DNS来对主机名别名进行解析。

例如xxx.@163.com中的163.com就是一个别名。

负载分配

DNS也用在亢余的服务器(如亢余的Web服务器等)之间进行负载分配。

繁忙的站带你被亢余分配在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的IP地址。

由于这些亢余的Web服务器,一个IP地址集合因此与一个规范主机名相联系。

DNS数据库中存储着这些IP地址集合。

当客户映射到某地址集合的名字发出一个DNS请求时,该服务器用整个IP地址集合进行相应,并且对该集合进行遍历循环。

DNS工作机理概述

分布式、层次数据库DNS数据库

为了处理扩展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内。

没有一台DNS服务器拥有因特网上所有主机的映射,相反,这些映射分布在所有的DNS服务器上。

大致来说,共有三种类型的DNS服务器:

根DNS服务器、顶级域DNS服务器(Top-Level Domain/TLD)和权威DNS服务器。

三种服务器的结构如下所示。

现在我们假定有一个DNS客户要决定主机名www.amazon.com的IP地址,它的经过路径如下:

客户首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。

客户则与这些TLD服务器之一联系,它将返回amazon.com权威服务器的IP地址。

最后客户与amazon.com的全威威服务器之一联系,它为主机名www.amazon.com返回IP地址。

根DNS服务器

有400多个根服务器遍及全世界。

根服务器中提供TLD服务器的IP地址。

顶级域服务器(TLD)服务器

对于每个顶级域(com、org、net、edu、gov)和所有国家的顶级域(uk、fr)等等,都有TLD服务器。

权威DNS服务器

在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。

本地DNS服务器

一般来说,每个ISP都有一台本地DNS服务器(也叫默认名字服务器)

当主机与某个ISP连接时,该ISP提供一台主机的IP地址,该主机具有一台或多台本地DNS服务器的IP地址。

下图是一个简单的本地DNS作用图。

现在是一个简单的例子。

假设主机cse.nyu.edu现在查询主机gaia.cs.umass.edu的IP地址。

则cse,nyu.edu先向本地DNS服务器dns.nyu.edu发送一个DNS查询报文。

随后本地DNS服务器将该报文转发到根DNS服务器,该根DNS服务器注意到其edu前缀并向本地DNS服务器返回负责edu的TLD的IP地址列表。

该本地DNS服务器则再次向这些TLD服务器之一发送查询报文,该TLD服务器注意到umass.edu前缀并用权威DNS服务器IP地址(dns.umass.edu)进行响应。

最后,本地DNS服务器向dns.umass.edu权威服务器发送查询报文,dns.umass.edu用gaia.umass.edu的IP地址返回,最后经由本地DNS服务器返回给请求主机cse.nyu.edu。

在该例子中,一共发送了四份查询报文,四份回答报文,共计八份报文。

递归查询和迭代查询

上面例子中(图2.18)同时利用了递归查询和迭代查询。

从cse.nyu.edu到dns.nyu.edu发出的查询是递归查询。

后继的3个查询都是迭代查询。

下面的图是一条全部为递归查询的查询链,但是实际应用并不是这种方式,而是上面所讲的递归查询和跌打查询一起使用。

DNS缓存

DNS缓存是为了改善时延并减少在因特网上到处传播DNS报文数量而诞生的。

在一个请求链中,当某DNS服务器接受一个DNS回答后,会保存该回答的记录并且缓存在本地存储器中。

例如,在上面的例子中,本地DNS服务器dns.nyu.edu接收到一个DNS服务器的回答后,后面另一个对相同主机查询到达该DNS服务器后,本地DNS就可以直接返回对应的IP地址,而不再需要查询其它DNS服务器。

值得注意的是,缓存并不是永久的,DNS服务器在一段时间后就会丢弃缓存的信息。

DNS记录和报文

DNS记录

共同实现DNS分布式数据库的所有DNS服务器都存储了资源记录(Resource Record/RR)

RR提供了主机名到IP地址的映射。

一个DNS回答报文一般包含了多个RR。

资源记录是一个包含了下列字段的4元组

TTL是该记录的生存时间,它决定了资源记录应当在缓存中删除的时间。

其中,Name和Value的值取决于Type。

若Type = A。

则Name是主机名,Value是该主机名对应的IP地址,例如(relay1.bar.foo.com,145.37.93.126,A)就是一条A记录。

若Type  = NS。

则Name是一个域(如foo.com),而Value是个知道如何获得该域中IP地址的权威DNS服务器的主机名,(foo.com,dns.foo.com,NS)就是一个NS记录。

若Type = CNAME。

则Value是别名为Name的主机对应的规范主机名,(foo.com,relay1.bar.foo.com,CNAME)就是一个CNAME记录。

如果Type = MX。

则Value是一个别名为Name的邮件服务器的规范主机名,(foo.com,mail.bar.foo.com,MX)就是一条MX记录。值得注意的是,为了获得邮件服务器的规范主机名,DNS客户应当请求一条MX记录,而为了获得其它服务器的规范主机名,DNS客户应当请求CNAME记录。

DNS报文

DNS只有查询报文和回答报文。

查询报文和回答报文是一样的格式。

前12个字节是首部区域:

其中,标识符是一个16bit的数,用于标识唯一的一组报文(查询/回答)。

标志中有着若干标志,例如是“查询/回答”中的什么,查询的是权威NDS服务器还是TLD服务器等等。

剩下的四个数量字段(问题数、回答RR数、权威RR数、附加RR数)指出了在首部后的四类数据区域出现的数量。

问题区域包含着正在查询的信息,包含:

1.名字字段,正在被查询的主机名字。

2.类型字段,指出有关该名字正在被查询的问题类型,是A还是MX等等。

回答区域包含了对最初请求的名字的资源记录:

(A、NS、CNAME、MX)等等都在这里。在回答报文的回答区域中可以有很多条RR,因为一个主机名可以有很多个IP地址。(例如亢余Web服务器)

权威区域包含了其它权威服务器的记录。

附加区域包含了其它有帮助的记录:

例如对于一个MX回答,可能该附加区域包含了一个关于MX回答中Value规范主机名的IP地址的A记录。

更多可以使用nslookup程序来直接发送查询DNS报文。

在DNS中插入记录

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

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

相关文章

不止硬件,苹果的软件也是频出问题!iOS 17.0.3使iPhone在一夜之间随机开关机

就在我们以为iPhone的问题已经解决了一段时间的时候,一个新的问题似乎突然出现了。在Reddit和其他网站上,人们报告说,他们的iPhone在一夜之间莫名其妙地断电,有时会导致错过警报。 目前尚不清楚是什么原因导致了这个问题&#xf…

python利用多线程让http请求异步返回

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 有时我们可能会碰到这样一种情况: 我们有一个功能,这个功能对外提供了一个http接口, 我们需要对这个http接口发起请求才能启…

Liunx中日志分析与网络设置(极其粗糙版)

liunx系统日志的管理 系统日志:操作系统本身和大部分服务器程序的日志文件 日志是记录系统所产生的各种事故,在某个时间节点发生了什么,发生的原因 liunx的路径是/var/log下 /var/log/messages:内核日志还有公共信息日志(所有…

冒泡排序(学习笔记)

冒泡排序(基于交换的排序,每一轮确定一个数的位置) 哨兵举例: 待排序序列:6 3 1 2 5 第一轮排列: 3 6 1 2 5 3 1 6 2 5 3 1 2 6 5 3 1 2 5 6(最大的数移动到了正确的位置) 第二轮排列…

Mall脚手架总结(五) —— SpringBoot整合MinIO实现文件管理

前言 在项目中我们经常有资源的上传和下载的功能需求,比如用户头像、产品图片、配置文件等等,大数据量的文件存储无疑需要更高性能的数据存储服务,对于无需对结构实现复杂查询的文件对象来说,对象存储服务无疑是一个较好的选择&am…

并查集路径压缩

我们来看看如果要是100个数,往20个数的集合合并如何 那么我们应该,把数据量小的集合往数据量大的合并 解决另一种极端场景的路径压缩

限制条件加入构造范围:Gym - 102832L

https://vjudge.net/contest/587311#problem/D 场上列方程求首项,假设是全部加1,然后一部分(后缀)减去 k 1 k1 k1,就用到了以下两个条件: 但在这两种情况符合情况下,这个条件不一定满足 然后…

【软件测试】 初识软件测试

文章目录 🌴什么是软件测试🎋软件测试和开发的区别🚩软件测试与调试的区别 🌳软件测试的发展🎄软件测试岗位🍀软件测试在不同类型公司的定位🎍一个优秀的软件测试人员具备的素质🌲软…

105AspectRatio调整宽高比组件_flutter

AspectRatio组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比。 AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度是由宽 度和比率决定的,类似于 BoxFit 中的 contain,按照固定比率去尽量占满区域。 …

【Redis】Java Spring操作redis

目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法,分成了几个类别,分门别类的来组织的。 此处提供的一些接口风格,和原生的Re…

利达卓越:发挥金融力量,促进团队发展

随着中国经济的快速增长和金融改革的逐步深化,我国金融业取得了令人瞩目的发展。作为经济的重要支柱,我国金融业的规模和实力不断扩大,已经成为全球最大的金融市场之一。利达卓越是一支由管理精英组成的团队,专注于金融行业的投资…

Empowering Low-Light Image Enhancer through Customized Learnable Priors 论文阅读笔记

中科大、西安交大、南开大学发表在ICCV2023的论文,作者里有李重仪老师和中科大的Jie Huang(ECCV2022的FEC CVPR2022的ENC和CVPR2023的ERL的一作)喔,看来可能是和Jie Huang同一个课题组的,而且同样代码是开源的&#xf…

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法,通过对大量数据的学习和分析&…

数据结构与算法-(8)---队列(Queue)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

若依 ruoyi 路径 地址 # 井号去除

export default new Router({mode: history, // history 去掉url中的# 、hash 包含#号scrollBehavior: () > ({ y: 0 }),routes: constantRoutes })

嘉立创专业版新建元件

以2*24(2mm)排母为例 文件-新建-元件 新建器件 填上元件的基本信息,保存 选择库设计 填好参数,生成符号 给元件添加封装 需要先设计一个封装 选择header-V 填写参数,生成符号 保存即可。 再次进入元件的封装管理…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好,我是小悟 关于抖音开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以Event的值判断。 授权事件推送通知 授权事件推送包括:推送票据、授权成功、授…

java 基础 IO字符流

1.汉字存储占多少字节: public class IoTest {public static void main(String[] args) {String str "abcd";String str1 "吴危险学java";System.out.println("字符串转为byte数组:" Arrays.toString(str.getBytes())…

C# RestoreFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…