📄 一句话概括
人记名字、机器认数字——DNS 把主机名翻译成 IP;解析按 hosts 文件、本机缓存、DNS 服务器三级依次问。
📝 本节和前面几节的关系
包会走路了,可你怎么知道【要去的网站】的 IP 是多少?本节看翻译官 DNS 的三级询问。
一、为什么需要 DNS
背不出几个 IP 地址,更别提网站随时换服务器——IP 会变,名字不变; 域名(www.example.com)是给人看的名字,DNS(域名系统)负责把名字翻成 IP; 上网第一步其实是问 DNS——名字翻不成 IP,后面一切都无从谈起。
二、三级询问的顺序
第 1 问 hosts 文件:本机手工登记的小名单,命中就不用问别人; 第 2 问 本机缓存:最近问过且没过期的答案,直接复用; 第 3 问 DNS 服务器(运营商或公共 DNS 如 223.5.5.5)——它自己也不一定认识,会沿着【根→顶级域→权威服务器】逐级替你问,这叫递归解析; 问到的答案存进缓存,下次先走第 2 问——所以刚配好的域名要等缓存过期才生效。
三、实验怎么做
nslookup www.example.com:直接问 DNS 服务器,看返回的地址;
输出里的【非权威应答】表示答案来自中间缓存而非权威服务器;
21 课 Web 原理里【输入网址到显示页面】的第一步就是本次实验。
四、动手 Demo:三级询问解析域名
模拟 hosts、缓存、DNS 三级依次查询,问到的答案存回缓存。
hosts = {"localhost": "127.0.0.1"}
cache = {}
dns = {"www.example.com": "93.184.216.34"}
name = "www.example.com"
print(name in hosts, name in cache, name in dns)
cache[name] = dns[name]
print("缓存:", cache)
实跑输出:
--------------------------------------------------------------------
实验 6——DNS服务器把主机名解析成 IP地址
--------------------------------------------------------------------
人记不住 202.97.12.5, 更记不住每家网站——人记名字, 机器认数字。
DNS 就是翻译官。解析按顺序问三处:
第 1 问 hosts 文件 -> 没有 www.example.com 这条
第 2 问 本机缓存 -> 还没记过, 去问 DNS 服务器
第 3 问 DNS 服务器 -> www.example.com 的 IP 是 93.184.216.34
回来存进缓存: www.example.com -> 93.184.216.34 (下次先问缓存)
实验: nslookup www.example.com 直接问 DNS:
非权威应答: 名称 www.example.com Address: 93.184.216.34
DNS 服务器背后是根 -> 顶级域 -> 权威服务器的分布式数据库, 逐级委托。
True/False/True 那行就是在演三级依次问:hosts 没有、缓存没有、DNS 有。 hosts 文件至今有用:本地调试把测试域名指到 127.0.0.1,就是第 1 问的特权。
30 秒实验
- 跑 nslookup 查你常用网站的 IP,再跑一次看答案是否走缓存路径。
- 解释【换 DNS 服务器后网站秒开或打不开】的原因(解析路径不同)。
常见误区
- 以为浏览器直接连域名——必须先翻成 IP,翻译不成连第一步都迈不出去。
- 以为全网只有一台 DNS 服务器——它是根、顶级域、权威逐级委托的分布式数据库。
自测三问(点开对答案)
1. 解析的三级询问顺序? —— hosts 文件 → 本机缓存 → DNS 服务器。 2. 什么是递归解析? —— DNS 服务器替你沿根→顶级域→权威逐级问到底。 3. 为什么改解析要等缓存过期? —— 缓存里的旧答案没到期就一直被优先使用。- ☐ 下一节(9.8 实验 7:查看 IP地址和 MAC地址的对应关系)
相关笔记
- 🕸️ Web技术原理 · 索引 — 输入网址到显示的第一步
- 🌐 计算机网络 · 索引 — DNS 协议细节在那边
- 💻 计算机是怎样跑起来的 · 索引