DNS 是什么

DNS(Domain Name System,域名系统)是互联网的"电话簿",负责把人类易记的域名(如 www.example.com)翻译成机器使用的 IP 地址(如 93.184.216.34)。

核心价值

  • 免去记忆一长串 IP 数字
  • 服务 IP 变更时,域名不变,用户无感知(解耦
  • 支持负载均衡、CDN 调度等高级能力(同一域名返回不同 IP)

DNS 是一个分布式、层级化的数据库系统,不是一台服务器 —— 全球由成千上万的 DNS 服务器协作完成解析。它工作在 UDP/TCP 53 端口(通常 UDP 优先,大报文或区域传送用 TCP)。

域名空间与层级结构

域名采用树形层级结构,从根开始逐级向下:

        .                    ← 根域(root)
        |
   ┌────┼────┐
  com   net   org   cn      ← 顶级域(TLD,Top-Level Domain)
   |
 example                    ← 二级域(注册的域名)
   |
  www  mail  blog           ← 子域(subdomain,可任意划分)

关键概念

  • FQDN(完全限定域名):从叶子到根的完整域名,如 www.example.com.(末尾有个点表示根)。
  • 根域:以 . 表示,全球 13 组根服务器(a-m.root-servers.net,实际是任播多实例)。
  • 顶级域:通用顶级域(com/net/org)、国家顶级域(cn/jp/uk)等。
  • 权威性:谁拥有某域名的权威数据,谁就能"拍板"回答该域名的解析。

域 vs 区的区别:一个域可以再划分为多个"区(zone)"管理,每个区有独立的权威服务器。例如 example.com 域可以拆成 example.comsub.example.com 两个 zone 分别管理。

DNS 记录类型

记录类型全称作用示例
AAddress域名 → IPv4 地址www IN A 93.184.216.34
AAAAAddress (v6)域名 → IPv6 地址www IN AAAA 2606:2800:220:1::1
CNAMECanonical Name别名指向另一个域名blog IN CNAME www.example.com
MXMail Exchange邮件服务器(带优先级)IN MX 10 mail.example.com
NSName Server该域名的权威服务器example.com IN NS ns1.example.com
SOAStart of Authority区数据的起始/主控信息见下方详解
TXTText任意文本(SPF/DKIM/域名验证)IN TXT "v=spf1 include:_spf.google.com ~all"
SRVService服务定位(_service._proto)_sip._tcp IN SRV 10 60 5060 sip.example.com
PTRPointer反向:IP → 域名34.216.184.93.in-addr.arpa IN PTR www.example.com
CAACA Authorization限制可为该域签发证书的 CAIN CAA 0 issue "letsencrypt.org"

SOA 记录详解(每个区第一条记录):

example.com.  IN  SOA  ns1.example.com.  admin.example.com. (
                2026082501   ; Serial 序列号:每次修改必须增大
                7200         ; Refresh  从服务器刷新间隔
                3600         ; Retry    刷新失败重试间隔
                1209600      ; Expire   从服务器数据过期时间
                300 )        ; Negative TTL 否定缓存时间

CNAME 注意事项:CNAME 不能与其他记录共存于同一名字(CNAME 目标不能是 CNAME 链环);MX/NS 等记录不能指向 CNAME。

域名解析流程

浏览器输入 www.example.com 后:

用户/浏览器
   │ ① 查询缓存(浏览器→操作系统)
   ▼
本地递归解析器(如运营商 DNS 8.8.8.8、路由器 DNS)
   │ ② 递归解析(代表用户一路追问)
   ├──▶ 根服务器:问 .com 的权威是谁?  ← 迭代
   ├──▶ .com 顶级域服务器:问 example.com 的权威是谁?  ← 迭代
   ├──▶ example.com 权威服务器:www 的 A 记录是什么?  ← 迭代
   │
   ▼ ③ 拿到答案,缓存并返回
用户得到 IP,建立连接

两种查询方式

  • 递归查询(Recursive):解析器替客户端"跑腿",客户端只问一次,拿到最终结果。解析器通常开启递归。
  • 迭代查询(Iterative):服务器不替客户端跑腿,而是"指路"(告诉你下一步问谁),客户端自己逐级追问。权威服务器只做迭代。

权威 vs 递归

  • 权威服务器(Authoritative):持有自己管理区的真实数据,直接回答;不开递归。
  • 递归解析器(Recursive Resolver):替用户递归查询并缓存结果。

DNS 服务器类型

类型职责典型部署
根服务器指点顶级域权威全球 13 组(任播)
顶级域服务器管理 TLD 下的注册数据Verisign(com/net)等
权威服务器回答自己 zone 的解析企业自建 BIND、云 DNS(DNSPod/阿里云)
递归解析器替用户递归并缓存运营商 DNS、8.8.8.8、114.114.114.114
转发器(Forwarder)自己不递归,把请求转发给上游内网 DNS、家庭路由器
缓存服务器只缓存不权威内网加速

主从结构:权威区通常有主服务器(Master,可写)与从服务器(Slave,只读副本,通过区域传送同步)—— 保证高可用。

DNS 协议基础

  • 传输:默认 UDP 53;响应超过 512 字节(DNS over UDP 上限)时返回 TC 标志,客户端改用 TCP 53 重试;区域传送(AXFR/IXFR)用 TCP。
  • 报文结构:固定 12 字节头部(ID、标志、四段计数)+ 问题段 + 回答段 + 授权段 + 附加段。
  • 常用标志:QR(查询/响应)、AA(权威回答)、TC(截断)、RD(期望递归)、RA(允许递归)、RCODE(返回码)。
  • 返回码(RCODE):- NOERROR 正常- NXDOMAIN 域名不存在(负应答)- SERVFAIL 服务器故障/无法回答- REFUSED 拒绝(策略限制,如不允许递归)
  • DoH/DoT(DNS over HTTPS/TLS):加密 DNS,防窃听与篡改,BIND 9.18+ 支持 DoT。

TTL 与缓存

TTL(Time To Live):记录被缓存的时间(秒)。每条记录/每个区都有 TTL。

  • 作用:减少上游查询压力、加速解析。
  • 代价:TTL 太长 → 记录变更后全网生效慢;太短 → 查询频繁。
  • 典型值:A 记录 300~86400s;SOA 与 NS 建议 86400(1 天)及以上;变更前先调低 TTL 可加速生效。
  • 缓存层级:浏览器 → 操作系统 → 递归解析器,每层都按 TTL 缓存。
  • 负缓存:NXDOMAIN 结果也会被缓存(时长由 SOA 的 Negative TTL 控制),这就是"新域名/新记录迟迟查不到"的常见原因。

诊断工具

dig(最强大,BIND 自带)

dig www.example.com              # 默认查询 A 记录
dig @8.8.8.8 www.example.com     # 指定 DNS 服务器
dig www.example.com +trace       # 从根开始逐级追踪
dig example.com SOA              # 查 SOA
dig -x 93.184.216.34             # 反向查询
dig www.example.com +short       # 只输出结果
dig @ns1.example.com example.com AXFR   # 区域传送测试

nslookup(Windows/通用)

nslookup www.example.com
nslookup -type=MX example.com
nslookup -query=NS example.com 8.8.8.8

host(简洁)

host www.example.com
host -t TXT example.com

常见排查套路

  1. 本地解析 vs dig @8.8.8.8:区分是本地缓存/递归问题还是权威问题
  2. +trace:定位是哪一级(根/TLD/权威)出的问题
  3. 对比多个公共 DNS:判断是否全局生效还是局部缓存
  4. 看 TTL:确认是否还在缓存期

常见问题与排障思路

现象可能原因处理方向
解析返回 NXDOMAIN记录未添加/未生效、负缓存查权威服务器记录、清缓存
解析很慢(首次)递归链路长、上游慢检查转发器、开启缓存、缩短链路
修改记录不生效TTL 缓存未过期改前调低 TTL、等 TTL 过期
SERVFAIL权威服务器故障、DNSSEC 校验失败查权威状态、dig +dnssec 看校验链
REFUSED服务器策略拒绝(递归限制)检查 allow-query/allow-recursion 配置
内网域名解析到外网 IP视图(view)/ split-horizon 配置问题检查 BIND view 匹配规则
部分地区解析异常缓存不一致、主从未同步检查从服务器同步状态、Serial 对比
被投毒/劫持明文 DNS 被中间人篡改启用 DNSSEC、DoH/DoT、可信上游

下一教程:《BIND 服务器详解》—— 从安装配置、zone 文件、日志到安全加固的完整实战。

第 1 / 9 节