3. Client Behavior (客户端行为)
"SVCB resolution (SVCB 解析)" 是客户端执行的枚举和排序服务可用端点的过程。SVCB 解析的实现如下:
-
将 $QNAME 设置为服务名称加上方案的适当前缀 (参见第 2.3 节)。
-
为 $QNAME 发出 SVCB 查询。
-
如果为 $QNAME 返回了 AliasMode SVCB 记录 (在正常遵循 CNAME 之后), 将 $QNAME 设置为其 TargetName (不添加额外前缀) 并循环回到步骤 2, 受链长度限制和循环检测启发式方法的约束 (参见第 3.1 节)。
-
如果返回一个或多个 "compatible (兼容的)" (第 8 节) ServiceMode 记录, 这些记录代表备选端点。按 SvcPriority 升序对记录进行排序。
-
否则, SVCB 解析失败, 可用端点列表为空。
此过程不依赖于任何递归或权威 DNS 服务器来遵守本规范或具有对 SVCB 的任何感知。
如果客户端可以在不使用 ServiceMode 记录的情况下连接, 则该客户端被称为 "SVCB-optional (SVCB 可选的)"; 否则, 它被称为 "SVCB-reliant (SVCB 依赖的)"。现有协议 (例如 HTTP) 的客户端应该 (SHALL) 实现 SVCB-optional 行为 (除非第 3.1 节中所述或由未来规范修改)。
SVCB-optional 客户端应该 (SHOULD) 并行发出在 SVCB 记录缺失的情况下建立连接可能需要的任何其他 DNS 查询, 以便在这种情况下最小化延迟并启用第 5 节中讨论的优化。
一旦 SVCB 解析完成, 无论成功与否, 如果至少处理了一个 AliasMode 记录, SVCB-optional 客户端应该 (SHALL) 将一个由 $QNAME 的最终值、权威端点的端口号和无 SvcParams 组成的端点附加到端点列表中。(此端点将在回退到非 SVCB 连接模式之前尝试。这确保 SVCB-optional 客户端将使用其 TargetName 具有 A 和/或 AAAA 记录但没有 SVCB 记录的 AliasMode 记录。)
客户端使用此端点列表继续建立连接。客户端应该 (SHOULD) 首先尝试更高优先级的备选方案, 并回退到较低优先级的备选方案。客户端为所选的 TargetName 解析 AAAA 和/或 A 记录, 并可以 (MAY) 使用诸如 Happy Eyeballs [HappyEyeballsV2] 之类的方法在它们之间进行选择。
如果客户端是 SVCB-optional 的并且使用此端点列表连接失败, 客户端现在尝试使用非 SVCB 连接模式。
第 5 节讨论了一些重要的优化, 以避免与普通 AAAA/A 查找相比增加额外延迟。