名字是给人记的,地址是给机器认的;DNS 就是那张把两者对上的表,而它靠一层层的缓存,把耗时压到几乎感觉不到。
3-3 讲了地址是什么,3-4 讲了地址怎么发到设备手上。这一节解决的是另一个问题:为什么我们输的是名字,而网络实际用的是地址,以及这两者是怎么被对上的。
一、为什么需要 DNS
域名对人友好,地址对机器友好。让人去记 142.250.190.78 是不可能的,让机器去理解【谷歌】这种名字,它也做不到。
DNS 做的就是翻译。它是一个分布在全世界的巨大对照表,而不是某一台服务器上的一个文件——这点很重要,因为这意味着它天生要面对【怎么保证一致、怎么扛住查询量】这两个问题。
还有一个常被忽略的性质:DNS 默认不加密。谁在路上看得见你查了什么,谁就知道你接下来要访问哪里。
二、解析的四个层次
查一个域名,不是每次都跑到最顶层去问。它先在近处找,找不到再往外问。
顺序大致是:浏览器自己的缓存 → 操作系统缓存 → 本机 hosts 文件 → 本地 DNS 服务器 → 根服务器 / 顶级域服务器 / 权威服务器。
越靠前的越快。命中浏览器缓存几乎零耗时,一路问到底可能要上百毫秒。这就是为什么【同一个页面刷第二遍会明显更快】。
三、动手 Demo:缓存的账与记录的账
TTL 这个参数决定了一条记录能被记多久,它是 DNS 性能与准确性的调节钮。
ttl = 300
per_day = 86400 // ttl
print("TTL", ttl, "秒 → 一天真正去问的次数顶多", per_day)
print("100 万次访问里,其余", format(1000000 - per_day, ","), "次都在缓存里答完")
print("命中率 %.3f%%" % ((1000000 - per_day) * 100.0 / 1000000))
实跑输出:
--------------------------------------------------------------------
D5 DNS:把域名翻成地址,靠的是一层层的缓存
--------------------------------------------------------------------
计算机不认名字,只认数字。DNS 就是那张【数字与名字的对照表】。
这张表不是一本,而是分散在好几层缓存里,越近的越快。
去哪里找 命中大概要多久 说明
--------------------------------------------------------------------------------------------
浏览器自己的缓存 0 ms 最快,同一台电脑上就解决了
操作系统缓存 0.1 ms 浏览器没记住,系统记住了
hosts 文件 0.1 ms 本机手工写的对照表
本地 DNS 服务器 1 ~ 5 ms 运营商或 8.8.8.8 这种公共 DNS
根 → 顶级域 → 权威 20 ~ 120 ms 层层问下来,一次问不到就问下一级
表里常见的几种记录,各管一摊:
类型 它把什么对到什么 什么时候用
----------------------------------------------------------------------------------------
A 域名 → IPv4 地址 最常用的那条记录
AAAA 域名 → IPv6 地址 四倍的 A,装的是 128 位地址
CNAME 域名 → 另一个域名 别名,最后还是要落到 A 上
MX 域名 → 邮件服务器 收发邮件时用
TXT 域名 → 一段文本 域名验证、防冒收发信常用
NS 域名 → 管这台域名的服务器 告诉全网【这事该问谁】
PTR IP 地址 → 域名 反向查询,主要用于排查
SOA 域名的权威信息 主从服务器、序列号、各类默认值
TTL 是【这条记录能被记住多久】。假设 TTL 是 300 秒:
· 一天 86,400 秒,真正跑去问的顶多 288 次
· 100 万次访问里,其余 999,712 次全在缓存里答完了
2026 年关于 DNS 的三件事:
· 10 月 11 日 ICANN 启用新的根区密钥 KSK-2024,旧的 2027 年 1 月退役
· 域名解析服务也在集中:Cloudflare 17.7%、GoDaddy 9.9%
· 加密 DNS(DoH / DoT)的查询占比,预计今年超过 85%
先看缓存链那张表:从 0 毫秒到 120 毫秒,跨了三个数量级。而现实中绝大多数查询都发生在最前面几层——这就是 DNS 能撑起整个互联网查询量的原因。
再看记录类型那张表。最常用的是 A 与 AAAA(域名对到 IPv4 与 IPv6 地址);CNAME 是别名,MX 管收邮件,TXT 常用来做域名归属验证。记住这几条,看域名解析结果时就不会一头雾水。
最后那笔账最能说明问题:TTL 设成 300 秒,一天 86,400 秒里,真正跑去问的顶多 288 次——其余几十万次访问全在缓存里答完了。
四、2026 年的三件事
第一件是今天:10 月 11 日,ICANN 正式启用新的根区密钥 KSK-2024,旧的密钥将在 2027 年 1 月退役。这是整个 DNS 信任体系最顶层的一次换锁,普通用户没有感觉,但跑着 DNSSEC 校验的解析器必须换上新的信任锚。
第二件是集中度:域名解析也在往少数几家集中,Cloudflare 一家占了 17.7% 的网站,GoDaddy 9.9%。方便的另一面是——这几家出问题,影响面就是全网级别。
第三件是加密:DoH 与 DoT 把域名查询裹进加密通道,预计 2026 年加密 DNS 的查询占比会超过 85%。也就是说,【谁都能看见你查了什么】这件事正在成为过去。
30 秒实验
- 在命令行运行
nslookup www.baidu.com,记下返回的 IP 地址;再运行一次,看两次结果是否一致(很多站点有多个地址)。 - 运行
nslookup -type=MX qq.com,看看它的邮件服务器是哪几台——这就是 MX 记录的实际样子。 - 在浏览器地址栏直接输入一个 IP 地址(不要输域名),看能不能打开——这能帮你体会【域名只是给人用的门牌号】。
常见误区
- 错误:DNS 就是一台存着所有域名的大服务器。——纠正:它是分布式的。根、顶级域、权威三级分工,再配合缓存,才有了今天的规模。把它想成【一棵倒过来的树 + 一堆就近的复印件】才准确。
- 错误:改了域名解析,马上全世界都能看到。——纠正:要等 TTL 过完。原来的记录还被各地缓存记着,TTL 没到期就不会去问新的。所以切流量前要把 TTL 调小,让全世界尽快换到新地址。
- 错误:TTL 越短越好,这样改起来快。——纠正:TTL 短意味着查询更频繁。每次都跑到权威服务器去问,既慢又给上游添压力。TTL 是【灵活性】与【开销】之间的取舍,稳定期调大、要变更前调小。
- 错误:域名解析是明文,也没什么大不了。——纠正:这恰恰是隐私与安全的关键一环。看得见你查什么,就看得见你要去哪——可以投毒、可以劫持、可以画像。加密 DNS 占比超过 85%,正说明大家已经把它当成必须解决的问题。
自测三问(点开对答案)
1. 查一个域名时,最先被找的是哪里? —— **浏览器自己的缓存**,然后是操作系统缓存、hosts 文件,再到本地 DNS 服务器,最后才一路问到根、顶级域、权威服务器。**绝大多数查询在头两层就结束了**,所以页面第二次打开通常更快。 2. TTL 设成 300 秒,一天最多需要真正解析几次? —— **288 次**(86,400 ÷ 300)。其余时间所有访问都命中缓存。**这就是为什么【100 万次访问】并不等于【100 万次查询】。** 3. 要更换服务器地址,为什么要提前把 TTL 调小? —— 因为**已经发出去的解析结果还在各地被缓存着**,TTL 没到期就不会更新。**提前把 TTL 调小,相当于让全世界的缓存尽快过期**,这样切换那一刻,用户才能马上访问到新地址。- ☐ 下一节(3-6 互联网的通信代理:Proxy)
相关笔记
- 分配IP地址 —— 上一节:设备拿到地址以后,还得知道名字对应哪个地址
- 网络的电话簿(DNS) —— 网络课里的 DNS 入门
- 资源记录与递归查询 —— 记录类型与查询方式
- 什么是URL —— 域名在 URL 里处在什么位置
- 🕸️ Web技术原理 · 索引