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

6.2.2. SUBSCRIBE Response (SUBSCRIBE レスポンス)

6.2.2. SUBSCRIBE Response (SUBSCRIBE レスポンス)

SUBSCRIBE レスポンスは標準の DSO 12 バイトヘッダー [RFC8490] で始まります。ヘッダーの QR ビットは, これがレスポンスであることを示すように設定されます。ヘッダーの後には, Retry Delay Additional TLV などの 1 つ以上のオプションの Additional TLV が続く場合があります。SUBSCRIBE レスポンスは図 2 に示されています。

MESSAGE ID フィールドは, SUBSCRIBE リクエストの MESSAGE ID フィールドで指定された値をエコーしなければなりません。これは, クライアントがどのリクエストに応答しているかを知る方法です。

他のヘッダーフィールドは, DSO 仕様 [RFC8490] で説明されているように設定しなければなりません。DNS OPCODE フィールドには, DNS Stateful Operations (6) の OPCODE 値が含まれます。4 つのカウントフィールドはゼロでなければならず, 対応する 4 つのセクションは空 (つまり存在しない) でなければなりません。

SUBSCRIBE レスポンスメッセージには SUBSCRIBE TLV を含めてはなりません。クライアントが SUBSCRIBE TLV を含む SUBSCRIBE レスポンスメッセージを受信した場合, レスポンスメッセージは処理されますが, SUBSCRIBE TLV は静かに無視しなければなりません。

SUBSCRIBE レスポンスでは, RCODE はサブスクリプションが受け入れられたかどうかを示します。サポートされる RCODE は次のとおりです:

ニーモニック説明
NOERROR0SUBSCRIBE 成功。
FORMERR1不正な形式のリクエストのため, サーバーがリクエストの処理に失敗しました。
SERVFAIL2サーバーの問題のため, サーバーがリクエストの処理に失敗しました。
NOTIMP4サーバーは DSO を実装していません。
REFUSED5サーバーはポリシーまたはセキュリティ上の理由でリクエストの処理を拒否します。
NOTAUTH9サーバーは要求された名前に対して権威的ではありません。
DSOTYPENI11SUBSCRIBE 操作はサポートされていません。

表 1: SUBSCRIBE レスポンスコード

このドキュメントは, SUBSCRIBE レスポンスに対してこれらの RCODE 値のみを指定します。SUBSCRIBE レスポンスを送信するサーバーは, これらの値のいずれかを使用する必要があります。NXDOMAIN は SUBSCRIBE リクエストに対する有効な RCODE ではないことに注意してください。ただし, 将来の状況により, SUBSCRIBE レスポンスで他の RCODE 値が適切な状況が作成される可能性があるため, クライアントは他の非ゼロ RCODE エラー値を持つ SUBSCRIBE レスポンスを受け入れて処理する準備をしなければなりません。

サーバーが SUBSCRIBE レスポンスで非ゼロ RCODE を送信した場合, それは次のことを意味します:

a. クライアントが (少なくとも部分的に) 誤って設定されている, または b. サーバーリソースが枯渇している, または c. サーバーに他の未知の障害がある。

いずれの場合も, クライアントはこのサーバーへのサブスクリプションをすぐに再試行すべきではありません。セクション 6.1, パラグラフ 9, 項目 7 で説明されているように複数の SRV レコードが返された場合, 後続のサーバーを直ちに試すことができます。

クライアントがこのサーバーへの他の成功したサブスクリプションを持っている場合, 追加のサブスクリプションが拒否される可能性があっても, これらのサブスクリプションは残ります。クライアントもサーバーも接続を閉じる必要はありませんが, どちらの端もそうすることを選択できます。

サーバーが非ゼロ RCODE を送信する場合, クライアントがこの操作を再試行する前の遅延を指定する Retry Delay Additional TLV [RFC8490] をレスポンスに追加する必要があります。異なる RCODE 値の遅延の推奨値を以下に示します。これらの推奨値は, サーバーが Retry Delay Additional TLV に配置すべきデフォルト値と, サーバーが Retry Delay Additional TLV を提供しない場合にクライアントが想定すべきデフォルト値の両方に適用されます。

RCODE = 1 (FORMERR) の場合, 遅延は実装者が選択した任意の値で構いません。欠陥のあるクライアントからの高負荷のリスクを減らすために, 5 分の値が推奨されます。

RCODE = 2 (SERVFAIL) の場合, 遅延はサーバーの過負荷のレベルとその過負荷の予想される期間に応じて選択する必要があります。デフォルトでは, 1 分の値が推奨されます。より深刻なサーバー障害が発生した場合, 遅延は遭遇した特定の問題に応じてより長くなる場合があります。

RCODE = 4 (NOTIMP) の場合, これは DNS Stateful Operations [RFC8490] を実装していないサーバーで発生します。サーバーが次の数分間で DSO のサポートを開始する可能性は低いため, 再試行遅延は 1 時間にする必要があります。このような場合, DSO を実装していないサーバーは, そのレスポンスに Retry Delay Additional TLV を配置する可能性が低いことに注意してください。したがって, この推奨値は特に, クライアントがデフォルトで想定すべき内容に適用されます。

RCODE = 5 (REFUSED) の場合, これは DNS Push Notifications を実装しているが現在 DNS Push Notifications を許可しないように設定されているサーバーで発生します。再試行遅延は, 実装者が選択および/またはオペレーターが設定した任意の値で構いません。

照会されているサーバーがそのゾーンの "_dns-push-tls._tcp.<zone>" SRV レコードにリストされている場合, これは設定ミスです。このサーバーはこのゾーンの DNS Push Notifications をサポートしていると宣伝されていますが, サーバー自体は現在そのタスクを実行するように設定されていないためです。設定ミスはいつでも修復される可能性があるため, 再試行遅延を高く設定しすぎないでください。デフォルトでは, 5 分の値が推奨されます。

RCODE = 9 (NOTAUTH) の場合, これは DNS Push Notifications を実装しているが要求された名前に対して権威的であるように設定されていないサーバーで発生します。再試行遅延は, 実装者が選択および/またはオペレーターが設定した任意の値で構いません。

照会されているサーバーがそのゾーンの "_dns-push-tls._tcp.<zone>" SRV レコードにリストされている場合, これは設定ミスです。このサーバーはこのゾーンの DNS Push Notifications をサポートしていると宣伝されていますが, サーバー自体は現在そのタスクを実行するように設定されていないためです。設定ミスはいつでも修復される可能性があるため, 再試行遅延を高く設定しすぎないでください。デフォルトでは, 5 分の値が推奨されます。

RCODE = 11 (DSOTYPENI) の場合, これは DSO を実装しているが DNS Push Notifications を実装していないサーバーで発生します。サーバーが次の数分間で DNS Push Notifications のサポートを開始する可能性は低いため, 再試行遅延は 1 時間にする必要があります。

他の RCODE 値の場合, 再試行遅延は, そのエラー条件に適したようにサーバーが設定する必要があります。デフォルトでは, 5 分の値が推奨されます。

RCODE = 9 (NOTAUTH) の場合, 時間遅延は同じゾーン内の他の名前へのリクエストに適用されます。他のゾーン内の名前へのリクエストは遅延の対象ではありません。他のすべての RCODE の場合, 時間遅延はこのサーバーへのすべての後続リクエストに適用されます。

エラーレスポンスを送信した後, サーバーはセッションを開いたままにすることを許可する場合があります。または, DSO 仕様 [RFC8490] で説明されているようにセッションを閉じるようにクライアントに指示する DSO Retry Delay 操作 (Retry Delay Primary TLV を使用) をその後に続けることができます。クライアントは両方のケースを正しく処理しなければなりません。DSO Retry Delay 操作 (Retry Delay Primary TLV を使用) は, 上記の Retry Delay Additional TLV とは異なることに注意してください。