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

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.mzph.cn/news/107858.shtml

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

相关文章

Asp.net core Web Api 配置swagger中文

启动项目,如图: 原来是英文的,我们要中文的,WeatherForecastController.cs是一个示例,删除即可,WeatherForecast.cs同时删除,当然不删除也行,这里是删除,创建自己的控制器…

pytest 之 pytest.ini配置文件

前言:pytest.ini全局配置文件,是pytest单元测试框架的核心配置文件,pytest.ini 可以改变 pytest 的默认行为 一、配置规则 1、优先级 如pytest.ini有该参数值,在执行的时候,优先读取配置文件中的参数如没有&#xf…

idea禁用双击ctrl

Run anything | IntelliJ IDEA Documentation Disable double modifier key shortcuts

去中心遇见混币器

区块链的去中心化交易所在保护隐私和安全性上有着无可比拟的优势,用户甚至不需要提供注册资料,只要有web3钱包即可跟智能合约交易。在uniswap上可兑换绝大多数加密币,新推出的衍生品交易所ununx已经可以交易美股,期货和外汇,一个全…

Flutter 知识集锦 | 监听与通知 ChangeNotifier

theme: cyanosis 1. 数据的提供者与消费者 今天想要和大家好好聊聊 ChangeNotifier 这个东西,从名字上来看它由 change(改变) 和 Notifier(通知器) 构成。打个比方: 有三个铁粉跟我说: "你发新文章的时候跟我说一声"。 之后我发布文章后&…

C++学习: 文件I/O

作者: 苏丙榅 原文链接: https://subingwen.cn/c/file/ 文章目录 1. 文件概述1.1 什么是文件I/O1.2 磁盘文件分类 2. 文件的打开和关闭2.1 文件指针2.2 打开文件 2.3 关闭文件3. 文件的读写3.1 按照字符读写文件3.1.1 写文件3.1.2 读文件3.1.3 EOF 3.2 按照行读写文件3.2.1 写文…

[架构之路-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&#xff…

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、汇总错误结果、发送邮件 开始实现…

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

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

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

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

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

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

CSS的布局 Day03

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

Android ViewBinding和DataBinding功能作用区别

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

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 主要两个…

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+引用的本质以及引用与指针的区别

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