3. Client Behavior (クライアントの動作)
"SVCB resolution (SVCB 解決)" は, クライアントが実行するサービスの利用可能なエンドポイントを列挙および順序付けするプロセスです。SVCB 解決は次のように実装されます:
-
$QNAME をサービス名とスキームの適切なプレフィックスを加えたものとします (セクション 2.3 を参照)。
-
$QNAME の SVCB クエリを発行します。
-
$QNAME に対して AliasMode SVCB レコードが返された場合 (通常の CNAME に従った後), $QNAME をその TargetName (追加のプレフィックスなし) に設定し, チェーン長の制限とループ検出ヒューリスティックに従って (セクション 3.1 を参照), ステップ 2 にループバックします。
-
1つ以上の "compatible (互換性のある)" (セクション 8) ServiceMode レコードが返された場合, これらは代替エンドポイントを表します。SvcPriority の昇順でレコードをソートします。
-
それ以外の場合, SVCB 解決は失敗し, 利用可能なエンドポイントのリストは空です。
この手順は, この仕様に準拠するか SVCB を認識する再帰的または権威 DNS サーバーに依存しません。
クライアントが ServiceMode レコードを使用せずに接続できる場合, そのクライアントは "SVCB-optional (SVCB オプション)" と呼ばれます。それ以外の場合は "SVCB-reliant (SVCB 依存)" と呼ばれます。既存のプロトコル (例: HTTP) のクライアントは SVCB-optional 動作を実装しなければなりません (SHALL) (セクション 3.1 に記載されている場合または将来の仕様によって変更される場合を除く)。
SVCB-optional クライアントは, SVCB レコードが存在しない場合に接続確立に必要となる可能性のある他の DNS クエリを並行して発行すべきです (SHOULD)。これにより, そのような場合の遅延を最小限に抑え, セクション 5 で説明する最適化を可能にします。
SVCB 解決が成功したかどうかにかかわらず, 少なくとも1つの AliasMode レコードが処理された場合, SVCB-optional クライアントは, $QNAME の最終値, 権威エンドポイントのポート番号, および SvcParams なしで構成されるエンドポイントをエンドポイントリストに追加しなければなりません (SHALL)。(このエンドポイントは, 非 SVCB 接続モードにフォールバックする前に試行されます。これにより, SVCB-optional クライアントは, TargetName に A および/または AAAA レコードを持つが SVCB レコードを持たない AliasMode レコードを利用できるようになります。)
クライアントは, このエンドポイントリストを使用して接続確立を続行します。クライアントは, より高い優先度の代替案を最初に試行し, より低い優先度の代替案にフォールバックすべきです (SHOULD)。クライアントは, 選択した TargetName の AAAA および/または A レコードを解決し, Happy Eyeballs [HappyEyeballsV2] などのアプローチを使用してそれらの間で選択してもかまいません (MAY)。
クライアントが SVCB-optional であり, このエンドポイントリストを使用した接続が失敗した場合, クライアントは非 SVCB 接続モードの使用を試みます。
通常の AAAA/A ルックアップと比較して追加の遅延を回避するための重要な最適化については, セクション 5 で説明しています。