当前位置: 首页 > news >正文

字节二面:DNS是什么?是什么原理?

写在前面

最近有个同学后台私信让我出一个DNS的工作原理,面试的时候居然问到了,所以就简单聊聊DNS的工作原理吧!
在这里插入图片描述

1. DNS 的核心作用

DNS(域名系统,Domain Name System)是互联网中用于将人类可读的域名转换为机器可识别的 IP 地址的核心服务。

域名与 IP 的映射:DNS 本质上是一个分布式数据库,存储了域名与对应 IP 地址的映射关系。
在这里插入图片描述

2. DNS 的组成部分

  • 域名空间(Domain Name Space)
    以树状结构组织域名,例如:根域(.) → 顶级域(.com) → 二级域(sbnvidia.com) → 子域(www.sbnvidia.com)
  • DNS 服务器
    • 递归解析器(Recursive Resolver):用户直接访问的服务器(如 ISP 提供的 DNS 或公共 DNS 如 8.8.8.8),负责代替用户完成查询。
    • 根域名服务器(Root Server):全球共 13 组,存储顶级域(如 .com.org)的地址信息。
    • 顶级域服务器(TLD Server):管理特定顶级域(如 .com 服务器存储所有以 .com 结尾的域名信息)。
    • 权威域名服务器(Authoritative Server):存储具体域名的 IP 地址(如 example.com 的权威服务器由域名所有者管理)。

在这里插入图片描述

  • DNS 记录:存储域名相关信息的条目,常见类型包括:
    • A 记录:域名到 IPv4 地址的映射。
    • AAAA 记录:域名到 IPv6 地址的映射。
    • CNAME 记录:域名别名(如将 www.example.com 指向 example.com)。
    • MX 记录:邮件服务器地址。
    • NS 记录:指定管理域名的权威服务器。

这也是在我们域名解析的时候所需要了解的
在这里插入图片描述

3. DNS 解析流程

当用户在浏览器输入 www.sbnvidia.com 时,解析过程如下:

  1. 本地缓存查询
    • 浏览器检查自身缓存 → 若无,检查操作系统缓存(如 hosts 文件)。
    • 若仍无结果,向递归解析器(如本地 DNS 服务器)发起请求。
  2. 递归解析器处理
    • 递归解析器先检查自身缓存,若未命中,则从根域名服务器开始逐级查询:
      a. 根域名服务器:返回 .com 顶级域服务器的地址。
      b. 顶级域服务器(.com):返回 sbnvidia.com 的权威服务器地址。
      c. 权威域名服务器:返回 www.sbnvidia.com 的 IP 地址。
  3. 返回结果
    • 递归解析器将最终 IP 返回给用户设备,并缓存结果(根据记录的 TTL 时间)。

在这里插入图片描述

  • 缓存层级:浏览器 → 操作系统 → 递归解析器均会缓存结果,减少重复查询。
  • TTL(Time to Live):每条 DNS 记录设有时效性,超时后缓存失效,需重新查询。

4. 基于UDP 还是TCP?

UDP 在过去的几十年中其实都是 DNS 主要使用的协议,作为互联网的标准,目前的绝大多数 DNS 请求和响应都会使用 UDP 协议进行数据的传输,我们通过抓包工具就能轻松获得以 UDP 协议为载体的 DNS 请求和响应。

抓去 baidu.com 的DNS解析发现协议是UDP
在这里插入图片描述

但其实 DNS 使用了 UDP 来获取域名对应的 IP 地址,这个观点虽然没错,抓包抓出来也确实是这样,但是还是有一些片面,这仅仅只是验证了这种case是UDP,更加准确的说法其实是 DNS 查询在刚设计时主要使用 UDP 协议进行通信,但 TCP 也是在 DNS 的演进和发展中被加入到规范的:

  1. DNS 在设计之初就在区域传输中引入了 TCP 协议,在查询中使用 UDP 协议
  2. 当 DNS 超过了 512 字节的限制,如果 DNS 查询被截断,应该使用 TCP 协议进行重试
  3. 随后引入的 EDNS 机制可以将 UDP 的数据提升到 4096 字节的,但是由于 MTU 的限制导致的数据分片以及丢失,使得这一特性不够可靠
  4. 重新规定了 DNS 应该同时支持 UDP 和 TCP 协议,TCP 协议也不再只是重试时的选择;

在这里插入图片描述

参考
[1] https://draveness.me/whys-the-design-dns-udp-tcp/
[2] https://chat.deepseek.com/
[3] https://datatracker.ietf.org/doc/html/rfc7766

相关文章:

  • flowable学习
  • 老游戏回顾:GOWpsp
  • 第33课 绘制原理图——放置文本框
  • CAS单点登录(第7版)22.中断通知
  • ES6模块化和CommonJs模块化区别
  • hive高频写入小数据,导致hdfs小文件过多,出现查询效率很低的情况
  • Deesek:新一代数据处理与分析框架实战指南
  • ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
  • Banana Pi OpenWRT One 官方路由器的第一印象
  • Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
  • 【鸿蒙HarmonyOS Next实战开发】lottie动画库
  • SQLServer联合winform 制作一个简单注册登录系统
  • sap服务器调用DeepSeek参数文件方法
  • MATLAB图像处理:图像特征概念及提取方法HOG、SIFT
  • 124. 二叉树中的最大路径和
  • 均匀面阵抗干扰算法原理及MATLAB仿真
  • 4、C#基于.net framework的应用开发实战编程 - 测试(四、二) - 编程手把手系列文章...
  • vue error Expected indentation of 2 spaces but found 4 indent
  • 基于STM32的智能鱼塘养殖监控系统
  • 铁塔电单车协议对接电单车TCP json协议对接成熟充电桩系统搭建低速充电桩TCP 接口规范
  • 美国关税压力下,日本经济一年来首次萎缩
  • 标普500指数连涨四日,大型科技股多数下跌
  • 马上评|清理“滥竽充数者”,为医者正名
  • 手机表面细菌菌落总数可能比马桶高10倍,医生详解如何洗手
  • 女孩患异食癖爱吃头发,一年后腹痛入院体内惊现“头发巨石”
  • 微软宣布全球裁员约3%:涉及约6000人,侧重经理层