💻 第九章 通过七个简单的实验理解TCP/IP网络
📄 一句话概括

人记名字、机器认数字——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 秒实验

  1. 跑 nslookup 查你常用网站的 IP,再跑一次看答案是否走缓存路径。
  2. 解释【换 DNS 服务器后网站秒开或打不开】的原因(解析路径不同)。

常见误区

  1. 以为浏览器直接连域名——必须先翻成 IP,翻译不成连第一步都迈不出去。
  2. 以为全网只有一台 DNS 服务器——它是根、顶级域、权威逐级委托的分布式数据库。
自测三问(点开对答案) 1. 解析的三级询问顺序? —— hosts 文件 → 本机缓存 → DNS 服务器。 2. 什么是递归解析? —— DNS 服务器替你沿根→顶级域→权威逐级问到底。 3. 为什么改解析要等缓存过期? —— 缓存里的旧答案没到期就一直被优先使用。

相关笔记