DNS常见面试题

news2024/11/14 3:22:57

DNS是什么?

  1. 域名使用字符串来代替 IP 地址,方便用户记忆,本质上一个名字空间系统
  2. DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存
  3. DNS 就像是我们现实世界里的电话本、查号台,统管着互联网世界里的所有网站,是一个 “超级大管家”;
  4. DNS 服务负责对域名进行解析,获取域名背后映射的 IP 地址,域名的本质是为了方便用户记忆想要与之通信的服务器的地址。(一长串 IP 地址相对于具有实际意义的域名而言,对于用户记忆是不友好的)

DNS域名解析的流程?

就像 IP 地址必须转换成 MAC 地址才能访问主机一样,域名也必须要转换成 IP 地址,这个过程就是 “域名解析”。

目前全世界有几亿个站点,有几十亿网民,而每天网络上发生的 HTTP 流量更是天文数字。这些请求绝大多数都是基于域名来访问网站的,所以 DNS 就成了互联网的重要基础设施,必须要保证域名解析稳定可靠、快速高效。

DNS 的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:

  1. 根域名服务器(Root DNS Server):管理顶级域名服务器,返回 “com”“net”“cn” 等顶级域名服务器的 IP 地址;
  2. 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如 com 顶级域名服务器可以返回 apple.com 域名服务器的 IP 地址;
  3. 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的 IP 地址,比如 apple.com 权威域名服务器可以返回 www.apple.com 的 IP 地址。

在这里根域名服务器是关键,它必须是众所周知的,否则下面的各级服务器就无从谈起了。目前全世界共有 13 组根域名服务器,又有数百台的镜像,保证一定能够被访问到。

有了这个系统以后,任何一个域名都可以在这个树形结构里从顶至下进行查询,就好像是把域名从右到左顺序走了一遍,最终就获得了域名对应的 IP 地址。

例如,你要访问 “www.apple.com”,就要进行下面的三次查询:

  1. 访问根域名服务器,它会告诉你 “com” 顶级域名服务器的地址;
  2. 访问 “com” 顶级域名服务器,它再告诉你 “apple.com” 域名服务器的地址;
  3. 最后访问 “apple.com” 域名服务器,就得到了 “www.apple.com” 的地址。

虽然核心的 DNS 系统遍布全球,服务能力很强也很稳定,但如果全世界的网民都往这个系统里挤,即使不挤瘫痪了,访问速度也会很慢。

所以在核心 DNS 系统之外,还有两种手段用来减轻域名解析的压力,并且能够更快地获取结果,基本思路就是 “缓存”。

首先,许多大公司、网络运行商都会建立自己的 DNS 服务器,作为用户 DNS 查询的代理,代替用户访问核心 DNS 系统。这些 “野生” 服务器被称为“非权威域名服务器”可以缓存之前的查询结果,如果已经有了记录,就无需再向根服务器发起查询,直接返回对应的 IP 地址。

这些 DNS 服务器的数量要比核心系统的服务器多很多,而且大多部署在离用户很近的地方。比较知名的 DNS 有 Google 的 “8.8.8.8”,Microsoft 的“4.2.2.1”,还有 CloudFlare 的“1.1.1.1” 等等。

其次,操作系统里也会对 DNS 解析结果做缓存,如果你之前访问过 “www.apple.com”,那么下一次在浏览器里再输入这个网址的时候就不会再跑到 DNS 那里去问了,直接在操作系统里就可以拿到 IP 地址。

另外,操作系统里还有一个特殊的 “主机映射” 文件,通常是一个可编辑的文本,在 Linux 里是“/etc/hosts”,在 Windows 里是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系统在缓存里找不到 DNS 记录,就会找这个文件。

有了上面的 “野生”DNS 服务器、操作系统缓存和 hosts 文件后,很多域名解析的工作就都不用“跋山涉水” 了,直接在本地或本机就能解决,不仅方便了用户,也减轻了各级 DNS 服务器的压力,效率就大大提升了。

下面的这张图比较完整地表示了现在的 DNS 架构。

在 Nginx 里有这么一条配置指令 “resolver”,它就是用来配置 DNS 服务器的,如果没有它,那么 Nginx 就无法查询域名对应的 IP,也就无法反向代理到外部的网站。

resolver 8.8.8.8 valid=30s;  # 指定 Google 的 DNS,缓存 30 秒

DNS劫持和污染?

DNS 劫持是指通过篡改 DNS 服务器上域名和 IP 地址的对应关系,使得用户在访问特定域名时被重定向到错误的 IP 地址,从而访问到恶意或非预期的网站。

  • “域名屏蔽”,对域名直接不解析,返回错误,让你无法拿到 IP 地址,也就无法访问网站;
  • “域名劫持”,也叫 “域名污染”,你要访问 A 网站,但 DNS 给了你 B 网站。(如果是在原有网站中返回一些广告还好,只是影响用户的冲浪体验,但是如果直接返回一个套壳的冒牌网站,但是因为用户输入的域名是正确的,因此会毫无察觉的窃取用户的个人信息,敏感信息等数据。

DNS用了什么传输协议?(tcp还是udp)

DNS 同时使用 TCPUDP 协议的 53 号端口。这种单个应用协议同时使用两种传输协议的情况在 TCP/IP 栈也算是个另类。但很少有人知道 DNS 分别在什么情况下使用这两种协议。

DNS区域传输 (同步解析记录)和 DNS 响应大于 UDP 报文最大长度的时候使用 TCP 协议,其他时候使用 UDP 协议。

为什么使用 UDP

,是 UDP 的最大优势

客户端向 DNS 服务器查询域名,一般返回的内容都不超过 512字节 ,用 UDP 传输即可。不用经过三次握手,这样 DNS 服务器负载更低,响应更快。

理论上说,客户端也可以指定向 DNS 服务器查询时用 TCP,但事实上,很多 DNS 服务器进行配置的时候,仅支持 UDP 查询包。

何时使用 TCP

传输数据大于 UDP 最大报文长度的时候使用 TCP 协议:

首先了解一下 TCPUDP 传送字节的长度限制:

UDP 报文的最大长度为 512 字节,而 TCP 则允许报文长度超过 512 字节。DNS 查询超过 512 字节时会将后面的数据部分丢掉,所以这时需要使用 TCP 发送。但是通常传统的 UDP 报文一般不会大于 512 字节。即使 DNS 服务器中符合条件的记录很多, DNS 服务器也会限制最多返回 13条 来防止报文大于 512 字节。

DNS 区域传输的时候使用 TCP 协议:

DNS 的规范规定了 2 种类型的 DNS 服务器,一个叫 主 DNS 服务器,一个叫 辅助DNS服务器在一个 主 DNS 服务器 从自己本机的数据文件中读取该区的 DNS 数据信息,而 辅助DNS服务器 则从区的 主 DNS 服务器 中读取该区的 DNS 数据信息。当一个 辅助 DNS 服务器 启动时,它需要与 主 DNS 服务器 通信,并加载数据信息,这就叫做 区传送(zone transfer)

辅域名服务器会定时(一般 3 小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传输,进行数据同步。区域传输使用 TCP 而不是 UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多,且需要保证数据的 可靠性完整性

实际的 DNS 查询过程(递归 or 迭代)

解析记录

解析记录存储在域名服务器中,用于表达域名IP 之间的对应关系,称为 记录(record)。根据使用场景,"记录" 可以分成不同的类型(type),下面列举几个常见的解析记录类型

type

解释

A

地址记录(Address),返回域名指向的 IPv4 地址。

AAAA

AAAA 记录 (AAAA record),返回域名指向的 IPv6 地址。

NS

域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为 IP 地址。

CNAME

规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。

MX

邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。

DNS 服务器根据域名的层级,进行分级查询。

需要明确的是,每一级域名都有自己的 NS 记录,NS 记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。

所谓 "分级查询",就是从根域名开始,依次查询每一级域名的 NS 记录,直到查到最终的 IP 地址,过程大致如下。

  1. 从 "根域名服务器" 查到 "顶级域名服务器" 的 NS 记录和 A 记录(IP 地址)
  2. 从 "顶级域名服务器" 查到 "次级域名服务器" 的 NS 记录和 A 记录(IP 地址)
  3. 从 "次级域名服务器" 查出 "主机名" 的 IP 地址

仔细看上面的过程,你可能发现了,没有提到 DNS 服务器怎么知道 "根域名服务器" 的 IP 地址。回答是 "根域名服务器" 的 NS 记录和 IP 地址一般是不会变化的,所以 "根域名服务器" 的 IP 地址已经内置在所有 DNS 服务器里面了。

迭代查询

tips: 一般的 DNS 并不是全程使用迭代或者递归查询,而是使用两种方式结合。这里仅仅是为了演示全程使用迭代查询的过程。

迭代查询的过程其实就是:当域名服务器收到迭代查询请求报文时,需求给出主机 “你下一步应当向哪一个域名服务器进行查询” 的建议,然后由主机进行下一步的查询,当返回内容即没有确切的结果也没有下一步的建议时,DNS 失败。

这里的建议指 NS 或者 CNAME 等记录

请看图(随手画的小度机器人)

可以通过 dig 命令来迭代跟踪 DNS 过程,windows 下 dig 命令的安装请自行百度

dig +trace www.baidu.com

注意:这里客户端如何选择多条 NS 记录中的一条记录进行下一次查询的目标在不同的操作系统中是不一样的,有的系统会选择第一条,有的则会随机选择。所以一般 DNS服务器 都会将最快的 NS 记录放到第一条。

当返回多条 NS 记录时,如果访问的第一条 NS 记录的 IP 查询时,一定时间内无响应,则会开始尝试访问其他 NS 记录的 IP 查询。

如果返回的记录为空,则代表查询失败,结束 DNS 过程。

递归查询

所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP地址,那么本地域名服务器就以 DNS 客户的身份,向其它根域名服务器继续发出查询请求报文 (即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果是所要查询的 IP地址 ,或者是报错,表示无法查询到所需的 IP地址

主机对域名服务器说:你给我查 www.baidu.comip,我不管你怎么查,你要是不知道你就自己去问其他人,我只要结果不要过程🐅。

当然,图还是要上的。

实际的 DNS 查询过程

上面有特别提到,实际的 DNS查询 并不是单纯的迭代或者递归查询,而是相互结合使用,那么什么时候使用递归什么时候使用迭代呢?

主机向本地域名服务器发起的是递归查询,本地域名服务器到其他域名服务器发起的是迭代查询。

由于 www.baidu.com 的解析过程中需要经过一条 CNAME 记录 www.a.shifen.com,我想大家到现在也已经清楚 CNAME 记录的作用了,后面的例子中我就以 baidu.com 而不是 www.baidu.com 来举例了。(偷懒 )

这里你会发现 baidu.com 和 shifen.com 的授权域名服务器是同一台,这就是上面说的在同一个

参考文档:

06 域名里有哪些门道?

https://juejin.cn/post/7035659937166393375

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

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

相关文章

电路板热仿真覆铜率,功率,结温,热阻率信息计算获取方法总结

🏡《电子元器件学习目录》 目录 1,概述2,覆铜率3,功率4,器件尺寸5,结温6,热阻1,概述 电路板热仿真操作是一个复杂且细致的过程,旨在评估和优化电路板内部的热分布及温度变化,以确保电子元件的可靠性和性能。本文简述在进行电路板的热仿真时,元器件热信息的计算方法…

59.DevecoStudio项目引入不同目录的文件进行函数调用

59.DevecoStudio ArkUI项目引入不同目录的文件进行函数调用 arkUi,ets,cj文件,ts文件的引用 import common from ohos.app.ability.common; import stringutils from ./uint8array2string; //index.ts的当前目录 import StringUtils2 from ../http2/uint8array2st…

python全栈开发《23.字符串的find与index函数》

1.补充说明上文 python全栈开发《22.字符串的startswith和endswith函数》 endswith和startswith也可以对完整(整体)的字符串进行判断。 info.endswith(this is a string example!!)或info.startswith(this is a string example!!)相当于bool(info this …

鸿蒙媒体开发【拼图】拍照和图片

拼图 介绍 该示例通过ohos.multimedia.image和ohos.file.photoAccessHelper接口实现获取图片,以及图片裁剪分割的功能。 效果预览 使用说明: 使用预置相机拍照后启动应用,应用首页会读取设备内的图片文件并展示获取到的第一个图片&#x…

Animate软件基础:关于补间动画中的图层

Animate 文档中的每一个场景都可以包含任意数量的时间轴图层。使用图层和图层文件夹可组织动画序列的内容和分隔动画对象。在图层和文件夹中组织它们可防止它们在重叠时相互擦除、连接或分段。若要创建一次包含多个元件或文本字段的补间移动的动画,请将每个对象放置…

go 中 string 并发写导致的 panic

类型的一点变化 在Go语言的演化过程中,引入了unsafe.String来取代之前的StringHeader结构体,这是为了提供更安全和简洁的字符串操作方式。 旧设计 (StringHeader 结构体) StringHeader注释发生了一点变动,被标注了 Deprecated,…

谷粒商城实战笔记-103~104-全文检索-ElasticSearch-Docker安装ES和Kibana

文章目录 一,103-全文检索-ElasticSearch-Docker安装ES1,下载镜像文件2,Elasticsearch安装3,验证 二,104-全文检索-ElasticSearch-Docker安装Kibana1,下载镜像文件2,kibana的安装3,验…

【数据结构算法经典题目刨析(c语言)】环形链表的约瑟夫问题(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 一.前言: 前言——著名的Josephus问题 据说著名犹太 Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39个犹太⼈与Josephus及他…

ansible 配置yum源

ansible配置yum源 有两种方式,一种是可以写好sh脚本,然后ansible去执行sh文件 另外一种就是使用yum_repository库 本文讲使用库的方式 本文使用的环境是centos7 ,配置也是按照7去配置的,没有写动态配置 直接上代码 [rootvm-2 ~…

《技术人求职之道》之求职机遇篇:多渠道并进,如何高效获取面试机会

摘要 本文探讨了求职过程中获取面试机会的多种途径,强调简历优化的重要性,并指出了不同求职方式的优劣及其适用情况。文章首先介绍通过企业挖掘、内部推荐、猎头服务、社会招聘和校园招聘等途径获得面试机会的方法,并根据成功率和适用性为这些方法排序。然后,详细讨论了每…

门控循环单元GRU

目录 一、GRU提出的背景:1.RNN存在的问题:2.GRU的思想: 二、更新门和重置门:三、GRU网络架构:1.更新门和重置门如何发挥作用:1.1候选隐藏状态H~t:1.2隐藏状态Ht: 2.GRU: 四、训练过程…

当自回归遇到Diffusion

文章目录 Autoregressive Image Generation without Vector Quantization一. 简介1.1 摘要1.1 引言二.相关工作2.1 Sequence Models for Image Generation2.2 Diffusion for Representation Learning2.3 Diffusion for Policy Learning三.方法3.1 重新思考离散值的tokens3.2 Di…

Kotlin OpenCV 图像图像50 Haar 级联分类器模型

Kotlin OpenCV 图像图像50 Haar 级联分类器模型 1 OpenCV Haar 级联分类器模型2 Kotlin OpenCV Haar 测试代码 1 OpenCV Haar 级联分类器模型 Haar级联分类器是一种用于对象检测(如人脸检测)的机器学习算法。它由Paul Viola和Michael Jones在2001年提出…

conda环境pip 安装Tensorflow-gpu 2.10.2提示nbconvert 的包依赖冲突

问题如下: ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. nbconvert 7.16.4 requires beautifulsoup4, which is not inst…

DETR论文详解

文章目录 前言一、DETR理论二、模型架构1. CNN2. Transformer3. FFN 三、损失函数四、代码实现总结 前言 DETR是Facebook团队在2020年提出的一篇论文,名字叫做《End-to-End Object Detection with Transformers》端到端的基于Transformers的目标检测,DET…

数仓入门:数据分析模型、数仓建模、离线实时数仓、Lambda、Kappa、湖仓一体

往期推荐 大数据HBase图文简介-CSDN博客 数仓分层ODS、DWD、DWM、DWS、DIM、DM、ADS-CSDN博客 数仓常见名词解析和名词之间的关系-CSDN博客 目录 0. 前言 0.1 浅谈维度建模 0.2 数据分析模型 1. 何为数据仓库 1.1 为什么不直接用业务平台的数据而要建设数仓? …

ChatGPT能代替网络作家吗?

最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 当然可以!只要你玩写作AI玩得6,甚至可以达到某些大神的水平! 看看大神、小白、AI输出内容的区…

重塑企业知识库:AI搜索的深度应用与变革

在数字化浪潮的推动下,企业知识库已成为企业智慧的核心载体。而AI搜索技术的融入,让海量信息瞬间变得井然有序,触手可及。它不仅革新了传统的搜索方式,更开启了企业知识管理的新纪元,引领着企业向更加智能化、高效化的…

【人工智能】FPGA实现人工智能算法硬件加速学习笔记

一. FPGA的优势 FPGA拥有高度的重配置性和并行处理能力,能够同时处理多个运算单元和多个数据并行操作。FPGA与卷积神经网络(CNN)的结合,有助于提升CNN的部署效率和性能。由于FPGA功耗很低的特性进一步增强了其吸引力。此外,FPGA可以根据具体算法需求量身打造硬件加速器。针对动…

[CR]厚云填补_SEGDNet

Structure-transferring edge-enhanced grid dehazing network Abstract 在过去的二十年里,图像去雾问题在计算机视觉界受到了极大的关注。在雾霾条件下,由于空气中水汽和粉尘颗粒的散射,图像的清晰度严重降低,使得许多计算机视觉…