📄 一句话概括
从根服务器顺着树往下问:每一步得到的都是【下一层的门牌】(NS 记录),一层一层递到管目标的区——全世界的 DNS 是一场接力。
📝 本节和前面几节的关系
1.3.2 画好了地图;本篇照地图走一遍完整接力。
一、接力的走法
本地 DNS 问根:根不答 IP,只答【com 的服务器在哪】; 问 com:答【glb 的在哪】;问 glb:答【lab 的在哪】; 问 lab:答出 172.20.1.1——这是权威答案。
二、给的是门牌不是地址
中间每步给的是下一层服务器的门牌(NS 记录+它的 IP, 那个 IP 有时要再查一次——胶水记录,教材点到为止)。
三、动手 Demo:一场 DNS 接力(迭代查询)
四问四答的完整剧本:
chain = [('根','com 的服务器在 XXX'),
('com','glb 的服务器在 YYY'),
('glb','lab 的服务器在 ZZZ'),
('lab','172.20.1.1(权威答案)')]
for i, (who, ans) in enumerate(chain, 1):
print('第%d问 %s -> %s' % (i, who, ans))
实跑输出:
--------------------------------------------------------------------
一场 DNS 接力(迭代查询)
--------------------------------------------------------------------
解析器只认自己的 DNS 服务器,剩下的一层层往下问:
解析器 -> 本地DNS 查 www.lab.glb.com?
本地DNS -> 根 查 www.lab.glb.com?
根 -> 本地DNS 我不管 com,com 的服务器在 XXX
本地DNS -> com 查 www.lab.glb.com?
com -> 本地DNS 我不管 glb.com,glb 的在 YYY
本地DNS -> glb 查 www.lab.glb.com?
glb -> 本地DNS 我不管 lab,lab 的在 ZZZ
本地DNS -> lab 查 www.lab.glb.com?
lab -> 本地DNS 172.20.1.1 (权威答案!)
本地DNS -> 解析器 172.20.1.1
全程 4 问 4 答,每一步给的都是【下一层去哪问】。
这种【你问一步、我指下一步】叫迭代查询; 解析器让本地 DNS 代跑全程,自己只等最终答案。
30 秒实验
- 用 nslookup 加 +trace 参数看一次真实接力(Linux/新 nslookup 支持)。
- 查一下根服务器的数量(13 个名字,靠 anycast 铺成上千个点)。
- 想想为什么根服务器不直接存所有记录——维护量算一算。
常见误区
- 以为本地 DNS 一次就查出答案——它也要一层层问。
- 以为中间服务器也给出 IP——它们只给下一层的门牌。
自测三问(点开对答案)
1. 接力的起点是哪台服务器? —— 根 DNS 服务器。 2. 中间每一步给出的是什么? —— 下一层 DNS 服务器的门牌(NS 记录)。 3. 【权威答案】来自哪台? —— 直接管辖目标区的那台。- ☐ 下一节(1.3.4 通过缓存加快DNS服务器的响应)
相关笔记
- 域名的层次结构 —— 接力依据的地图
- 通过缓存加快DNS服务器的响应 —— 让接力少跑几趟
- 🔌 网络是怎样连接的 · 索引