📄 一句话概括
问过一次的答案存进缓存,下次直接答(还可能带着【非权威】标签);缓存带 TTL 有效期,到期作废重查。
📝 本节和前面几节的关系
1.3.3 的接力要四跳;本篇讲怎么让第二问变一跳——缓存。
一、存什么、放多久
本地 DNS 把答过的记录存下来,附一个 TTL(秒); 到点作废,重新走接力。
二、缓存答案的免责声明
缓存给出的答案可能标着非权威—— 意思是【我答的,但我不是管它的那台】; 也可能已过期但先答你(教材描述了这种实用主义)。
三、动手 Demo:缓存让第二问变快
同一名字问两次的账:
ttl = 60
for t in (0, 30, 70):
left = ttl - t
r = '命中(剩%d秒)' % left if left > 0 else '过期,重走接力'
print('t=%-3ds -> %s' % (t, r))
实跑输出:
--------------------------------------------------------------------
缓存让第二问变快
--------------------------------------------------------------------
同一个名字问两次,账不一样:
轮次 路径 耗时(示意)
--------------------------------------------------------------
第一次 根->com->glb->lab,4 跳 几十毫秒
第二次(缓存内) 本地 DNS 直接答 1 毫秒上下
--------------------------------------------------------------
缓存记录带 TTL(有效期),到点作废重查:
t=0s 查得 172.20.1.1,TTL=60s,入缓存
t=30s 再查 -> 直接命中(还剩 30s 有效)
t=70s 再查 -> 过期,重新走完整接力
缓存里的答案还可能标着【非权威】——意思是:
我答的,但我不是管它的那一台。
TTL 由域名的主人设定:变更频繁设短(如 60), 稳定的设长(如 86400)——在【快】和【准】之间定价。
30 秒实验
- 对一个域名连续 nslookup 两次,第二次通常更快——原因即缓存。
- 改一条域名的 A 记录(若你有域),观察 TTL 内外解析的差异。
- 查查公共 DNS(如 114.114.114.114)与你运营商 DNS 的缓存差异。
常见误区
- 以为缓存永远准——它是【快】换【可能旧】的交易。
- 以为缓存存在浏览器里——主要在本地 DNS 服务器(操作系统也存一份)。
自测三问(点开对答案)
1. 缓存记录带什么字段?多久失效? —— TTL,到期作废。 2. 【非权威】标签是什么意思? —— 答了,但不是管辖这台名字的服务器。 3. TTL 是谁定的? —— 域名的主人(在登记时设定)。- ☐ 下一节(1.4.1 数据收发操作概览)
相关笔记
- 寻找相应的DNS服务器并获取IP地址 —— 没缓存时的全程
- 对必要的设置进行自动设置(DHCP) —— 另一类自动配置
- 🔌 网络是怎样连接的 · 索引