DNS协议解析过程

一、什么是DNS协议

DNS是域名系统(Domain Name Service)的缩写,我们通常用来识别主机的方式有两种,一种是通过主机名,另外一种是通过IP地址。主机名便于我们的记忆,而路由器则更喜欢定长的、有着层次结构的IP地址。所以需要一个能将域名转变到IP地址的目录服务,这就是域名服务器存在的意义。

二、DNS解析过程

1. 浏览器缓存检查

浏览器会先检查自己是否有 www.example.com 的DNS缓存记录。如果有,直接使用。

2. 操作系统缓存检查

如果浏览器没有,操作系统(OS)会查看本机的DNS缓存。

3. hosts 文件检查(可选)

某些操作系统(如Windows和Linux)会检查本地的 hosts 文件,看是否有该域名的静态映射。

4. 发送DNS请求给本地域名服务器(递归DNS服务器)

如果本机没有缓存,系统会将查询请求发送给配置的 本地DNS服务器(通常是你路由器、ISP或设置的公共DNS,如8.8.8.8)。

此时,本地DNS服务器会开始递归查询

5. 查询根DNS服务器

  • 本地DNS服务器先向 根DNS服务器 请求 www.example.com
  • 根DNS服务器不负责解析具体域名,但会告诉你:".com 顶级域名的TLD服务器地址是 XX"。

6. 查询顶级域(TLD)DNS服务器

  • 本地DNS服务器向 .com 的 TLD DNS服务器 发送查询请求。
  • .com 的TLD服务器会回应:"example.com 的权威DNS服务器地址是 YY"。

7. 查询权威DNS服务器

  • 本地DNS服务器向 权威DNS服务器 请求 www.example.com 的 IP 地址。
  • 权威DNS服务器返回对应的 IP,比如:93.184.216.34。

8. 本地DNS服务器将结果缓存,并返回给客户端

  • 本地DNS服务器把这个IP地址保存到本地缓存中(根据TTL时间),并返回给你的电脑。

9. 客户端接收到IP地址,开始访问网站

  • 你的浏览器使用这个IP地址向服务器发起HTTP或HTTPS连接,请求网页内容。

三、DNS的查询方式

1. 递归查询 (Recursive Query)

在递归查询中,DNS 客户端(通常是本地 DNS 解析器)向 DNS 服务器发出查询请求。该服务器如果无法直接回答客户端的问题,它会代表客户端进行查询,直到找到最终的答案并返回给客户端。

  • 流程

    1. 客户端发送查询请求给本地 DNS 服务器。

    2. 如果本地 DNS 服务器知道答案,它直接返回。如果不知道,它会通过其他 DNS 服务器查询。

    3. 递归查询通常从根 DNS 服务器开始,然后逐级向下查询,直到获得答案。

    4. 最后,解析结果返回给客户端。

  • 特点

    • 客户端只需要等待最终的结果,不需要知道具体的查询路径。

    • 负担主要由 DNS 服务器承担。

2. 迭代查询 (Iterative Query)

在迭代查询中,DNS 客户端向 DNS 服务器发送查询请求。如果该服务器无法直接回答请求,它不会继续向下查询,而是返回一个指向其他 DNS 服务器的建议地址(通常是下级 DNS 服务器)。

  • 流程

    1. 客户端向本地 DNS 服务器发送查询请求。

    2. 本地 DNS 服务器检查是否有答案。如果没有,它会返回一个上级 DNS 服务器的地址给客户端。

    3. 客户端再向上级 DNS 服务器发出查询请求,依此类推,直到获得最终的答案。

  • 特点

    • 客户端需要知道如何进行多次查询,并且需要解析中间返回的服务器地址。

    • 每个 DNS 服务器只负责给出下一个可能的答案,而不是递归查找。

相关推荐
不像程序员的程序媛5 小时前
系统cpu内存负载资源分析
运维·服务器·数据库
Uncertainty!!7 小时前
Ubuntu 22.04 安装超好用中文输入法rime-ice(雾凇拼音)过程记录
linux·ubuntu·中文输入法
kk的vmware虚拟机安装ubuntu7 小时前
鱼皮 yu-rpc:从 0 到 1 手写 RPC 框架的实践教程
网络·网络协议·其他·rpc
ShineWinsu8 小时前
对于Linux:网络基础的解析
linux·网络·面试·udp·笔试·ip·tcp
耍酷的魔镜8 小时前
谈谈如何使用Netty开发实现高性能的RPC服务器
服务器·网络协议·rpc
↘"LYong9 小时前
旧版 CentOS 安装 Docker 完整指南(附国内镜像加速)
linux·运维·docker
Zhang~Ling9 小时前
Vim 多模式详解:命令、插入、底行与插件配置
linux·编辑器·vim
程序员在囧途10 小时前
likeadmin-api API 中转站怎么做统一报价?从 /pricing、/user/balance 到 task_id 回执的落地方法
运维·服务器·数据库·likeadmin-api·api中转站·token计费
cookies_s_s10 小时前
C++ 字符串动态创建对象 -- 工厂模式、自动注册、模板递归动态调用
服务器·开发语言·c++
想你依然心痛11 小时前
Linux用户空间与内核空间通信:netlink、ioctl、mmap 零拷贝与性能对比
linux·运维·服务器