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 个步骤。
- 用户在 Web 浏览器中键入 “example.com”,查询传输到互联网中,并被 DNS 递归解析器接收。
- 接着,解析器查询 DNS 根域名服务器(.)。
- 然后,根服务器使用存储其域信息的顶级域(TLD)DNS 服务器(例如 .com 或 .net)的地址响应该解析器。在搜索 example.com 时,我们的请求指向 .com TLD。
- 解析器向 .com TLD 发出请求。
- TLD 服务器随后使用该域的域名服务器 example.com 的 IP 地址进行响应。
- 最后,递归解析器将查询发送到域的域名服务器。
example.com 的 IP 地址而后从域名服务器返回解析器。 - 然后 DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。
- DNS 查找的这 8 个步骤返回 example.com 的 IP 地址后,浏览器便能发出对该网页的请求:
- 浏览器向该 IP 地址发出 HTTP 请求。
- 位于该 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 预检请求是什么?