什么是 DNS?DNS 的三种查询方式?

embedded/2025/1/16 18:07:07/

1. DNS是什么

DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器。

简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址。

域名是一个树状结构,最顶层的域名是根域名(root),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名
在这里插入图片描述

例如www.xxx.com,www为三级域名、xxx为二级域名、com为顶级域名,系统为用户做了兼容,域名末尾的根域名. 一般不需要输入。

这种树状结构的意义在于,只有上级域名,才知道下一级域名的 IP 地址,需要逐级查询。每一级域名都有自己的 DNS 服务器,存放下级域名的 IP 地址。

2. DNS 查找有哪些步骤?

通常,DNS 查找信息将本地缓存在查询计算机内,或者远程缓存在 DNS 基础设施内。DNS 查找通常有 8 个步骤。缓存 DNS 信息时,将从 DNS 查找过程中跳过一些步骤,从而使该过程更快。以下示例概述了不缓存任何内容时的所有 8 个步骤。

  1. 用户在 Web 浏览器中键入 “example.com”,查询传输到互联网中,并被 DNS 递归解析器接收。
  2. 接着,解析器查询 DNS 根域名服务器(.)
  3. 然后,根服务器使用存储其域信息的顶级域(TLD)DNS 服务器(例如 .com 或 .net)的地址响应该解析器。在搜索 example.com 时,我们的请求指向 .com TLD。
  4. 解析器向 .com TLD 发出请求。
  5. TLD 服务器随后使用该域的域名服务器 example.com 的 IP 地址进行响应。
  6. 最后,递归解析器将查询发送到域的域名服务器。
    example.com 的 IP 地址而后从域名服务器返回解析器。
  7. 然后 DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。
  8. DNS 查找的这 8 个步骤返回 example.com 的 IP 地址后,浏览器便能发出对该网页的请求:
  9. 浏览器向该 IP 地址发出 HTTP 请求。
  10. 位于该 IP 的服务器返回将在浏览器中呈现的网页
    在这里插入图片描述

3. DNS查询方式

1. 递归查询

客户端向 DNS 服务器发送查询请求,要求 DNS 服务器负责获取最终的 IP 地址并返回给客户端。查询的整个过程由 DNS 服务器完成,客户端只与 DNS 服务器交互一次,收到最终结果。如果 DNS 服务器找不到结果,会返回错误。

查询过程:
1.客户端发起递归查询请求。
2.DNS 服务器查询本地缓存
3.如果缓存中没有记录,服务器向其他 DNS 服务器发起多次查询(逐级向根、顶级域名(TLD)、权威 DNS 查询)。
4.最终结果返回给客户端。

2. 迭代查询

客户端向 DNS 服务器发出查询请求,DNS 服务器如果无法直接解析,会返回下一步查询的推荐地址。客户端根据推荐的地址继续发起查询,直到获取最终结果。
客户端主动与多个 DNS 服务器交互,DNS 服务器只返回下一步信息,而不负责整个解析过程。过程更灵活,但客户端负担较大。

查询过程:
1.客户端发起迭代查询请求。
2.DNS 服务器返回推荐的下一级 DNS 服务器地址
3.客户端再次向推荐的 DNS 服务器发起查询。
4.反复进行,直到获取最终结果。

3. 非递归查询

客户端直接向能够解析请求的 DNS 服务器查询 IP 地址,DNS 服务器只在本地缓存中查找记录并返回结果 。不涉及多次查询,查询速度快,由于只能使用服务器的已有缓存,结果可能不全面。常用于本地缓存查询。

查询过程:
1.客户端发起非递归查询请求。
2.DNS 服务器查找本地缓存并返回结果。
3.如果没有缓存,DNS 服务器返回错误。

4. 实际 DNS 查询过程

通常 DNS 查询是递归查询迭代查询的结合:
1.客户端向本地 DNS 服务器发起递归查询
2.本地 DNS 服务器向根 DNS、顶级域名(TLD)服务器、权威服务器发起迭代查询
3.本地 DNS 服务器获取结果后返回给客户端。

5. DNS缓存

为了优化 DNS 查询速度,减少重复查询,DNS 使用多级缓存机制

缓存存在于:客户端操作系统(如 DNS 缓存表)、本地 DNS 服务器、中间网络设备(如路由器)

DNS 数据可缓存到各种不同的位置上,每个位置均将存储 DNS 记录并保存由**生存时间(TTL)**决定的一段时间。

TTL (Time-To-Live) 表示某条 DNS 记录在缓存中存活的时间,是域名系统中为每条 DNS 记录设置的一个生命周期。

🔍https://www.ruanyifeng.com/blog/2022/08/dns-query.html
🔍什么是 DNS? | DNS 的工作方式

🔖更多阅读:
🔍HTTP1.0/1.1/2.0/3.0 的区别?
🔍HTTP请求中的安全性和幂等性
🔍OPTIONS 预检请求是什么?


http://www.ppmy.cn/embedded/154446.html

相关文章

PlantUML流程图语法学习实践

前言 PlantUML流程图在软件开发中具有多种用途,使用PlantUML生成的UML图表可以帮助审查者更快地理解代码的结构和逻辑;在AI发展的大环境中,可以借助plantUML语法生成的伪代码形式利用promt直接生成开发代码。 一、PlantUML PlantUML 是一款非…

Bash语言的语法糖

Bash语言的语法糖 Bash(Bourne Again SHell)是一种常用的Unix Shell,它为用户提供了一种命令行界面,用于与操作系统进行交互。虽然在功能上,Bash允许进行复杂的脚本编写、文件操作与系统管理,但是对于初学…

UnityDemo-TheBrave-制作笔记

这是我跟着b站up主MStudio的视频学习制作的,大体上没有去做一些更新的东西,这里只是一个总的总结。在文章的最后,我会放上可以游玩该游戏的链接和exe可执行文件,不过没有对游戏内容进行什么加工,只有基本的功能实现罢了…

zerotier已配置但ip连不上?

利用zerotier内网渗透,在公网上远程连接使用局域网内的服务器,经常遇到连接不上的问题 zerotier配置过程 解决方法 声明:个人使用过程中,发现的有效解决方法,不一定能解决所有人的问题 总结: 重启Zerotier…

AI刷题-最大矩形面积问题、小M的数组变换

目录 一、最大矩形面积问题 问题描述 输入格式 输出格式 输入样例 输出样例 数据范围 解题思路: 问题理解 数据结构选择 算法步骤 最终代码: 运行结果: 二、小M的数组变换 问题描述 测试样例 解题思路: 问题…

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例(快入入门java-grpc框架) 参考官方入门案例教程:里面我看proto编译,其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

辅助云运维

为客户提供运维支持,保障业务连续性。 文章目录 一、服务范围二、服务内容三、服务流程四、 服务交付件五、责任分工六、 完成标志 一、服务范围 覆盖范围 云产品使用咨询、问题处理、配置指导等; 云产品相关操作的技术指导; 云相关资源日常…

宝塔面板 php8.0 安装 fileinfo 拓展失败

系统:Albaba Cloud Linux release 3 (OpenAnolis Editon)即 Centos 平替 异常提示: cc: fatal error: ** signal terminated program cc1 compilation terminated. make: *** [Makefile:211: libmagic/apprentice.lo] Error 1搜…