5. 资源记录集 (Resource Record Sets)
资源记录集 (RRSet) 是具有相同 NAME、CLASS 和 TYPE 的所有资源记录 (RR) 的集合. 例如,某个域的 MX 记录集合就是一个 RRSet;该域的 A 记录集合是另一个 RRSet。
一个区域可能包含名称、类和类型相同但 TTL 不同的 RR,它们被当作单个 RRSet 处理. 这是一个问题,因为 RRSet 被视为单一实体,其中各个 RR 的 TTL 必须相同.
RRSet 的处理规则如下:
5.1. 从 RRSet 发送 RR (Sending RRs from an RRSet)
服务器在应答中发送 RRSet 时,必须发送该 RRSet 中的全部 RR. 如果服务器只 发送部分 RRSet(例如由于消息大小限制),则必须设置 TC 位(见第 9 节).
5.2. RRSet 中 RR 的 TTL (TTLs of RRs in an RRSet)
RRSet 中所有 RR 的 TTL 必须相同. 如果服务器收到的 RRSet 中 TTL 不同,则 必须使用该 RRSet 中 TTL 最小的 RR 的 TTL 作为该 RRSet 的 TTL. 这与 RFC1035 要求 RRSet 中所有 RR 具有相同 TTL 的规定有所不同.
注意,这与本文档前一版本不同,前一版本曾规定:若 RRSet 中 RR 的 TTL 不全 相同,则 RRSet 的 TTL 未定义.
5.3. DNSSEC 特殊情况 (DNSSEC Special Cases)
DNSSEC [RFC2065] 引入了 RRSet 处理的一些特殊情况. 特别是,覆盖一个 RRSet 的 SIG 记录必须与该 RRSet 具有相同的 TTL. 这样要求是为了让 SIG 记录及其 所覆盖的 RRSet 一起被缓存和过期.
5.4. 接收 RRSet (Receiving RRSets)
服务器收到 RRSet 时,必须检查该 RRSet 中所有 RR 的 TTL 是否相同. 若不同, 则必须使用最小的 TTL 作为该 RRSet 的 TTL.
解析器不得缓存 TTL 为零的 RRSet. 也就是说,TTL 为零的 RRSet 不得被缓存.
5.5. 发送 RRSet (再述) (Sending RRSets (reprise))
服务器在应答中发送 RRSet 时,必须发送该 RRSet 中的全部 RR. 如果服务器只 发送部分 RRSet(例如由于消息大小限制),则必须设置 TC 位(见第 9 节). 除非 设置了 TC 位,否则服务器不得将 RRSet 拆分到多条消息中;除非设置了 TC 位, 否则客户端不得从多条消息中重组 RRSet.