DNS — 域名系统
互联网的电话簿:应用层,UDP/TCP 53,由 RFC 1034/1035 定义,把域名解析为 IP 地址
Table of Contents
1. 协议定位
| 项目 | 信息 |
|---|---|
| 所属层 | 应用层(Application Layer) |
| 英文全称 | Domain Name System(域名系统) |
| 主要 RFC | RFC 1034(概念与设施)、RFC 1035(实现与规范);RFC 2181(澄清);RFC 6891(EDNS(0));RFC 4033–4035(DNSSEC);RFC 7858(DoT);RFC 8484(DoH);RFC 5936(AXFR);RFC 1996(NOTIFY);RFC 2136(动态更新) |
| 端口 | UDP 53(常规查询,主力)、TCP 53(响应超长被截断后重试、区域传送 AXFR/IXFR);DoT 用 TCP 853,DoH 用 TCP 443 |
| 封装于 | 通常 UDP(无连接、低开销、单包一问一答);超过限制则回退 TCP |
| 典型应用 | 浏览器访问网站前的域名解析、邮件投递查 MX、服务发现(SRV)、CDN 调度、域名验证(TXT) |
2. 一句话理解
DNS 是一棵全球分布式的倒树:从根 . 出发,一级一级问下去,最终由权威服务器回答"这个名字对应哪个地址",而各级缓存让绝大多数查询根本走不到根。
生活化类比
DNS 就像一本全球通讯录,但你不是自己翻完,而是把名字交给一个"万事通"朋友(本地 DNS / 递归服务器),他替你一路打电话问到知道答案的人那里。
它也更像问路:你只问一次路口的警察"XX 路怎么走",警察自己会一路问下去,最后只把"往左拐第三个口"这一个结论告诉你——你根本不知道中间问了几个人。
3. 它解决什么问题
为什么没有它,网络就"缺了一块":互联网上每台服务器只认 IP 地址,可人类一个都记不住;没有 DNS,你每访问一个网站都得先背一串数字,且一旦对方换机房换 IP,所有旧地址瞬间作废。它把"名字 ↔ 地址"的翻译这件事,变成全网可扩展、可分散管理的基础设施。
- 人记名字,机器用地址:人类记不住
142.250.72.14,更记不住 IPv6 的2404:6800:4008:c07::71;DNS 提供了名字到地址的映射。 - 地址可变而名字稳定:服务器换 IP、切机房、上 CDN,只需改 DNS 记录,用户侧无感知。
- 去中心化管理:早期用一个
HOSTS.TXT文件全网同步,无法扩展。DNS 用**层次化命名 + 授权(Delegation)**把管理权分散到各级,每个组织只维护自己的区域(Zone)。 - 不止解析 IP:MX 决定邮件投给谁,SRV 做服务发现,TXT 承载 SPF/DKIM/DMARC 与域名所有权验证,CNAME 支撑 CDN 调度,PTR 做反向解析。
4. 核心特征
- 【层次化命名空间】 层次化命名空间:
www.example.com.从右往左依次是 根.→ 顶级域com→ 二级域example→ 主机www;末尾那个点是根,通常被省略。 - 【分布式授权】 分布式数据库 + 授权机制:每一级只知道"下一级由谁负责"(NS 记录),逐级下钻。
- 【递归+迭代双模式】 递归 + 迭代两种查询模式:客户端向本地递归服务器发递归查询(“你帮我查到底”),递归服务器向各级权威发迭代查询(“你只需告诉我下一步问谁”)。
- 【多级缓存与 TTL】 多级缓存与 TTL:浏览器缓存 → 操作系统缓存 → 递归服务器缓存 → 权威。TTL 决定缓存时长,是"改了解析还没生效"的根源。
- 【默认明文不安全】 默认无认证无加密:报文明文、UDP 易伪造,因此存在缓存投毒与 DNS 劫持;DNSSEC 解决真实性,DoT/DoH 解决机密性,二者互补而非替代。
- 【UDP 512 字节上限】 响应超 512 字节会被截断:置 TC 标志后客户端改用 TCP 重查;EDNS(0)(RFC 6891)可协商更大的 UDP 报文(常见 1232/4096 字节)。
5. 与其他协议关系
| 相关协议 | 关系 |
|---|---|
| UDP | DNS 的默认承载:无连接、一问一答、开销小、延迟低 |
| TCP | 响应被截断(TC=1)、区域传送(AXFR/IXFR)、DoT 时使用 |
| HTTP/HTTPS | 上层依赖者;DoH 反过来把 DNS 封装进 HTTPS |
| SMTP | 依赖 DNS 的 MX 记录决定邮件投给哪台 MTA;依赖 TXT 做 SPF/DKIM/DMARC |
| DHCP | 通过 Option 6 下发 DNS 服务器地址、Option 15 下发域名后缀 |
| ICMP | ping/traceroute 显示主机名时会做反向 PTR 解析 |
| TLS | 证书签发(ACME DNS-01 挑战)与 SNI 都与域名体系强相关 |
6. 本目录学习路线
- 01-原理与报文 — 命名空间与授权、递归/迭代全过程、DNS 报文头部逐字段、记录类型详解、缓存与 TTL、DNSSEC 原理、解析时序图。
- 02-实战与排错 — Wireshark 过滤、
dig/nslookup/ipconfig/resolvectl实操、解析失败与 TTL 未生效排查、污染与劫持识别、协议对比与面试题。
学习建议:先用
dig +trace www.example.com亲眼看一遍"根 → TLD → 权威"的完整下钻过程,这一条命令能把 DNS 的层次结构讲得比任何文字都清楚。
初学者最常踩的坑:一是把
NXDOMAIN(域名根本不存在)和NOERROR但ANSWER=0(域名存在、只是没你要的那种记录,比如只有 A 没有 AAAA)混为一谈,二者排查路径完全不同;二是以为"改了 DNS 记录立刻生效",其实各级缓存按旧记录的剩余 TTL 生效,没到时间就是不变——改之前得先降 TTL。三是以为 DNSSEC 等于加密,其实它只验证答案没被篡改,查询内容照样明文可见,机密性得靠 DoT/DoH。