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 を送信しなければ なりません (must)。サーバーが部分的な RRSet を送信する場合 (たとえばメッセージ サイズの制限により)、TC ビットを設定しなければなりません (must) (第 9 節参照)。
5.2. RRSet 内の RR の TTL (TTLs of RRs in an RRSet)
RRSet 内のすべての RR の TTL は同じでなければなりません (must)。サーバーが TTL の 異なる RRSet を受信した場合、RRSet 内で最も小さい TTL を持つ RR の TTL を、その RRSet の TTL として使用しなければなりません (must)。これは、RRSet 内のすべての RR が同じ TTL を持つことを求めていた RFC1035 からの変更です。
なお、これは本書の前身 (RRSet 内の RR の TTL がすべて同じでない場合、RRSet の TTL は 未定義であるとしていた) からの変更である点に注意してください。
5.3. DNSSEC の特殊な場合 (DNSSEC Special Cases)
DNSSEC [RFC2065] は RRSet の取り扱いに関するいくつかの特殊な場合を導入します。 特に、RRSet をカバーする SIG レコードは、それがカバーする RRSet と同じ TTL を持た なければなりません (must)。これは、SIG レコードとそれがカバーする RRSet が一緒に キャッシュされ、一緒に期限切れになるようにするために要求されます。
5.4. RRSet の受信 (Receiving RRSets)
サーバーが RRSet を受信した場合、その RRSet 内のすべての RR の TTL が同じであるか 確認しなければなりません (must)。異なる場合は、最も小さい TTL をその RRSet の TTL として使用しなければなりません (must)。
リゾルバは、TTL がゼロの RRSet をキャッシュしてはなりません (must not)。すなわち、 TTL がゼロの RRSet はキャッシュされてはなりません。
5.5. RRSet の送信 (再考) (Sending RRSets (reprise))
サーバーが応答で RRSet を送信する際は、その RRSet 内のすべての RR を送信しなければ なりません (must)。サーバーが部分的な RRSet を送信する場合 (たとえばメッセージ サイズの制限により)、TC ビットを設定しなければなりません (must) (第 9 節参照)。 TC ビットが設定されていない限り、サーバーは RRSet を複数のメッセージに分割しては ならず (must not)、クライアントも TC ビットが設定されていない限り複数のメッセージ から RRSet を再構成してはなりません (must not)。