摘要

  • 父区可能要求解析器去询问 ns.child.example,但这台服务器的地址又位于尚未抵达的 child.example 子区,普通查询因此形成循环。
  • Glue 把一份有限的地址副本放入父区的委派响应,用来建立第一次联系;它提供可达性而非权威性,后来的规范又明确了信任等级与信息不完整时的信号。

下一步无法执行

递归解析器通常从根开始,逐级接收转介。根指向顶级域,顶级域再指向子区,解析器独立追随下一台权威服务器。问题出现在服务器名称本身位于被委派的子区中。

假设父区说 child.example 的服务器是 ns.child.example。解析器需要这台主机的 A 或 AAAA 地址,才能发送下一次查询;但该地址的权威数据恰好在 child.example,也就是尚未联系上的服务器所管理的区。指令变成了:先向一台服务器询问如何找到它自己。

这不是罕见的命名花招。把名称服务器放在自己的域名下有清晰的组织意义。困难在于跨越管理边界时,通往另一侧所需的坐标也在另一侧。

从子区借来一条地址

1987 年 11 月发布的 RFC 1034 定义了区切点。父区保存 NS 记录,指出子区的权威服务器。名称足以表达委派,却未必足以建立通信。因此,父区可以保存位于切点之下的服务器地址,并在转介中一并交给解析器;这就是 Glue。

Glue 一词同时说明了作用与界限。它粘合了原本断开的两个解析步骤,但 RFC 1034 明确指出,这些记录不是子区的权威数据。只有当服务器名称位于切点之下时才是必需,并且只用于转介。

父区并不是在普遍回答“这台主机的权威地址是什么”,而是在说:“这里有足够的信息,让你先尝试抵达我所委派的权威。”解析器一旦到达子区,仍应向子区取得权威答案。

于是三种权力没有混为一体。父区控制委派是否可启动,子区控制自己的区数据,解析器决定如何使用、排序与更新证据。父区的杠杆真实存在,却没有因此扩张为对子区全部事实的所有权。

例外必须保持低信任

附加区段里的记录不需要另一次查询,因此高效;也正因如此,它们不能自动获得高信任。一台服务器可以附带原问题没有请求的记录,缓存若把提示提升为长期答案,就会越过证据边界。

RFC 2181 在 1997 年细化了等级。权威区数据高于非权威答案与附加信息;最低信任组中的未认证记录不得被缓存成以后可直接返回的答案。Glue 可以引导下一次查询,却不能仅因留在内存里就成为权威事实。

该文档还承认,同一名称的 Glue 可能存在于多个区,并且数值不同。正确配置的权威副本不应这样冲突,而父区保存的启动提示可能发生分歧。解析器因此需要知道记录从哪里来、为何出现,而不是把地址混成一个无来源的集合。

哪些 Glue 必需,哪些只是噪声

RFC 8499 后来把几种关系说得更清楚。若名称服务器位于被委派区内,它是 in-domain;没有 Glue,解析就会失败。

Sibling server 位于同一父区下的另一个子区。解析器通常可以沿着那个兄弟区的委派去查地址,因此 sibling Glue 多半是减少额外查询的优化。但两个兄弟区也可能互相把服务器放在对方名下,形成循环;此时父区仍需提供一条打破循环的地址。

Out-of-bailiwick 服务器位于父区之外。为它附带 Glue 没有启动价值,解析器可以沿 DNS 树的正确分支独立查询。接受任意越界附加地址,只会扩大歧义与攻击面。

这里的 bailiwick 是协议作用域,不是法律管辖权。它回答父区是否处在提供有用启动地址的位置,不证明域名、组织或 IP 地址归谁所有。

一个委派上的两只时钟

Glue 把协调成本带进了 DNS。父区与子区保存相关但不同的数据,缓存又让它们按不同 TTL 老化。RFC 1035 要求载入区文件时检查必要 Glue 是否存在,并描述了更隐蔽的情况:缓存中的 NS 记录仍然有效,但寿命更短的 Glue 地址已经过期,解析器手里于是只有服务器名称,没有任何可用地址。

更换地址因此不是一次原子修改。子区可能先发布新地址,父区稍后才更新 Glue;也可能反过来。热缓存解析器继续工作,冷缓存解析器却暴露断裂的启动路径。可用性取决于修改顺序、并行保留时间和分散在全球的到期时钟。

父区可以用陈旧 Glue 让子区失联,却看不到所有缓存;子区可以发布完全正确的权威数据,新解析器却永远到不了那里。这是一种真实但不全知的控制。

完整信息装不进一个响应

现代 DNS 转介还可能携带 DNSSEC 材料,而 UDP 响应空间有限。一些实现会塞入部分 Glue,却不说明仍有地址被遗漏。解析器收到的是语法完整、证据残缺的转介。

2023 年 9 月的 RFC 9471 更新了 RFC 1034:权威服务器必须在转介中包含所有可用的 in-domain Glue;若受消息大小限制,就必须设置 TC 标志,让解析器知道响应被截断并改用能承载完整响应的传输。

这项澄清来自边界明确的运行证据。RFC 9471 记录了 2020 年 6 月一个必要 Glue 未装入响应且 TC 仍为零的案例,也记录作者在 2021 年末可用 ICANN CZDS 数据中,从约 2.09 亿个委派里找到 222 个只依赖循环 sibling NS 的委派。这不是全网故障率,只说明即使依赖形态罕见,也需要确定的处理规则。

修复没有新设 DNS 中央权威,而是要求服务器公开“不完整”。解析器执行重试,运营者继续承担父子数据一致性责任。规范只补上了互操作所需的最小共同义务。

一座窄桥,不是一张产权证

Glue 用一个受限例外解决了自指。父区之所以携带子区服务器地址,是因为没有它便无法抵达子区;解析器之所以使用它,是因为首次查询必须有落点。这两步都不证明域名所有权、服务器健康、组织身份或地址使用权。

真正的历史成就是把权力分开:委派指出下一权威,Glue 让它可达,子区提供权威答案,解析器保留证据等级。互联网走出了循环,却没有让启动提示变成主权。

来源与边界

1987 年的区切点、转介与 Glue 机制来自 RFC 1034 和 RFC 1035;信任排序和冲突 Glue 见 RFC 2181;当前术语见 RFC 8499;完整性、截断和两项部署观察见 RFC 9471。本文不把后来的术语投射回 1987 年,也不把有限观察当作普查。