メインコンテンツまでスキップ

2. ルール (Rules)

反復キャッシュ DNS リゾルバが NXDOMAIN 応答を受信した場合、それをキャッシュに保存すべきであり (SHOULD)、そのノード以下にあるすべての名前とリソースレコードセット (RRset) は到達不可能と見なされるべきである (SHOULD)。そのような名前に対するその後のクエリは、NXDOMAIN 応答を引き出すべきである (SHOULD)。

ただし、リゾルバが NXDOMAIN カットの下にデータをキャッシュしている場合、クエリを受信したときの追加処理を回避できる可能性があるため、(このキャッシュされたデータの TTL が期限切れになるまで) 返信としてそれを送信し続けてもよい (MAY)。セクション 6 では、これに関する詳細情報を提供します。

もう 1 つの例外は、検証リゾルバが、NXDOMAIN 応答が DNSSEC で検証された場合にのみ、(このセクションの最初の段落で説明されている)「NXDOMAIN カット」動作を実装することを決定してもよい (MAY) ことです。理由については、セクション 7 を参照してください。

サブツリーが存在しないという事実は永遠ではありません。[RFC2308] のセクション 3 では、NXDOMAIN 応答がキャッシュされる可能性のある時間 (「ネガティブ TTL」) についてすでに説明しています。

キャッシュされた非存在による NXDOMAIN 応答が DNSSEC 署名付きゾーンからのものである場合、名前の非存在を認証する NSEC または NSEC3 レコードが添付されます。元の NXDOMAIN 名の子孫の名前の場合、同じ NSEC または NSEC3 レコードのセットが子孫の名前の非存在を証明します。反復キャッシュリゾルバは、クエリに DNSSEC OK (DO) ビットが設定されている場合、トリガークエリへの応答でこれらの NSEC または NSEC3 レコードを返さなければなりません (MUST)。

警告: CNAME (または DNAME) のチェーンがある場合、存在しない名前はチェーンの最後 ([RFC6604]) であり、QNAME ではありません。キャッシュに保存されている NXDOMAIN は、拒否された名前に対するものであり、常に QNAME に対するものではありません。

これらのルールの結果の例として、存在しないドメイン 'foo.example' を持つリゾルバへの 2 つの連続したクエリを考えてみましょう。最初のクエリは 'foo.example' に対するもので (NXDOMAIN になります)、2 番目のクエリは 'bar.foo.example' に対するものです (これも NXDOMAIN になります)。今日、多くのリゾルバは両方のクエリを転送します。ただし、このドキュメントのルール (「NXDOMAIN カット」) に従うと、リゾルバは最初の NXDOMAIN 応答を非存在の兆候としてキャッシュし、権威サーバーに送信することなく、2 番目のクエリに対してすぐに NXDOMAIN 応答を返します。

最初の要求が 'bar.foo.example' に対するもので、2 番目の要求が 'baz.foo.example' に対するものである場合、最初の NXDOMAIN 応答は 'baz.foo.example' について何も教えてくれません。したがって、2 番目のクエリは、「NXDOMAIN カット」最適化を使用する前と同じように送信されます (付録 A を参照)。