キャッシュ・データの編成

キャッシュは、順方向ルックアップおよび逆方向ルックアップの情報用の別個の論理構造を持つ 1 つの物理的な場所に収容されます。キャッシュ・データは、DNS ネーム・サーバーによって編成されます。それにより、特定のホスト名または IP アドレスに対して、複数のネーム・サーバーで異なる値を提供できます。

例えば、図 1 に示されているインストール済み環境があるとします。 2 つの TCP スタックがあります。1 つの TCP スタックは中核的な実動処理のために使用され、2 つ目の TCP スタックはテスト目的でのみ使用されます。実稼働環境からテスト・リソースを分離するために、それらのスタックは別々のネーム・サーバーを使用します。各ネーム・サーバーは、host.ibm.com の場合のように、同じホスト名に対して異なる IPv4 (A レコード) 定義を持つことができます。 テスト・アプリケーションが host.ibm.com に対する照会を発行した場合、テスト TCP スタックはテスト・ネーム・サーバーへ要求を送信し、IP アドレス 10.45.5.5 を取得します。実動アプリケーションが同じ照会を発行した場合は、異なる IP アドレス (10.145.5.5) を取得します。リゾルバーは両方の応答をキャッシュしますが、応答がどちらのネーム・サーバーから取得されたものかを記憶します。そのため、host.ibm.com に対するテスト・アプリケーションからのそれ以降の要求に、実動 IP アドレスではなく、正しいテスト IP アドレスを返します。

図 1. リゾルバー・キャッシング・プロセス。各スタックで 1 つの NSINTERRADDR 値を指定
各スタックに異なる NSINTERADDR 値がある場合のキャッシング。host.ibm.com の照会はスタックの異なる IP アドレスになる

リゾルバーは、TCPIP.DATA データ・セット内の NSINTERADDR 検索順序リストを使用してキャッシュ・ルックアップを実行します。図 1 では、各スタックは単一の NSINTERADDR 値を指定しています。実際には、図 2 で示されているように、複数の NSINTERADDR 定義が提供される可能性が高くなります。このインストール済み環境の例では、1 次ネーム・サーバーが使用不可能な場合、代わりに 2 次ネーム・サーバーが使用されます。リゾルバーは、NSINTERADDR リスト内の任意のネーム・サーバーに関連付けられたキャッシュ・エントリーをターゲット・ホスト名と一致すると見なします。ネーム・レゾリューションは完了し、DNS 照会はどのネーム・サーバーにも送信されません。リゾルバーは、NSINTERADDR リスト内のネーム・サーバーの順序で、キャッシュを検索します。したがって、何らかの理由で同じターゲット・ホスト名に対して複数のエントリー (NSINTERADDR リスト内のネーム・サーバーそれぞれから 1 つ) が存在する場合には、リスト内の最初のネーム・サーバーによって提供される情報が使用されます。図 2 では、テスト・アプリケーションで host.ibm.com に対して照会を出すと、リスト内の最初のネーム・サーバー IP アドレスが現在の実動ネーム・サーバー (10.6.6.6) であるため、IP アドレス 10.145.5.5 が取得されます。実動アプリケーションで同じ照会を出すと、キャッシュにはリストの最初のネーム・サーバーから host.ibm.com に対するエントリーはないが、2 番目のネーム・サーバー (これもまた 10.6.6.6) からのキャッシュ情報があるため、同じ IP アドレス 10.145.5.5 が取得されます。

図 2. リゾルバー・キャッシング・プロセス。各スタックで複数の NSINTERRADDR 値を指定
各スタックで複数の NSINTERRADDR 値を指定する場合のリゾルバー・キャッシング・プロセスおよび照会結果。

IPv4 情報および IPv6 情報は、別々のエントリーとしてキャッシュされます。そのホスト名に関するデータを提供する各ネーム・サーバーで、ホスト名ごとに最大で 35 個の IP アドレスが保管されます。