DNS技术详解

DNS 技术详解

目录

  1. [DNS 是什么](#DNS 是什么)
  2. [为什么需要 DNS](#为什么需要 DNS)
  3. [DNS 基本工作原理](#DNS 基本工作原理)
  4. [DNS 层次结构](#DNS 层次结构)
  5. [NS 记录与根域名服务器的区别](#NS 记录与根域名服务器的区别)
  6. 根域名服务器的作用与访问时机
  7. [Resolver 与 NS 的角色分工](#Resolver 与 NS 的角色分工)
  8. 递归解析与迭代解析
  9. 国内递归解析器相关监管
  10. [常见 DNS 记录类型](#常见 DNS 记录类型)
  11. [DNS 报文格式与协议细节](#DNS 报文格式与协议细节)
  12. [DNS 解析完整流程(含缓存)](#DNS 解析完整流程(含缓存))
  13. 常见问题与排查
  14. 优化策略
  15. 安全与演进
  16. 常用命令速查
  17. 小结

一、DNS 是什么

DNS(Domain Name System,域名系统) 是互联网的一项基础服务,用来把人类易记的域名 (如 www.example.com)转换成机器可识别的 IP 地址 (如 93.184.216.34)。它相当于互联网的「电话簿」。

在协议栈中的位置 :DNS 通常运行在 UDP 53 端口(也可用 TCP 53,如响应超过 512 字节或区域传输时)。
应用层
DNS 客户端/服务
UDP 53 / TCP 53
IP


二、为什么需要 DNS

原因 说明
IP 难记 域名更直观,如 example.com 比 93.184.216.34 易记。
底层依赖 IP 网络通信最终需要 IP,必须有「域名 → IP」的映射机制。
灵活管理 换服务器时只改 DNS 记录即可,无需通知所有用户。
负载与高可用 同一域名可对应多条 A 记录(多 IP),实现轮询或就近调度。

三、DNS 基本工作原理

  1. 客户端查询 :浏览器访问 www.example.com 时,先查本地缓存(操作系统、浏览器)。
  2. 递归解析 :若本地没有,向配置的递归 DNS 服务器(如运营商或公共 DNS:8.8.8.8、1.1.1.1)发起请求。
  3. 迭代查询 :递归服务器依次向 根 DNS → 顶级域(TLD,如 .com)→ 权威 DNS 服务器查询,最终获得 IP。
  4. 返回结果:递归服务器将 IP 返回给客户端,并缓存一段时间(TTL)。

查询路径概览
权威NS TLD服务器 根服务器 递归Resolver 客户端 权威NS TLD服务器 根服务器 递归Resolver 客户端 查询 www.example.com .com 的 TLD 是谁 TLD 列表 example.com 的权威是谁 NS 记录 www.example.com 的 IP A 记录 返回 IP 并缓存


四、DNS 层次结构

层级 说明 示例
根域名服务器(Root) 全球 13 组标识符,背后有多台镜像,处理顶级域查询。 a.root-servers.net ~ m.root-servers.net
顶级域服务器(TLD) 管理某类顶级域。 .com、.cn、.org 等
权威域名服务器 管理具体域名的记录。 example.com 的 A、MX、NS 等

域名结构(层次化树,从右到左):

text 复制代码
.                    ← 根域
└── com             ← 顶级域(TLD)
    └── example     ← 二级域
        └── www     ← 子域

层次与查询流向
迭代链
递归层
客户端
递归查询
返回 IP
浏览器/应用
递归 Resolver
根服务器
TLD 服务器
权威 NS


五、NS 记录与根域名服务器的区别

5.1 易混淆点

  • NS(Name Server)记录 :是某个域名在权威 DNS 上的配置,用来告诉查询者「这个域名由哪些 DNS 服务器负责解析」。例如 example.com 的 NS 可能是 ns1.example.comns2.example.com,数量由域名管理者决定,可多台、多地分布。
  • 根域名服务器(Root Server) :全球只有 13 个不同的根服务器标识符a.root-servers.netm.root-servers.net),每个背后有多台物理服务器(镜像),总数几百台;只负责解析顶级域(如 .com、.cn),不直接解析普通网站域名。

5.2 对比小结

项目 NS 记录 根域名服务器
是什么 域名的权威 DNS 服务器列表(配置项) 全球固定的根层 DNS 服务器
数量 每个域名可有多个 NS(推荐至少 2 个) 13 组标识符,背后多台镜像
作用 回答「该域名的 A、MX 等记录是什么」 回答「某 TLD(如 .com)的服务器是谁」

六、根域名服务器的作用与访问时机

6.1 根服务器做什么

根域名服务器的作用是:告诉递归 DNS 服务器「某顶级域(TLD)的权威服务器在哪里」。它只管第一层------顶级域,如 .com、.cn、.org。

示例 :查 www.example.com 时,递归服务器不知道 example.com 在哪,就先问根:「.com 的权威服务器是谁?」根回答:「去问这些 .com 的 TLD 服务器(如 a.gtld-servers.net)。」

6.2 每次 DNS 请求都会发给根吗?

不会。

  • 递归 DNS 有缓存:若之前已查过 .com 的 TLD 服务器地址,会直接用缓存,不再问根;TTL 没过期就不会重新查根。
  • 只有第一次或缓存失效时才需要根:第一次查某个新顶级域时才会问根;查已知顶级域时,直接跳到 TLD 服务器。

6.3 完整查询流程(无缓存时,以 www.example.com 为例)

步骤 谁 → 谁 内容
1 递归服务器 → 根服务器 「.com 的 TLD 服务器是谁?」
2 根服务器 → 递归服务器 「这是 .com 的 TLD 服务器列表。」
3 递归服务器 → TLD 服务器 example.com 的权威服务器是谁?」
4 TLD 服务器 → 递归服务器 「这是 example.com 的 NS 记录。」
5 递归服务器 → 权威服务器 www.example.com 的 IP 是多少?」
6 权威服务器 → 递归服务器 「IP 是 93.184.216.34。」
7 递归服务器 → 客户端 返回 IP,并缓存结果。

下次再查 www.example.com(在 TTL 内),递归服务器直接从缓存返回 IP,不会再去根服务器。


七、Resolver 与 NS 的角色分工

7.1 角色

角色 说明
NS(Name Server) 权威 DNS 服务器,保存该域名的各种记录(A、AAAA、MX 等)。只负责回答「这个域名对应的数据是什么」,不负责替用户跑完整查询链。
Resolver(递归 DNS / 解析器) 用户设备配置的 DNS(如运营商 DNS、8.8.8.8、1.1.1.1)。替用户完成完整查询:根 → TLD → 权威 NS,并把最终结果返回给用户。

7.2 请求流向

  1. 你的设备 → 只把请求发给 Resolver(如 8.8.8.8),不会直接发给域名的 NS。
  2. Resolver 先查自己的缓存;若无缓存或已过期,再发起递归/迭代查询(根 → TLD → 权威 NS)。
  3. Resolver 把结果返回给设备,并缓存。

7.3 这样设计的原因

  • 用户侧简化:只需配置一个 Resolver 地址。
  • 性能:Resolver 缓存大量记录,减少重复查询。
  • 安全与管理:Resolver 可做过滤、拦截、加密(DoH/DoT)等。

八、递归解析与迭代解析

概念 说明
递归解析(Recursive) Resolver 代表客户端,自己完成从根到权威的整条查询链,把最终结果返回给客户端。
迭代解析(Iterative) 服务器收到请求后若不知道答案,只返回「下一个该问谁」的地址,由请求方自己去问。根服务器和 TLD 服务器通常只做迭代。

关系 :对用户来说,用的是递归服务 (只问 Resolver);Resolver 在后台对根、TLD、权威发起的是迭代查询。监管关注的是「是否对外提供开放的公共递归解析服务」,而不是服务器内部用迭代还是递归算法。

递归 vs 迭代示意
迭代模式
问根
返回 TLD 地址
问 TLD
返回权威地址
问权威
返回 IP
客户端

TLD
权威
递归模式
一次请求
内部多轮
最终结果
客户端
Resolver


九、国内递归解析器相关监管

9.1 禁止:对外提供公共递归解析服务

  • 在公网开放 53 端口、允许任意用户进行递归查询的 DNS 服务,在国内不被允许
  • 监管要求:根据工信部规定,只有获得相应许可的机构才能运营面向公众的递归解析系统。
  • 行业标准:如《域名递归解析服务管理系统技术要求》(YD/T 6169‑2024)等。

核心:不能私自搭建对全网开放的公共 Resolver。

9.2 允许:内部使用与权威解析

场景 说明
内部递归解析器 在企业、校园或家庭内网部署 DNS,仅为内网设备提供解析,53 端口不对外。合规且常见。
权威 DNS 服务器 只管理自己的域名,发布 A、MX 等记录,属于「权威解析」而非「递归解析」。可对外提供解析服务,需遵守域名注册与备案规定。

9.3 实践建议

  • 个人/家庭:直接使用运营商、阿里云、腾讯云或 114.114.114.114 等公共 DNS 即可。
  • 企业内网 :可在内网部署 DNS 为内部提供递归解析,并确保 53 端口不对公网开放 ;对外提供域名解析应使用权威 DNS,并按规定备案。
  • 对外提供公共 DNS 服务:属增值电信业务,需向工信部/通管局申请相应牌照并满足相关标准。

十、常见 DNS 记录类型

10.1 类型速查表

记录类型 数值 说明
A 1 域名 → IPv4 地址(32 位)
AAAA 28 域名 → IPv6 地址(128 位)
CNAME 5 别名,指向另一个域名(RDATA 为域名)
MX 15 邮件服务器地址(优先级 + 域名)
NS 2 指定该域名的权威 DNS 服务器
TXT 16 文本信息,常用于验证、SPF、DKIM 等
PTR 12 反向解析,IP → 域名(多用于 in-addr.arpa)
SOA 6 授权起始,域名的权威信息(序列号、刷新/重试/过期、MNAME 等)
SRV 33 服务记录(优先级、权重、端口、目标域名)

10.2 常见 QTYPE 与 QCLASS 数值(协议中用)

名称 数值 说明
A 1 IPv4 地址
NS 2 名称服务器
CNAME 5 规范名
SOA 6 授权起始
PTR 12 指针
MX 15 邮件交换
TXT 16 文本
AAAA 28 IPv6 地址
SRV 33 服务
CLASS IN 1 Internet
CLASS ANY 255 任意类(查询时表示「所有」)

十一、DNS 报文格式与协议细节

11.1 整体结构

DNS 报文(基于 RFC 1035)分为五部分,请求与响应使用同一格式,通过 Header 的 QR 区分:

text 复制代码
+---------------------+
|      Header         |  固定 12 字节
+---------------------+
|      Question       |  查询:QNAME + QTYPE + QCLASS(可多条)
+---------------------+
|      Answer         |  回答的资源记录(RR)
+---------------------+
|      Authority      |  权威 RR(如 NS 记录)
+---------------------+
|     Additional      |  附加 RR(如 A 记录伴随 NS)
+---------------------+

传输 :默认 UDP 53 ;当响应超过 512 字节 或需要区域传输(AXFR)时使用 TCP 53 。UDP 响应若被截断会置 TC=1,客户端应改用 TCP 重试。

11.2 Header(固定 12 字节)

字节与比特布局(大端序):

text 复制代码
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                      ID                       |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    QDCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ANCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    NSCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|                    ARCOUNT                    |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
字段 长度(bit) 说明
ID 16 事务 ID,请求与响应一致,用于匹配
QR 1 0=查询,1=响应
Opcode 4 0=标准查询,1=反向,2=服务器状态
AA 1 权威回答(仅响应中有效)
TC 1 截断:响应超 512 字节时置 1,建议用 TCP 重试
RD 1 期望递归(客户端设 1 表示希望 Resolver 递归查)
RA 1 递归可用(响应中表示服务器支持递归)
Z 3 保留,须为 0
RCODE 4 响应码,见下表
QDCOUNT 16 Question 条数
ANCOUNT 16 Answer 条数
NSCOUNT 16 Authority 条数
ARCOUNT 16 Additional 条数

RCODE 常用值

RCODE 含义
NOERROR 0 无错误
FORMERR 1 格式错误
SERVFAIL 2 服务器失败
NXDOMAIN 3 域名不存在
NOTIMP 4 未实现
REFUSED 5 拒绝

11.3 Question 部分

每条 Question 包含:

字段 长度 说明
QNAME 可变 域名,见下方「域名编码」
QTYPE 16 bit 查询类型(1=A, 28=AAAA, 15=MX...)
QCLASS 16 bit 查询类(1=IN, 255=ANY)

域名编码(标签序列)

  • 域名按标签 分割(如 wwwexamplecom)。
  • 每个标签前有 1 字节 表示该标签长度(0--63),后跟标签字符(ASCII)。
  • 0 字节 结束(表示根,即空标签)。

示例www.example.com 的编码(十六进制):

text 复制代码
03 77 77 77  07 65 78 61 6d 70 6c 65  03 63 6f 6d  00
│  w  w  w   │  e  x  a  m  p  l  e   │  c  o  m  结束
长度 3       长度 7                    长度 3

即:[3]www[7]example[3]com[0]

压缩指针(用于响应中的 NAME 等)

  • 为节省空间,响应里可引用前面已出现的域名。
  • 指针 :2 字节,高 2 位为 11 ,低 14 位为从报文起始处的字节偏移(指向该位置之前的域名或子串)。
  • 例如 0xC0 0x0C:表示从偏移 12 字节处开始解析域名(通常指向 Question 的 QNAME)。

11.4 Resource Record(RR)格式

Answer、Authority、Additional 中的每条记录格式一致:

text 复制代码
NAME        (可变)  域名,可用压缩指针
TYPE        (16 bit) 记录类型
CLASS       (16 bit) 通常 1 = IN
TTL         (32 bit) 生存时间(秒)
RDLENGTH    (16 bit) RDATA 的字节数
RDATA       (可变)   根据 TYPE 解析

常见 TYPE 的 RDATA 格式

TYPE RDATA 含义
A 4 字节 IPv4 地址
AAAA 16 字节 IPv6 地址
CNAME 域名(标签序列或压缩指针)
NS 域名(该域的权威服务器)
MX 2 字节优先级 + 域名(邮件服务器)
TXT 每段前 1 字节长度 + 文本(可多段)
PTR 域名(反向解析结果)
SOA MNAME(主 NS)+ RNAME(管理员邮箱)+ 序列号 + 刷新/重试/过期/最小 TTL(各 32 bit)

11.5 查询与响应示例(概念)

查询报文(仅 Header + Question):

text 复制代码
Header:
  ID=0x1234, QR=0, Opcode=0, RD=1, RA=0, RCODE=0
  QDCOUNT=1, ANCOUNT=0, NSCOUNT=0, ARCOUNT=0
Question:
  QNAME=www.example.com (03 77 77 77 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00)
  QTYPE=1 (A), QCLASS=1 (IN)

响应报文(含 Answer):

text 复制代码
Header:
  ID=0x1234, QR=1, AA=1, RA=1, RCODE=0
  QDCOUNT=1, ANCOUNT=1, NSCOUNT=0, ARCOUNT=0
Question: (同上)
Answer:
  NAME=www.example.com (或压缩指针 0xC0 0x0C)
  TYPE=1 (A), CLASS=1 (IN), TTL=300
  RDLENGTH=4, RDATA=93.184.216.34 (5D B8 D8 22)

11.6 协议要点小结

项目 说明
字节序 多字节字段均为大端序(网络字节序)
UDP 长度 默认 UDP 响应 ≤ 512 字节,超则 TC=1,改用 TCP
端口 53(UDP/TCP)
规范 RFC 1034(概念)、RFC 1035(报文格式)

十二、DNS 解析完整流程(含缓存)

  1. 本地缓存 :浏览器缓存 → 操作系统缓存 → hosts 文件。
  2. 本地 DNS Resolver :若无缓存,向配置的 Resolver 发起递归查询
  3. 迭代过程(由 Resolver 完成):Resolver → 根(取 TLD 地址)→ TLD(取权威 NS)→ 权威(取最终 IP)。
  4. 返回与缓存:Resolver 将 IP 返回给用户,并按 TTL 缓存。

注意:用户只和 Resolver 交互,不直接访问根或权威服务器。

带缓存的解析流程
命中
未命中
命中
未命中
命中
未命中
命中
未命中
请求域名
浏览器缓存?
返回 IP
系统缓存?
hosts 文件?
请求 Resolver
Resolver 缓存?
根 → TLD → 权威
Resolver 缓存并返回


十三、常见问题与排查

问题 现象 排查建议
解析延迟/超时 打开网页前半段卡顿 dig www.xxx.com @不同DNS 对比时延;尝试公共 DNS(如 223.5.5.5、119.29.29.29)。
解析失败/域名不存在 无法打开或报错 检查域名配置、NS 记录、权威服务器是否正常。
域名劫持/污染 访问正常域名跳到异常站点 nslookup/dig 对比运营商 DNS 与公共 DNS 返回的 IP 是否一致。
缓存异常 修改 A 记录后部分地区仍为旧 IP 各地递归服务器 TTL 未过期仍用旧记录;可提前降低 TTL 或等待过期。

十四、优化策略

策略 说明
合理配置 DNS 选择稳定、快速、安全的公共 DNS 或运营商 DNS。
TTL 策略 主站/重要服务:TTL 适中(如 300--600s);静态资源/大促前可先调高 TTL,活动后再改回。
减少 CNAME 链 避免 A→B→C→... 过长嵌套;重要入口尽量用 A/AAAA 直指目标。
结合 CDN 利用 CDN 的分布式 DNS 节点做就近访问与智能调度;配合预热、刷新 DNS 缓存、调度策略使用。

常见公共 DNS 举例(仅供参考,以实际可用为准):

服务商 IPv4 说明
阿里 223.5.5.5 / 223.6.6.6 国内常用
114 114.114.114.114 国内常用
腾讯 119.29.29.29 国内常用
Google 8.8.8.8 / 8.8.4.4 国际
Cloudflare 1.1.1.1 / 1.0.0.1 国际,支持 DoH

十五、安全与演进

方向 说明
传统 DNS 基于 UDP 53 的查询/响应为明文,易被窃听、劫持、篡改。
DoH(DNS over HTTPS) DNS 查询通过 HTTPS 发送(如 443 端口),与网页流量混合,可防运营商窥探。
DoT(DNS over TLS) DNS 查询走 TLS 加密(通常 853 端口),端到端加密。
DNSSEC 对 DNS 记录做数字签名,验证应答未被篡改(不加密,只保证真实性)。
趋势 更多浏览器与应用内置加密 DNS;递归 DNS 作为网络入口的安全节点越来越重要。

十六、常用命令速查

目的 命令示例
查询 A 记录 dig example.comdig example.com A
指定 DNS 服务器 dig @8.8.8.8 example.com
仅简短输出 dig +short example.com
查询 MX dig example.com MX
查询 NS dig example.com NS
反向解析 dig -x 93.184.216.34(即 34.216.184.93.in-addr.arpa PTR)
跟踪解析过程 dig +trace example.com(依次问根、TLD、权威)
nslookup 查询 nslookup example.comnslookup example.com 8.8.8.8
清除本地缓存(macOS) sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
清除本地缓存(Windows) ipconfig /flushdns

dig 输出关键字段QUESTION(你的查询)、ANSWER(解析结果)、Authority(NS 等)、Query time(解析耗时)。


十七、小结

  • DNS 是互联网的「电话簿」,核心是域名 → IP 的映射 ;通常走 UDP/TCP 53
  • 解析涉及本地缓存(浏览器→系统→hosts)、递归 Resolver、根/TLD/权威;用户只与 Resolver 通信。
  • NS 记录 是域名的权威服务器配置;根服务器仅负责 TLD 指引,且多数请求因缓存不会到达根。
  • 报文Header(12 字节) + Question + Answer + Authority + Additional;域名用标签序列 (长度+标签+0)编码,响应中可用压缩指针;RCODE、QTYPE、RDATA 格式依 RFC 1035。
  • 常见问题多与缓存、劫持、配置错误有关;可通过更换 DNS、调整 TTL、减少 CNAME、结合 CDN 优化。
  • 安全方向正从明文 DNS 向 DoH / DoT / DNSSEC 演进。
相关推荐
yyuuuzz5 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
红尘散仙5 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记7 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆7 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪7 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6168 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364578 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao8 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒9 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
日取其半万世不竭9 小时前
iftop、nethogs 和 nload:Linux 服务器网络流量实时监控工具介绍
linux·运维·服务器