4. 适用性
DNS Stateful Operations 适用于若干已知用例, 并且仅适用于能够支持 DSO Session 的传输.
4.1. 用例
以下描述 DNS Stateful Operations 的几个用例.
4.1.1. 会话管理
在一个用例中, 建立服务器定义的超时等会话参数对持久连接的一般管理非常有用. 例如, 对 stub-to-recursive DNS-over-TLS [RFC7858] 使用 DSO Sessions, 相比仅使用 edns-tcp-keepalive EDNS(0) Option [RFC7828] 尝试管理会话, 对客户端和服务器都更灵活. 本文档定义的一组简单 TLV 足以显著增强此用例的连接管理.
4.1.2. 长期订阅
在另一个用例中, 基于 DNS 的 Service Discovery (DNS-SD) [RFC6763] 已演进为自然基于会话的机制. 例如, 长期订阅相比轮询更适合 "push" 机制. 长期有状态连接和服务器发起的消息与该用例一致 [Push].
一个通用用例是 DNS 流量通常具有突发性, 但会话建立可能代价较高. 长连接面临的一项挑战是维持足够流量以保持 NAT 和防火墙状态. 为缓解此问题, 本文档为 DNS 引入一个新概念: DSO "keepalive traffic". 该流量不承载 DNS 数据, 在经典 DNS 意义上也不被视为 "activity", 但它用于维持中间盒状态, 并向客户端和服务器确认二者之间仍具备连接性.
4.2. 适用传输
DNS Stateful Operations 适用于以下场景: 在 DNS 客户端和服务器之间保持打开会话是有用的, 传输允许维持这样的会话, 并且传输保证 DSO 所依赖的消息按序递送. 满足支持 DNS Stateful Operations 要求的两个具体传输是 DNS-over-TCP [RFC1035] [RFC7766] 和 DNS-over-TLS [RFC7858].
需要注意, 对于 DNS-over-TLS, 没有机制可在连接中途从 DNS-over-TCP 升级到 DNS-over-TLS (见 DNS-over-TLS 规范 [RFC7858] 第 7 节). 连接要么从一开始就是 DNS-over-TCP, 要么从一开始就是 DNS-over-TLS.
DNS Stateful Operations 不适用于无法支持清晰会话语义或不保证按序递送的传输. 原则上可以在 UDP 之上构造这样的传输, 但当前 DNS-over-UDP [RFC1035] 规范不提供按序递送或会话语义, 因而不能使用. 类似地, DNS-over-HTTP [RFC8484] 也不能使用, 因为 HTTP 有自己的会话管理机制, 与这里规定的机制不兼容.
目前仅定义了 DNS-over-TCP 和 DNS-over-TLS 可与 DNS Stateful Operations 一起使用. 如果其他传输满足本节第一段提出的要求, 未来也可以添加.