DNS 域名解析

news2024/12/20 12:54:13

介绍域名

网域名称(英语:Domain Name,简称:Domain),简称域名、网域。

域名是互联网上某一台计算机或计算机组的名称。

域名可以说是一个 IP 地址的代称,目的是为了便于记忆。例如,wikipedia.org 是一个域名。人们可以直接访问 wikipedia.org 来代替 IP 地址,然后 DNS 系统就会将域名转化成便于机器识别的 IP 地址。这样,人们只需要记忆 wikipedia.org 这一串带有特殊含义的字符,而不需要记忆没有含义的数字。

域名的结构

域名由多个部分组成,每个部分由 “.” 点分隔。最右边的一个部分是顶级域名,从右侧到左侧隔一个点依次下降一层。每个部分可以包含 1 到 63 个字节。域名的总长度则不能超过 253 个字节。域名里的英文字母不区分大小写。


image-20230209222449782.png

整个互联网中的域名空间结构就像一棵倒置的树,如上图所示。

  • 这棵域名树的根称为根 DNS 服务器,在 Internet 上总共有 13 个根 DNS 服务器(每个根 DNS 服务器都是一个集群),大部分位于北美。
  • 根往下的第一级节点称为顶级域(Top Level Domain,TLD),目前共有 7 个这样的顶级域名,分别是:1.com 商业组织;2.edu 教育机构;3.gov 政府部门;4.mil 军事部门;5.net 网络基础设施;6.org 非营利性组织;7.int 国际组织。每个顶级域由对应的顶级域(TLD)服务器负责管理,除了以上 7 个顶级域名,还有各个国家的顶级域名(如 cn、uk、ca 和 fr 等)也在这一级别进行管理。
  • 每个顶级域再向下展开分支,每个分支域都是一个子域。比如 CDNbook.com 是顶级域 com 的子域。CDNbook.com 也可以再包含子域,比如 a.CDNbook.com、b.CDNbook.com。**一个域就是域名空间中的一棵子树。域的名字也就是这棵子树的根节点的域名。**例如在下图中,CDN.com 域的顶端节点就是 CDN.com。

image-20230209223812002.png


在每个域中,会有一台或多台服务器用来保存这个域名空间的所有信息,并且响应关于该域名空间的所有请求。这种服务器就叫做这个域的权威域名服务器(也常称为授权域名服务器),它拥有这个域所有的域名信息。

每个域都可以分为多个子域,而每个权威域名服务器可以给一个或多个区域进行解析。但即使各个区域被授权给同一个权威域名服务器,它们之间仍然是彼此独立的。例如,CDNbook.com 被划分为三个子域:a.CDNbook.com、b.CDNbook.com 和 c.CDNbook.com。每个子域都可以自行维护自己的权威域名服务器。当一个子域被授权出去,它原本所属的域就不再包含它的数据(A 记录),而只留下一些指针,这些指针指向相应子域的权威域名服务器(NS 记录)。如果有一个询问该子域信息的请求,所返回的应该是该子域的权威域名服务器列表。

一个域可以有多台权威域名服务器,但是只有一台是主域名服务器,这台主域名服务器负责向其他辅域名服务器分发每个域名空间的更新信息。


根 DNS 服务器、顶级 DNS 服务器和权威 DNS 服务器共同组成了 DNS 服务器层,共同维护分布式、层次化的 DNS 数据库。

DNS 系统采用树形设计的一个主要目的就是为了分散管理。而这种分散管理是通过 “授权” 来实现的。对域进行授权,就是域管理组织把子域授权给其他组织进行管理,由子域管理者来维护子域中的数据,可以自由改动数据,包括对子域再进行划分,再授权。

域名解析

域名解析包括正向解析和反向解析。

  • 正向解析是把域名转换为 IP 地址。这需要由专门的域名解析服务器来完成。
  • 反向解析是把 IP 地址转换为域名。反向解析比较罕见,.arpa 顶级域名专门用于这类用途。

本地 DNS 服务器收到客户端的域名解析请求后,会采用递归查询方式(recursive query)或者迭代查询方式(iterative query)向 DNS 系统中的其他远程 DNS 服务器发送查询请求。

  • 迭代查询方式指的是:每次查询请求都由【本地 DNS 服务器】发起,收到答复后再由【本地 DNS 服务器】向下一个远程 DNS 服务器发送查询请求,直到获得结果。
  • 递归查询方式指的是:【本地 DNS 服务器】向【根 DNS 服务器】发送查询请求,并从【根 DNS 服务器】获取域名的解析结果。

image-20230225172236793.png


在实际应用中,迭代查询方式是比较常见的。下图描述的就是一个典型的 DNS 递归查询过程。

当用户在浏览器的地址栏中输入 URL 并点击回车后,浏览器首先判断 URL 中的是 IP 地址,还是域名。如果 URL 中的是域名,那么首先要做的就是域名解析。

域名解析的流程:首先是浏览器查看浏览器的缓存。如果浏览器中没有该域名的缓存,那么浏览器询问【本地 DNS 解析器】,【本地 DNS 解析器】首先查看本地 DNS 缓存。如果本地 DNS 缓存中没有该域名的缓存,那么【本地 DNS 解析器】请求【本地 DNS 服务器】进行域名解析。如果【本地 DNS 服务器】中没有该域名的缓存,那么【本地 DNS 服务器】向 DNS 系统中的其他远程 DNS 服务器发送查询请求。

不能把数据永远放在缓存中,缓存中的数据都被设置了一个生存时间(time to live,TTL)。超过 TTL 时间的数据会被清除,需要再重新获取新的数据。


image-20230209231325837.png

以【本地 DNS 解析器】请求【本地 DNS 服务器】进行 www.CDNbook.com 域名的解析为例:

(1)【本地 DNS 解析器】向【本地 DNS 服务器】发送域名解析请求。(8)【本地 DNS 解析器】收到来自【本地 DNS 服务器】的应答。

(2)【本地 DNS 服务器】向【根 DNS 服务器】发送域名解析请求,【根 DNS 服务器】返回 .com 顶级域的域名服务器列表(多条 NS 记录)。

(4)【本地 DNS 服务器】收到应答后,在 .com 顶级域的域名服务器列表中选择一个 IP 地址,向这个 IP 地址对应的 DNS 服务器发送域名解析请求,.com 顶级域的域名服务器返回 CDNbook.com 域的域名服务器列表。

(6)【本地 DNS 服务器】收到应答后,在 CDNbook.com 域的域名服务器列表中选择一个 IP 地址,向这个 IP 地址对应的 DNS 服务器发送域名解析请求,CDNbook.com 域的域名服务器返回 www.CDNbook.com 域的 A 记录列表(多个 IP 地址)。

(8)【本地 DNS 服务器】收到应答后,在 www.CDNbook.com 域的 A 记录列表中选择一个 IP 地址,将该 IP 地址返回给【本地 DNS 解析器】。

记录类型

域名服务器是根据资源记录来对域名解析请求进行应答的。在 DNS 系统中,最常见的资源记录是 Internet 类记录。

资源记录是一个包含了下列字段的 4 元组:Name、Value、Type、TTL。

  • TTL 是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间
  • Type 是该记录的类型
  • Name 和 Value 的值取决于 Type

Internet 类资源记录主要分为以下几种类型:

  • A 记录,Address:A 记录用于描述域名到 IP 地址的映射关系。将域名指向一个 IPv4 地址。同一个域名,可以有多条 A 记录。也就是说,一次 DNS 查找可以返回多个 IP 地址。
  • NS 记录,Name Server:NS 记录是域名服务器记录,用于指定该域名由哪个 DNS 服务器来进行解析。每个区域可以有多个域名服务器,因此可以有多条 NS 记录。如果需要把子域名交给其他的 DNS 服务器来进行解析,就需要添加 NS 记录。
  • SOA 记录,Start Of Authority:SOA 记录用于指定该区域的权威域名服务器。每个区域允许且只允许有一个 SOA 记录,它是资源记录的第一个条目。
  • CNAME 记录,Canonical Name:CNAME 记录是规范名称,用于描述域名到规范名称的映射关系。将域名指向另外一个域名,指向的域名是规范名称。【本地 DNS 服务器】收到 CNAME 记录后,它会用 CNAME 记录中的规范名称来重新查询新域名的 A 记录。
  • PTR 记录,Pointer Record:PTR 记录是逆向查询记录,返回一个域名,它用于根据 IP 地址查询域名(反向解析)。逆向查询的一个应用是:可以防止垃圾邮件,即验证发送邮件的 IP 地址,是否真的有它所声称的域名。

image-20230208230650583.png

假设有上述的 DNS zone:当要查询 bar.example.com 的 A 记录时,域名解析服务器会查到对应的 CNAME 记录,即foo.example.com,随即开始查询 foo.example.com 域名的 A 记录,查到 192.0.2.23 返回结果。

CNAME 的意思是真实名称。正确的理解是:bar.example.com 的真实名称是 foo.example.com。请求访问bar.example.com 的客户端会得到 foo.example.com 返回的结果。

域名的应用

域名服务器可以将域名映射为 IP 地址。基于这个特点,域名解析除了可以用于浏览器之外,域名解析还可以用于以下的场景:

  • 基于域名实现重定向:使用域名代替 IP 地址。可以让对外提供服务的域名不变,而主机的 IP 地址任意变动。当主机有情况需要下线、迁移时,可以更改 DNS 记录,让域名映射到其他的 IP 地址。
  • 基于域名搭建名字服务器:因为域名是一个名字空间,所以可以使用 BIND 9 等开源软件搭建一个内网的本地 DNS 服务器作为名字服务器。这样我们开发的各种内部服务就可以都用域名来标记,比如数据库服务都用域名 “mysql.inner.app”,商品服务都用 “goods.inner.app”,发起网络通信时使用域名,不必再使用写死的 IP 地址了。
  • 基于域名实现负载均衡,从而提高系统的可用性:基于域名实现负载均衡有两种方式:
    • 第一种方式:域名解析返回多个 IP 地址,客户端收到多个 IP 地址后,自己根据负载均衡策略选择一个 IP 地址使用,把请求分发到不同的服务器。
    • 第二种方式:域名解析内部配置负载均衡策略,在 DNS 端把请求分发到不同的服务器。

参考资料

《CDN 技术详解》雷葆华著

CDN技术详解-雷葆华著-微信读书 (qq.com)

DNS 原理入门 - 阮一峰的网络日志 (ruanyifeng.com)

06 | 域名里有哪些门道? (geekbang.org)

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

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

相关文章

Latex中的表格(2)

Latex中的表格一、一个加脚注的三线表的例子二、一个表格中加注释的例子三、两个并排的两个表格的例子3.1 使用小页环境并排表格3.2 使用子表格并排表格四、一个格式复杂的表格的例子五、一个长表格的例子这篇文章主要罗列一些特殊的表格例子。内容来自:一篇北师大学…

深度剖析数据在内存的存储

目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点,大家都拿起笔记本,…

【机器学习笔记】Python基础笔记

目录基础语法加载数据:pd.read_csv查看数据大小:shape浏览数据行字段:columns浏览少量数据:head()浏览数据概要:describe()基础功能语法缺省值去除缺失值:dropna按行删除:存在空值,即…

【数据库】第二章 关系数据库

第二章 关系数据库 2.1关系数据结构及形式化定义 关系 域(domain) :域是一组具有相同数据类型的值的集合,可以取值的个数叫基数 笛卡尔积 :一个记录叫做一个元组(tuple),元组中每一个属性值,叫一个分量 基数&…

35测试不如狗?是你自己技术不够的怨怼罢了

一、做软件测试怎么样? 引用著名软件测试专家、清华大学郑人杰教授的说法:软件测试工程师是一个越老越吃香的职业。 其中就表达了软件测试工作相对稳定、对年龄没有限制、而且随着项目经验的不断增长和对行业背景的深入了解,会越老越吃香。…

刚上岸字节测试开发岗,全网最真实的大厂面试真题

首先我来解释一下为什么说是全网最真实的面试题,相信大家也发现软件测试面试题在网上流传也已不少,但是经过仔细查看发现了两个很重要的问题。 第一,网上流传的面试题的答案并不能保证百分百正确。也就是说各位朋友辛辛苦苦花了很多时间准备…

《程序员的自我修养》阅读笔记

文章目录【第2部分】静态链接1 编译过程2 编辑器的工作流程3 链接——模块的拼接4 目标文件目标文件中的段(section)ELF文件结构5 静态链接1 空间与地址分配2 符号解析与重定位【第3部分】装载与动态链接1 装载的方式2 进程的启动3 为什么需要动态链接&a…

通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码

文章目录1、什么是DES2、DES的基本概念3、DES的加密流程4、DES算法步骤详解4.1 初始置换(Initial Permutation,IP置换)4.2 加密轮次4.3 F轮函数4.3.1 拓展R到48位4.3.2 子密钥K的生成4.3.3 当前轮次的子密钥与拓展的48位R进行异或运算4.3.4 S盒替换(Subs…

学习 create-vite 源码后,感觉真不一样

前言 已经学习了一段时间的源码了,在写源码 demo 小例子的时候都是使用 react 项目作为模板,而我的 react 项目正好是由create-vite来创建的,因此,今天来学习一下关于create-vite的源码。话不多说,咱们直接开始学习。…

【深度学习】什么是线性回归逻辑回归单层神经元的缺陷

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录逻辑回归&线性回归单层神经元的缺陷单层神经元的缺陷逻辑回归&线性回归 线性回归预测的是一个连续值, 逻辑回归给出的”是”和“否”的回答. 等…

MySQL事务与索引

MySQL事务与索引 一、事务 1、事务简介 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务用来管理 insert,update,delete 语句 事务特性…

SQL性能优化的47个小技巧,果断收藏!

1、先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器; 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据; 未命中缓存后,MySQL通…

【编程入门】应用市场(go语言版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 《N种编程语言做个记事本》 目标 为编程初学者打造入门学习项目,使…

qt源码--信号槽

本篇主要从Qt信号槽的连接、断开、调用、对象释放等方面展开; 1.信号建立连接过程 connect有多个重载函数,主要是为了方便使用者,比较常用的有2种方式: a. QObject::connect(&timer, &QTimer::timeout, &loop, &am…

一步步教你电脑变成服务器,tomcat的花生壳设置(原创)

1,首先你去https://console.oray.com/这网站注册个帐号,如果注册成功它会送你一个免费域名,当然不记得也没关系,你记住你注册的 帐号跟密码,然后下载它的软件(花生壳动态域名6.0正式版)有xp跟li…

19_FreeRTOS软件定时器

目录 软件定时器介绍 FreeRTOS软件定时器特点 软件定时器的命令队列 软件定时器的相关配置 单次定时器和周期定时器 软件定时器结构体成员 FreeRTOS软件定时器相关API函数 实验源码 软件定时器介绍 定时器描述:从指定的时刻开始,经过一个指定时间,然后触发一个超时事件…

操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!! MSF和CS绕过UAC提权 CS绕过UAC提权 拿到一个普通管理员的SHELL,在CS中没有*号代表有…

样式冲突太多,记一次前端CSS升级

目前平台前端使用的是原生CSSBEM命名,在多人协作的模式下,容易出现样式冲突。为了减少这一类的问题,提升研效,我调研了业界上主流的7种CSS解决方案,并将最终升级方案落地到了工程中。 样式冲突的原因 目前遇到的样式…

数组:二分查找、移除数组等经典数组题

二分查找:相关题目链接:https://leetcode.cn/problems/binary-search/题目重现:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值…

【c++】文件操作(文本文件、二进制文件)

文章目录文件操作文本文件写文件读文件二进制文件写文件读文件文件操作 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放; 通过文件可以将数据持久化; c中对文件操作需要包含头文件 文件类型分为两种: 1、文本文…