首页 / 内容指南 / 当前文章

DNS SVCB、HTTPS、AliasMode、ServiceMode、SvcPriority 和 SvcParams 有什么区别?

发布于 2026-08-26 · Content Fleet 编辑部

SVCB 是通过 DNS 发布服务端点及连接参数的通用资源记录,HTTPS 是专门映射 HTTP/HTTPS 服务的 SVCB 兼容记录。SvcPriority=0 表示 AliasMode,只把该服务委托到另一个名称;优先级大于 0 表示 ServiceMode,记录可同时给出目标端点和 SvcParams。较小的非零 SvcPriority 优先,SvcParams 则描述 ALPN、端口、地址提示、ECH 配置等连接信息。

直接答案

SVCB 是通过 DNS 发布服务端点及连接参数的通用资源记录,HTTPS 是专门映射 HTTP/HTTPS 服务的 SVCB 兼容记录。SvcPriority=0 表示 AliasMode,只把该服务委托到另一个名称;优先级大于 0 表示 ServiceMode,记录可同时给出目标端点和 SvcParams。较小的非零 SvcPriority 优先,SvcParams 则描述 ALPN、端口、地址提示、ECH 配置等连接信息。

HTTPS/SVCB 不是 A、AAAA、CNAME 或 TLS 证书的简单替代。客户端仍需取得地址、执行 TLS 身份验证并保留规范要求的回退行为。ipv4hintipv6hint 是优化提示,不应被当作权威地址集;ech 提供 ECH 配置,也不等于 DNS 响应天然可信。

一、核心概念快速对比

同一个 RRset 应避免混合两种 Mode。RFC 9460 规定,如果集合中出现 AliasMode,接收方必须忽略同集合中的 ServiceMode 记录。

二、记录的基本结构

区域文件中的通用形式为:

Name TTL IN HTTPS SvcPriority TargetName SvcParams

例如:

example.com. 300 IN HTTPS 1 . alpn="h2,h3" ipv4hint=192.0.2.10 ipv6hint=2001:db8::10

这里优先级 1 表示 ServiceMode,TargetName 的 . 表示有效目标沿用记录所有者名称,参数声明端点支持的协议信息和地址提示。

三、SVCB 与 HTTPS 的区别

SVCB 是可供其他服务定义映射的通用记录。不同协议若采用它,需要说明查询名称如何构造、默认端口是什么,以及每个参数如何影响连接。它不能在缺少协议映射时自行告诉客户端怎样连接任意服务。

HTTPS RR 复用同样的编码和大部分语义,但专门服务于 HTTP 与 HTTPS Origin,并包含浏览器连接建立需要的特殊处理。部署网站时通常查询 HTTPS Type 65,而不是把通用 SVCB Type 64 当成完全相同的替代品。

四、AliasMode 做什么

当 SvcPriority 为 0 时,记录处于 AliasMode,TargetName 指向接下来要解析的服务名称。例如区域顶点可以使用:

example.com. 300 IN HTTPS 0 svc.example.net.

客户端随后在 svc.example.net 上继续解析 HTTPS、A 和 AAAA。AliasMode 的价值之一是能在不允许放置 CNAME 的区域顶点提供服务级别别名。

五、AliasMode 与 CNAME 有什么区别

CNAME 为一个 DNS 名称建立规范名称别名,会影响对该名称多种 RR Type 的解析,而且同一所有者名称通常不能再拥有其他普通数据。HTTPS AliasMode 只适用于 HTTPS RR 查询,不会把该名称所有其他记录一起变成别名。

因此区域顶点可以同时保留 SOA、NS 等必需记录,并通过 HTTPS AliasMode 委托 Web 服务。它并不是“允许与任何数据任意共存的 CNAME”,客户端必须实现 SVCB/HTTPS 才会理解该服务别名。

六、AliasMode 为什么不能放有效 SvcParams

RFC 9460 规定 AliasMode 中出现的 SvcParams 要被接收方忽略。参数属于最终 ServiceMode 端点,不属于纯别名跳转。区域文件工具可以对 AliasMode 携带参数发出警告。

若想同时发布端点和 ALPN、端口等参数,应使用非零 SvcPriority 的 ServiceMode。不要期待 HTTPS 0 target alpn=h3 让客户端既跳转又应用参数。

七、ServiceMode 做什么

当 SvcPriority 大于 0 时,记录处于 ServiceMode。TargetName 指明替代端点,SvcParams 把连接配置与这个端点绑定。一个 RRset 可以发布多个 ServiceMode 记录,让客户端依次选择兼容且优先级更高的选项。

与把地址、端口和协议信息分散在无关联记录中相比,ServiceMode 确保一组参数属于同一个目标。客户端不能把端点 A 的 alpn 与端点 B 的 port 随意组合。

八、SvcPriority 如何排序

对于 ServiceMode,较小的 SvcPriority 表示域名所有者建议优先使用。客户端先过滤不兼容记录,再按升序尝试。相同优先级的记录应随机打乱,以实现较均匀的负载分布。

SvcPriority 不是百分比权重,也不是 DNS MX 那种自动保证服务可达的机制。若首选端点连接失败,客户端的后续尝试仍受协议算法、超时和本地网络策略影响。

九、TargetName 的点号表示什么

在 ServiceMode 中,TargetName 为根标签 . 时,有效 TargetName 使用当前记录的所有者名称。它能避免重复写出同名目标,也让服务参数直接作用于原 Origin。

在 AliasMode 中,TargetName 为 . 具有不同含义:表示服务不可用或不存在的建议性信号。Mode 不同,同一个点号的解释也不同,不能脱离 SvcPriority 解析。

十、`alpn` 参数做什么

alpn 列出该端点支持的额外应用层协议协商标识,例如 h2h3。客户端可以在连接前获知端点支持 HTTP/2 或 HTTP/3,从而更早尝试适合的传输。

它不是 TLS 握手结果的替代。客户端发起连接后仍需通过 TLS ALPN 与服务器协商,服务器实际配置必须与 DNS 声明一致。发布 h3 还要求 UDP、QUIC、证书和应用服务真正可用。

十一、`no-default-alpn` 有什么含义

如果记录没有 no-default-alpn,具体协议映射可以拥有默认 ALPN 集合。no-default-alpn 表示端点不支持该默认集合,必须结合显式 alpn 等配置解释。

该键没有普通字符串值,但并非可随意单独使用。RFC 9460 对参数自洽性设有要求,发布工具和客户端应拒绝或忽略不自洽的 ServiceMode 记录。

十二、`port` 参数是否改变 URL

port 指定连接替代端点时使用的端口。它能让服务把连接导向非默认端口,但不会改写用户看到的 Origin,也不会改变 HTTP Host、TLS 服务器身份或同源策略。

客户端仍应执行适用的受限端口策略。服务端必须为原 Origin 提供有效证书和内容;不能因为 DNS 指向另一个端口,就把证书校验改为 TargetName 的身份。

十三、`ipv4hint` 和 `ipv6hint` 是什么

这两个参数提供与 TargetName 关联的 IPv4 或 IPv6 地址提示,让客户端可能在等待完整地址解析前更早开始连接。它们的目标是降低延迟,而不是取代 A、AAAA 的权威含义。

客户端应按规范取得或利用真正的地址记录,并在提示失效时回退。地址变化时若只更新 A/AAAA 而忘记 Hint,会造成连接先尝试旧地址,因此发布系统必须同步维护。

十四、`mandatory` 参数解决什么

客户端通常可以忽略不认识的 SvcParam。若某个参数对该记录正确工作不可缺少,发布者用 mandatory 列出它。客户端不认识所有 Mandatory Key 时,应把这条 ServiceMode 记录视为不兼容,而不是带着不完整配置尝试。

mandatory 只声明同一记录中其他 Key 的必需性,所列 Key 本身也必须实际出现。它不会强迫旧客户端升级,也不会让不支持 HTTPS RR 的客户端突然理解记录。

十五、`ech` 参数是什么

IANA 当前把 ech 注册为用于 TLS Encrypted ClientHello 配置的 SvcParam。RFC 9848 规定如何通过 SVCB/HTTPS 引导 ECH,使支持的客户端能取得公钥配置并加密 ClientHello 中受保护内容。

ECH 提升的是 TLS 握手元数据隐私,不能替代 TLS 证书认证,也不会加密 DNS 查询本身。若 DNS 通道、记录签名或解析环境不可信,仍需单独评估配置投毒和降级风险。

十六、HTTPS RR 与 HTTP/3 有什么关系

HTTPS RR 可用 alpn="h3" 在连接前公布 HTTP/3 端点。相比先建立 HTTP/2 再从 Alt-Svc 学到 HTTP/3,它有机会减少首次访问升级到 QUIC 的等待。

两种发现机制可以并存。浏览器还会根据网络历史、UDP 可达性和失败缓存决定是否尝试。DNS 中出现 h3 不代表每次请求都必须使用 HTTP/3,也不能保证中间网络允许 QUIC。

十七、旧客户端会怎样处理

不认识 HTTPS RR 的客户端通常仍查询 A/AAAA 并按传统方式连接。为兼容这些客户端,运营者通常需要保留可用的 A/AAAA 和默认 HTTPS 服务,除非业务明确只面向支持新记录的客户端。

RFC 9460 对现有协议采用 SVCB 的客户端强调可选和回退行为。部署新记录应视为增加优化路径,不应在未验证用户群支持情况前拆掉传统路径。

十八、为什么需要 A 和 AAAA

ServiceMode TargetName 最终仍需要可连接地址。递归解析器可以在 Additional Section 附带相关 SVCB、A、AAAA 数据,客户端也可以自行继续查询。地址 Hint 不保证覆盖全部地址或保持最新。

若 TargetName 没有地址,且记录又没有可用机制提供端点,客户端无法仅凭 HTTPS RR 建立普通 IP 连接。排查时要沿 Alias、ServiceMode、TargetName 和地址记录逐层验证。

十九、DNSSEC 能提供什么

DNSSEC 可以验证 DNS 数据的来源真实性与完整性,减少记录在传输或缓存中被篡改的风险。它不加密查询,也不证明目标 Web 应用没有漏洞。DoH、DoT 等加密传输与 DNSSEC 解决不同问题。

即使 DNSSEC 验证成功,TLS 客户端仍要校验证书和 Origin。SVCB/HTTPS 优化连接参数,不能降低端到端身份认证要求。

二十、代理环境有什么特殊问题

使用域名型 HTTP CONNECT 或 SOCKS 代理时,客户端可能把最终域名交给代理解析,而本地不查询 A/AAAA。若代理侧不支持关联的 SVCB 解析,客户端单独查询 HTTPS RR 可能向另一个解析方泄露目的域名。

RFC 9460 要求实现考虑这种隐私边界。客户端应让代理或关联解析器执行一致的服务绑定解析,无法保证时则按规范禁用可选 SVCB 流程,而非拼接来自不同网络视角的数据。

二十一、常见配置错误

第一,在 AliasMode 写 SvcParams。第二,把较大 SvcPriority 当作更优。第三,把 Hint 当作唯一地址。第四,发布 h3 但 UDP 端口不可达。第五,TargetName 的证书身份配置错误。第六,删除传统 A/AAAA 后才发现大量客户端不支持 Type 65。

还要避免 Alias 循环、重复 SvcParamKey、无效参数值和不自洽 Mandatory 列表。RFC 9460 要求客户端把格式错误的 RRset 拒绝并回退到非 SVCB 连接流程。

二十二、上线前如何验证

先用权威查询确认区域文件已发布正确 Type、TTL 和 RDATA,再从不同递归解析器检查响应、Additional Section 和 DNSSEC 状态。分别测试支持与不支持 HTTPS RR 的客户端,验证 IPv4、IPv6、HTTP/2、HTTP/3 和代理场景。

记录每个 ServiceMode 端点的证书、端口、ALPN 和回退结果。更新时先缩短 TTL,保持旧端点覆盖缓存窗口,确认真实流量稳定后再移除兼容配置。

二十三、缓存会怎样影响变更

HTTPS RR、TargetName 的 A/AAAA 以及 Alias 链上的记录可以拥有不同 TTL,递归解析器和客户端也可能分别缓存。只修改其中一层,会在缓存窗口内产生新旧组合,因此端点迁移必须确保每种组合都仍可工作。

回滚时同样不能假定删除记录立即生效。应提前设计旧端点保留时间,监测按记录类型划分的查询和连接失败,并从真实客户端网络复测,而不是只查询权威服务器绕过缓存。

常见问题

1. HTTPS 记录等于把域名强制升级到 HTTPS 吗?

它包含针对 HTTP Origin 的特殊安全语义,但实际行为取决于支持 RFC 9460 的客户端。不能把它当作所有旧客户端都会理解的跳转机制。

2. AliasMode 可以同时设置 `alpn` 吗?

不应这样做。AliasMode 中的 SvcParams 会被忽略,连接参数应放在最终的 ServiceMode 记录中。

3. `ipv4hint` 可以替代 A 记录吗?

不能。它是连接优化提示,客户端仍需支持规范回退并使用地址解析结果。

4. 发布 `alpn="h3"` 就一定走 HTTP/3 吗?

不一定。客户端、服务器、UDP 网络、QUIC 和 TLS 都需支持,失败时客户端可以回退到其他协议。

5. HTTPS RR 可以替代 TLS 证书吗?

不能。客户端仍必须验证服务端证书与原始 Origin 身份,DNS 参数不替代 TLS 认证。

结论

SVCB 提供通用服务绑定模型,HTTPS 把它映射到 Web;AliasMode 负责服务级别别名,ServiceMode 负责端点与连接参数;SvcPriority 决定偏好顺序,SvcParams 描述 ALPN、端口、地址提示、Mandatory Key 和 ECH。安全部署需要同时保留地址解析、TLS 验证、旧客户端回退和可观测性,不能把一条新 DNS 记录当作完整连接方案。

参考来源

1. IETF RFC 9460:Service Binding and Parameter Specification via the DNS,https://www.rfc-editor.org/rfc/rfc9460

2. IETF RFC 9461:Service Binding Mapping for DNS Servers,https://www.rfc-editor.org/rfc/rfc9461

3. IETF RFC 9848:Bootstrapping TLS Encrypted ClientHello with DNS Service Bindings,https://www.rfc-editor.org/rfc/rfc9848

4. IETF RFC 9114:HTTP/3,https://www.rfc-editor.org/rfc/rfc9114

5. IANA:DNS SVCB Service Parameter Keys,https://www.iana.org/assignments/dns-svcb/

6. IANA:DNS Parameters,https://www.iana.org/assignments/dns-parameters/