网络技术17-DNS协议详解——互联网的“电话簿系统“

发布时间:2026/6/5 12:23:59

网络技术17-DNS协议详解——互联网的“电话簿系统“ ️ 网络协议系列第17篇 | ⏱️ 阅读时间约15分钟CSDN多平台一键发布功能开通链接https://mp.csdn.net/vip?utm_sourceweitingfu想象一下这个场景你想给朋友打电话但你只记得他的名字张三却不知道他的电话号码。这时候你会怎么办翻通讯录啊在互联网世界里**DNSDomain Name System域名系统**就是干这个活的。它就像一本巨大的电话簿负责把人类能记住的域名比如 www.example.com翻译成计算机能理解的 IP 地址比如 192.168.1.1。没有 DNS你得记住每个网站的一串数字才能上网——相信我你不会想活在那个世界里的。一、DNS分层架构从总机到分机的查询之旅DNS 不是单一的服务器而是一个分布式的层级系统。就像查电话簿一样你不会直接去找全球电话号码大全而是分层查询。1.1 四层架构图解┌─────────────────────────────────────────────────────────────────┐ │ DNS 分层架构示意图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────┐ │ │ │ 根域名服务器 │ ← 全球13组管理所有顶级域像电话总局 │ │ │ (Root DNS) │ │ │ └──────┬──────┘ │ │ │ 我只知道.com、.org、.cn 在哪别的别问我 │ │ ▼ │ │ ┌─────────────┐ │ │ │ 顶级域服务器 │ ← 管理各顶级域像省级电话局 │ │ │ (TLD DNS) │ │ │ └──────┬──────┘ │ │ │ example.com去那台服务器问 │ │ ▼ │ │ ┌─────────────┐ │ │ │ 权威域名服务器 │ ← 存储具体域名记录像本地电话局 │ │ │(Authoritative)│ │ │ └──────┬──────┘ │ │ │ www.example.com 的 IP 是 93.184.216.34 │ │ ▼ │ │ ┌─────────────┐ │ │ │ 本地DNS │ ← 你的通讯录ISP或公共DNS提供 │ │ │ (Local DNS) │ │ │ └─────────────┘ │ │ ▲ │ │ │ 用户问 www.example.com我先看看我记不记得... │ │ ┌──────┴──────┐ │ │ │ 用户电脑 │ │ │ └─────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘1.2 各层服务器详解层级作用类比数量根域名服务器管理所有顶级域TLD的服务器地址电话总局只告诉你各省级电话局在哪全球13组字母A-M命名顶级域服务器管理.com/.org/.cn等顶级域下的权威服务器省级电话局告诉你具体城市的电话局每个顶级域有多台权威域名服务器存储具体域名的所有记录A记录、MX记录等本地电话局有完整的电话号码簿每个域名至少2台本地DNS服务器缓存查询结果加速后续访问你手机里的通讯录ISP提供或公共DNS冷知识全球只有13组根域名服务器命名从A到M但每组都有多台物理服务器通过任播Anycast技术分布在全球各地。比如A根就有超过150个实例分布在世界各地。二、DNS查询类型递归查询 vs 迭代查询当你查询一个域名时有两种查询方式递归查询Recursive Query和迭代查询Iterative Query。理解它们的区别是理解DNS工作原理的关键。2.1 递归查询“你帮我问到底”递归查询就像你让秘书去查一个电话你只管问一次秘书负责跑遍所有地方最后把结果告诉你。┌─────────────────────────────────────────────────────────────────┐ │ 递归查询流程图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 用户电脑 ──→ 本地DNS服务器 ──→ 根服务器 │ │ │ │ │ │ │ │ 查一下 │ 我不知道 │ 我只知道.com服务器 │ │ │ example.com│ 去问根服务器 │ 的地址给你 │ │ │ │ │ │ │ │ │ ←──────────────┘ │ │ │ │ │ │ │ │ ──→ .com顶级域服务器 │ │ │ │ │ │ │ │ │ │ example.com的权威服务器是xxx │ │ │ │ ←────┘ │ │ │ │ │ │ │ │ ──→ example.com权威服务器 │ │ │ │ │ │ │ │ │ │ www.example.com的IP是93.184.216.34 │ │ │ │ ←────┘ │ │ │ │ │ │ │ ←────────────┘ 查到了IP是93.184.216.34 │ │ │ │ │ 用户得到结果 │ │ │ │ 【特点】用户只发一次请求本地DNS负责跑腿问到底 │ │ │ └─────────────────────────────────────────────────────────────────┘2.2 迭代查询“我告诉你找谁”迭代查询就像问路你问AA说我不知道你去问B你再去问BB说你去问C…直到找到答案。┌─────────────────────────────────────────────────────────────────┐ │ 迭代查询流程图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 本地DNS ──→ 根服务器 │ │ │ │ │ │ │ │ 我不知道example.com但.com服务器在xxx │ │ │ ←───────┘ │ │ │ │ │ │ ──→ .com顶级域服务器 │ │ │ │ │ │ │ │ 我不知道www.example.com但权威服务器在yyy │ │ │ ←───────┘ │ │ │ │ │ │ ──→ example.com权威服务器 │ │ │ │ │ │ │ │ www.example.com的IP是93.184.216.34 │ │ │ ←───────┘ │ │ │ │ │ 本地DNS获得最终IP │ │ │ │ 【特点】每次查询返回下一步该问谁查询者自己继续问 │ │ │ └─────────────────────────────────────────────────────────────────┘2.3 对比总结特性递归查询迭代查询谁负责跑腿被查询的服务器查询发起者返回结果最终结果或错误去问xxx或最终结果典型场景用户→本地DNS本地DNS→根/顶级/权威服务器服务器压力被查询服务器压力大分散到各服务器实际工作流程在真实的DNS查询中通常是递归迭代的混合模式用户向本地DNS发起递归查询“你给我查到底”然后本地DNS向根/顶级/权威服务器发起迭代查询“告诉我下一步找谁”。三、DNS记录类型详解电话簿里的各种号码DNS 不只是存储 IP 地址它就像一个丰富的通讯录可以存储各种类型的联系方式。以下是常见的 DNS 记录类型3.1 A记录与AAAA记录最基本的电话号码; A记录IPv4地址映射 www IN A 93.184.216.34 ; AAAA记录IPv6地址映射4个A是因为IPv6地址长度是IPv4的4倍 www IN AAAA 2606:2800:220:1:248:1893:25c8:1946A记录是最基础的记录类型将域名映射到 IPv4 地址。AAAA记录Quad-A则是 IPv6 版本。当你的浏览器访问一个网站时首先查询的就是 A 或 AAAA 记录。3.2 CNAME记录别名系统; CNAME将一个域名指向另一个域名 blog IN CNAME github.io. www IN CNAME example.herokuapp.com.CNAMECanonical Name就像给联系人设置昵称。当你查询 blog.example.com 时DNS 会告诉你它其实就是 github.io然后你需要再去查 github.io 的 A 记录。⚠️注意CNAME 记录有一些限制根域名如 example.com通常不能设置 CNAME这会导致 MX 等其他记录失效需要使用 ALIAS 或 ANAME 记录。3.3 MX记录邮件系统的快递地址; MX记录邮件交换器数字是优先级越小越优先 IN MX 10 mail1.example.com. IN MX 20 mail2.example.com.MXMail Exchange记录告诉邮件系统这个域名的邮件应该送到哪。优先级数字越小越优先当 mail1 不可用时邮件会自动尝试 mail2。3.4 TXT记录“备注栏”; TXT记录文本信息常用于验证域名所有权 IN TXT vspf1 include:_spf.google.com ~all IN TXT google-site-verificationabc123...TXT 记录原本是用来放任意文本的现在主要用于SPF记录防止邮件伪造告诉邮件服务器哪些IP可以代表我发邮件DKIM记录邮件签名验证域名验证Google、微信等平台验证域名所有权3.5 NS记录“这个域名归谁管”; NS记录指定该域名的权威DNS服务器 IN NS ns1.cloudflare.com. IN NS ns2.cloudflare.com.NSName Server记录告诉全世界这个域名的DNS记录在哪台服务器上。当你把域名从阿里云转到腾讯云时本质上就是修改 NS 记录。3.6 SOA记录域名的出生证明; SOA记录起始授权记录包含域名的管理信息 IN SOA ns1.example.com. admin.example.com. ( 2024052001 ; Serial序列号 3600 ; Refresh刷新间隔 600 ; Retry重试间隔 604800 ; Expire过期时间 86400 ; Minimum TTL最小缓存时间 )SOAStart of Authority是每个DNS区域的元数据包含主DNS服务器ns1.example.com管理员邮箱admin.example.com第一个点换成序列号区域文件版本通常用日期格式YYYYMMDDNN各种时间参数从服务器多久同步一次等3.7 PTR记录反向查询; PTR记录IP反解析为域名 34.216.184.93.in-addr.arpa. IN PTR www.example.com.PTRPointer记录是 A 记录的反向操作给定 IP查询对应的域名。常用于邮件服务器验证防止垃圾邮件、日志分析等场景。3.8 记录类型速查表记录类型全称用途类比AAddress域名→IPv4手机号码AAAAIPv6 Address域名→IPv6超长手机号码CNAMECanonical Name域名别名昵称/外号MXMail Exchange邮件服务器收件地址TXTText文本信息备注/标签NSName Server权威DNS服务器管事的人SOAStart of Authority区域管理信息档案管理员PTRPointerIP→域名反向来电显示四、DNS缓存机制与TTL策略让通讯录更高效如果每次访问网站都要从根服务器一路查下来那上网速度会慢得像蜗牛。DNS 缓存机制就是解决这个问题——把查过的电话号码记在小本本上。4.1 多级缓存架构┌─────────────────────────────────────────────────────────────────┐ │ DNS 多级缓存示意图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 【浏览器缓存】← 最快TTL由浏览器控制 │ │ │ │ │ ▼ │ │ 【操作系统缓存】← Windows: hosts文件 DNS Client服务 │ │ │ │ │ ▼ │ │ 【本地DNS缓存】← 路由器/ISP DNS服务器缓存 │ │ │ │ │ ▼ │ │ 【各级DNS服务器缓存】← 递归DNS、权威DNS的缓存 │ │ │ │ 缓存命中率越高解析速度越快根服务器压力越小 │ │ │ └─────────────────────────────────────────────────────────────────┘4.2 TTLTime To Live缓存的保质期TTL 是 DNS 记录的一个重要属性告诉缓存服务器这条记录可以缓存多久。TTL 的单位是秒。; 不同记录的TTL设置示例 $TTL 3600 ; 默认TTL1小时 ; 经常变动的记录TTL设短一些 www 300 IN A 93.184.216.34 ; 5分钟 ; 稳定的记录TTL可以长一些 mail 86400 IN A 93.184.216.35 ; 1天 ; MX记录通常较长 3600 IN MX 10 mail.example.com. ; 1小时4.3 TTL设置策略场景建议TTL原因即将迁移/切换服务器300秒5分钟快速生效减少切换时间正常运营期3600秒1小时平衡更新速度和查询效率非常稳定的记录86400秒1天或更长减少DNS查询提升性能DDoS防护/CDN根据服务商建议可能需要频繁切换IP实战经验在迁移服务器前提前1-2天把TTL调低比如改为300秒。这样当真正切换时全球各地的缓存会更快更新。迁移完成后再调回正常的TTL值。五、DNS劫持与污染防护守护你的通讯录DNS 是互联网的基石但也成了攻击者的目标。DNS劫持和DNS污染是两种常见的攻击手段。5.1 DNS劫持“你的电话被转接到了诈骗中心”DNS 劫持是指攻击者通过各种手段篡改 DNS 解析结果把用户导向恶意网站。┌─────────────────────────────────────────────────────────────────┐ │ DNS劫持示意图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 正常流程 │ │ 用户 → 查询 www.bank.com → 返回 192.168.1.100 → 访问银行网站 │ │ │ │ 被劫持后 │ │ 用户 → 查询 www.bank.com → 返回 10.0.0.99钓鱼网站→ 被骗 │ │ │ │ 常见劫持方式 │ │ 1. 路由器被入侵篡改DNS设置 │ │ 2. 本地hosts文件被修改 │ │ 3. ISP层面的DNS劫持某些地区 │ │ 4. 公共WiFi的恶意DNS │ │ │ └─────────────────────────────────────────────────────────────────┘5.2 DNS污染“在电话簿里写假号码”DNS 污染DNS Spoofing/Cache Poisoning是指攻击者向 DNS 服务器注入虚假记录污染其缓存。; 攻击者伪造的DNS响应包 ; 在真正的权威服务器响应之前抢先告诉本地DNS错误的IP 攻击者 → 本地DNS: www.example.com 的IP是 10.0.0.99 伪造的响应transaction ID猜对了 本地DNS缓存了这个错误记录后续用户都被导向恶意网站5.3 防护措施防护层级具体措施效果个人用户使用可信的公共DNS如 8.8.8.8、1.1.1.1、223.5.5.5避免ISP劫持个人用户使用DNS over HTTPS (DoH) 或 DNS over TLS (DoT)加密DNS查询防止中间人篡改企业用户部署DNSSECDNS Security Extensions数字签名验证响应真实性企业用户自建内部DNS服务器限制外部DNS访问集中管控减少攻击面网站运营监控DNS解析结果异常告警及时发现劫持⚠️如何检测DNS劫持用nslookup www.example.com 8.8.8.8对比不同DNS服务器的结果检查本地hosts文件Windows: C:\Windows\System32\drivers\etc\hosts检查路由器DNS设置是否被篡改使用在线工具检测DNS解析结果六、DoH与DoT给DNS查询穿上隐身衣传统的 DNS 查询是明文的UDP 53端口任何人包括你的ISP、公共WiFi运营者、中间人攻击者都能看到你在访问什么网站。**DoHDNS over HTTPS和DoTDNS over TLS**就是为了解决这个问题。6.1 为什么需要加密DNS┌─────────────────────────────────────────────────────────────────┐ │ 传统DNS vs 加密DNS对比 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 【传统DNS - 明文传输】 │ │ 用户 ──明文查询──→ ISP ──明文查询──→ DNS服务器 │ │ 查www.example.com 查www.example.com │ │ │ │ 问题 │ │ - ISP知道你访问了哪些网站 │ │ - 公共WiFi可以劫持你的DNS │ │ - 容易被审查和干扰 │ │ │ │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ │ │ │ 【DoH/DoT - 加密传输】 │ │ 用户 ──加密通道──→ DoH/DoT服务器 ──明文──→ 权威DNS │ │ 加密数据 查www.example.com │ │ │ │ 优势 │ │ - 中间人看不到你在查什么 │ │ - 防止DNS劫持和污染 │ │ - 绕过简单的DNS封锁 │ │ │ └─────────────────────────────────────────────────────────────────┘6.2 DoH vs DoT 对比特性DoH (DNS over HTTPS)DoT (DNS over TLS)传输层HTTPS (TCP 443)TLS (TCP 853)流量伪装✅ 看起来像普通HTTPS流量❌ 明显的DNS流量端口443不易被封锁853可能被防火墙拦截浏览器支持Chrome/Firefox/Edge原生支持需要系统级配置性能略慢HTTP开销更快6.3 如何启用DoHChrome浏览器1. 地址栏输入: chrome://settings/security 2. 找到使用安全 DNS选项 3. 选择使用: https://dns.google/dns-query 或 https://cloudflare-dns.com/dns-query 或 https://doh.pub/dns-query (腾讯DNSPod)Firefox浏览器1. 地址栏输入: about:preferences#privacy 2. 滚动到基于 HTTPS 的 DNS 3. 选择启用然后选择提供商或自定义 自定义地址: https://dns.google/dns-queryWindows 11系统级DoH1. 设置 → 网络和Internet → WLAN/以太网 → DNS服务器分配 → 编辑 2. 选择手动开启IPv4 3. 首选DNS: 8.8.8.8选择仅加密(HTTPS) 4. 备用DNS: 1.1.1.1选择仅加密(HTTPS)推荐的公共DoH服务Google DNS: https://dns.google/dns-query (8.8.8.8)Cloudflare: https://cloudflare-dns.com/dns-query (1.1.1.1)阿里DNS: https://dns.alidns.com/dns-query (223.5.5.5)腾讯DNSPod: https://doh.pub/dns-query (119.29.29.29)七、实战dig与nslookup命令详解工欲善其事必先利其器。dig和nslookup是排查DNS问题的两把利器。7.1 dig命令DNS调试的瑞士军刀digDomain Information Groper是功能最强大的DNS诊断工具Linux/macOS自带Windows需要安装BIND或WSL。# 基本查询 - 查询A记录 $ dig www.example.com # 查询特定记录类型 $ dig www.example.com AAAA # 查询IPv6 $ dig example.com MX # 查询邮件服务器 $ dig example.com NS # 查询权威DNS $ dig example.com TXT # 查询文本记录 $ dig example.com SOA # 查询SOA记录 # 指定DNS服务器查询 $ dig 8.8.8.8 www.example.com $ dig 1.1.1.1 www.example.com # 追踪查询过程看完整解析链 $ dig trace www.example.com # 短格式输出只显示IP $ dig short www.example.com # 反向查询IP查域名 $ dig -x 8.8.8.8 # 显示详细时间排查延迟问题 $ dig stats www.example.comdig输出解读$ dig www.example.com ; DiG 9.16.1-Ubuntu www.example.com ;; 全局选项: cmd ;; 响应头 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 12345 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; 问题部分: 你问了什么 ;; QUESTION SECTION: ;www.example.com. IN A ;; 回答部分: 答案在这里 ⭐ ;; ANSWER SECTION: www.example.com. 86400 IN A 93.184.216.34 ↑ TTL ↑类型 ↑IP地址 ;; 查询统计 ;; Query time: 45 msec ← 查询耗时 ;; SERVER: 192.168.1.1#53 ← 使用的DNS服务器 ;; WHEN: Mon May 20 10:30:00 CST 2025 ;; MSG SIZE rcvd: 607.2 nslookup命令Windows用户的老朋友nslookup在所有操作系统都可用是Windows用户最常用的DNS工具。# 基本查询 C:\ nslookup www.example.com # 指定DNS服务器 C:\ nslookup www.example.com 8.8.8.8 # 查询特定记录类型 C:\ nslookup -typemx example.com C:\ nslookup -typens example.com C:\ nslookup -typetxt example.com C:\ nslookup -typesoa example.com C:\ nslookup -typeaaaa www.example.com # 交互模式连续查询 C:\ nslookup server 8.8.8.8 # 切换DNS服务器 set typemx # 设置查询类型 example.com # 查询 exit # 反向查询 C:\ nslookup 8.8.8.87.3 实战案例排查DNS问题案例1网站打不开怀疑DNS问题# 步骤1: 检查域名是否能解析 $ dig www.example.com short # 如果返回空说明DNS解析有问题 # 步骤2: 检查不同DNS服务器的结果 $ dig 8.8.8.8 www.example.com short $ dig 1.1.1.1 www.example.com short $ dig 223.5.5.5 www.example.com short # 对比结果是否一致 # 步骤3: 追踪完整解析链 $ dig trace www.example.com # 看在哪一步出错案例2邮件发送失败检查MX记录$ dig example.com MX short # 应该返回邮件服务器地址和优先级 # 如: 10 mail.example.com. # 再检查邮件服务器的A记录 $ dig mail.example.com short案例3CDN生效了吗检查TTL$ dig www.example.com # 看ANSWER SECTION中的TTL值 # 如果TTL逐渐减小说明缓存正常 # 如果TTL一直不变可能是静态hosts或缓存异常进阶技巧使用dig norecurse可以发送非递归查询测试权威服务器是否正常工作$ dig ns1.example.com www.example.com norecurse八、总结DNS知识脑图┌─────────────────────────────────────────────────────────────────┐ │ DNS 知识脑图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ DNS 互联网的电话簿系统 │ │ │ │ ├─ 分层架构 │ │ │ ├─ 根服务器 (13组) │ │ │ ├─ 顶级域服务器 (.com/.cn) │ │ │ ├─ 权威服务器 (域名管理) │ │ │ └─ 本地DNS (缓存加速) │ │ │ │ │ ├─ 查询方式 │ │ │ ├─ 递归查询你帮我问到底 │ │ │ └─ 迭代查询我告诉你找谁 │ │ │ │ │ ├─ 记录类型 │ │ │ ├─ A/AAAAIP地址 │ │ │ ├─ CNAME别名 │ │ │ ├─ MX邮件服务器 │ │ │ ├─ TXT文本/验证 │ │ │ ├─ NS权威DNS │ │ │ ├─ SOA区域管理 │ │ │ └─ PTR反向解析 │ │ │ │ │ ├─ 安全与优化 │ │ │ ├─ TTL策略平衡更新与性能 │ │ │ ├─ DNSSEC数字签名防篡改 │ │ │ ├─ DoH/DoT加密DNS查询 │ │ │ └─ 防劫持用可信DNS加密 │ │ │ │ │ └─ 工具 │ │ ├─ dig功能全面推荐 │ │ └─ nslookup简单易用 │ │ │ └─────────────────────────────────────────────────────────────────┘ 源码获取本文涉及的命令和配置文件已整理到GitHub仓库GitHub地址https://github.com/yourname/network-protocol-series包含内容本文所有dig/nslookup命令脚本示例DNS区域文件配置DoH/DoT配置指南DNS安全检测脚本 思考题场景题假设你要把网站从服务器A迁移到服务器B如何设置DNS才能让用户无感知切换TTL应该如何调整原理题为什么CNAME记录不能和其他记录如MX共存于同一个域名实战题使用dig命令如何验证一个域名是否正确配置了CDN安全题DNSSEC是如何防止DNS欺骗的它的局限性是什么 系列文章预告网络协议系列持续更新中敬请期待第18篇《HTTP/3与QUIC协议——下一代Web传输协议》第19篇《TLS/SSL握手详解——HTTPS背后的安全机制》第20篇《TCP拥塞控制算法——从 Tahoe 到 BBR》第21篇《Wireshark抓包实战——网络故障排查指南》关注专栏第一时间获取更新通知 如果觉得本文对你有帮助欢迎点赞收藏⭐评论转载请注明出处侵权必究CSDN多平台一键发布功能开通链接https://mp.csdn.net/vip?utm_sourceweitingfu

相关新闻