🔌 第一章 浏览器生成消息
📄 一句话概括

问过一次的答案存进缓存,下次直接答(还可能带着【非权威】标签);缓存带 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 秒实验

  1. 对一个域名连续 nslookup 两次,第二次通常更快——原因即缓存。
  2. 改一条域名的 A 记录(若你有域),观察 TTL 内外解析的差异。
  3. 查查公共 DNS(如 114.114.114.114)与你运营商 DNS 的缓存差异。

常见误区

  1. 以为缓存永远准——它是【快】换【可能旧】的交易。
  2. 以为缓存存在浏览器里——主要在本地 DNS 服务器(操作系统也存一份)。
自测三问(点开对答案) 1. 缓存记录带什么字段?多久失效? —— TTL,到期作废。 2. 【非权威】标签是什么意思? —— 答了,但不是管辖这台名字的服务器。 3. TTL 是谁定的? —— 域名的主人(在登记时设定)。

相关笔记