SLPの基本

Service Location Protocolでは、次の3種類のコンポーネントが定義されています。

ユーザエージェントは、クライアントがサービスを問い合わせたり、サービスがそれ自体を通知するためのプログラムインタフェースを提供します。ユーザエージェントはディレクトリエージェントに接続し、指定したスコープ内の指定したサービスクラスに登録されたサービスを問い合わせます。

サービスエージェントは、SLPで登録されたローカルサービスを持続的に格納し、維持する場所を提供します。サービスエージェントは主として、登録済みのローカルサービスをメモリ内データベースとして維持します。この場合、サービスはローカルSAがない限りSLPで登録できません。クライアントがサービスを検出するのはUAライブラリ内のみですが、登録するにはSAが必要です。これは主に、ディレクトリエージェントを受信して登録を維持するためには、登録済みサービスの存在をSAが定期的に表明する必要があるためです。

ディレクトリエージェントは、通知されたサービスに対して長期間持続的にキャッシュを提供し、ユーザエージェントがサービスを検索するためのアクセスポイントとなります。キャッシュ機能を提供するDAは、SAが新しいサービスを通知するのを受信し、これらの通知をキャッシュします。DAのキャッシュは短時間で完了します。ディレクトリエージェントは、期限切れのアルゴリズムを使用してエントリキャッシュを有効期限切れにします。ディレクトリエージェントが起動すると、持続的な格納領域(通常はハードドライブ)からキャッシュを読み込み、アルゴリズムに従ってエントリを有効期限切れにします。新しいDAが起動したり、キャッシュが削除されると、DAはこの条件を検出して受信中のすべてのSAに特別な通知を送信します。SAは、DAが直ちにキャッシュを作成できるようにローカルデータベースをダンプします。

ディレクトリエージェントが存在しない場合、UAはSAが応答できる一般的なマルチキャスト方式のクエリを使用し、DAがキャッシュを作成するのとほぼ同じ方法で、要求されたサービスのリストを作成します。このクエリによって返されるサービスのリストは、DAが提供するリストと比較すると不完全かつ局所的です。特に、多くのネットワーク管理者が使用するマルチキャスト方式でのフィルタ処理では、ブロードキャストおよびマルチキャストの対象がローカルサブネットのみに制限されるためです。

つまり、指定されたスコープに対してユーザエージェントが検索するものは、すべてディレクトリエージェントに依存します。


Novell Service Location Providers

NovellのバージョンのSLPでは、強力なサービスアドバータイズ環境を提供するため、SLP標準が一部変更されます。しかし、このために一部の拡張性を犠牲にしています。

たとえば、サービスアドバータイズのフレームワークの拡張性を改善するために、サブネット上でのブロードキャストまたはマルチキャストのパケット数が制限されます。SLPの仕様では、これを管理するために、ディレクトリエージェントのクエリに関してサービスエージェントおよびユーザエージェントに制限を加えています。必要なスコープに対応するための最初に検出されたディレクトリエージェントは、サービスエージェント(つまり結果的にローカルユーザエージェント)がそのスコープ上の将来の要求すべてに使用するエージェントとなります。

Novell SLPを実装すると、クエリ情報の検索について既知のディレクトリエージェントをすべてスキャンします。スキャンの所要時間は300ミリ秒とかなり長く、したがって、約3〜5秒以内で10台のサーバしかスキャンできません。SLPがネットワーク上で正しく設定されている場合にはこのような検索の必要はありません。OpenSLPでは、ネットワークが実際にSLPトラフィック用に設定されていると見なされます。OpenSLPの応答タイムアウト値はNovellのSLPサービスプロバイダの応答タイムアウト値よりも大きい値です。ディレクトリエージェント数は、エージェントの情報が正確で完全であるかどうかに関係なく、最初に応答するディレクトリエージェントに制限されます。


ユーザエージェント

ユーザエージェントの物理形式は、アプリケーションにリンクされたスタティックライブラリまたはダイナミックライブラリです。ユーザエージェントにより、アプリケーションはSLPサービスに対して問い合わせることができます。

ユーザエージェントは、アルゴリズムに従って、クエリの送信先になるディレクトリエージェントのアドレスを取得します。指定したスコープのDAアドレスを取得すると、ユーザエージェントはそのスコープから応答がなくなるまで同じアドレスを使用し続けます。応答がなくなると、ユーザエージェントはそのスコープに対する別のDAアドレスを取得します。ユーザエージェントは、指定されたスコープのディレクトリエージェントのアドレスを次の方法で検索します。

  1. 現在の要求上のソケットハンドルが、指定したスコープのDAに接続されているかどうかをチェックする(要求がマルチパート要求の場合は、要求に対してキャッシュされた接続がすでに存在している可能性があります)。
  2. 指定したスコープと一致しているDAの、既知のローカルDAキャッシュをチェックする。
  3. 指定したスコープでローカルSAに対してDAを確認する(その後キャッシュに新しいアドレスを追加します)。
  4. 指定したスコープに一致するDAのネットワーク設定済みのアドレスをDHCPに問い合わせる(その後キャッシュに新しいアドレスを追加します)。
  5. 既知のポートでDAの検出要求をマルチキャストする(その後キャッシュに新しいアドレスを追加します)。

スコープを指定しない場合、指定スコープは「デフォルト」になります。つまり、SLP設定ファイルで静的に定義されたスコープがなく、クエリでスコープを指定していない場合は、使用されるスコープは「デフォルト」という単語になります。また、eDirectoryの登録ではeDirectoryはスコープを指定しないことに注意してください。つまり、eDirectoryで使用されるスコープは常に「デフォルト」というわけではありません。スコープが静的に設定されている場合、そのスコープがすべてのローカルUA要求およびSA登録に対して、指定したスコープがない場合のデフォルトのスコープになります。


サービスエージェント

サービスエージェントの物理形式は、ホストマシン上での個別のプロセスです。Win32の場合は、slpd.exeがローカルマシン上のサービスとして実行されます。ユーザエージェントは、既知のポート上のループバックアドレスにメッセージを送信することによって、ローカルサービスエージェントを問い合わせます。

サービスエージェントは、潜在DAアドレスにDA検出要求を直接送信することにより、ディレクトリエージェントおよびそれがサポートするスコープリストを検出してキャッシュします。DA検出要求は、次の方法で送信されます。

  1. 静的に設定されたDAアドレスをすべてチェックする(その後SAの既知のDAキャッシュに新しいDAアドレスを追加します)。
  2. DHCPからDAとスコープのリストを要求する(その後SAの既知のDAキャッシュに新しいリストを追加します)。
  3. 既知のポートでDAの検出要求をマルチキャストする(その後SAの既知のDAキャッシュに新しいポートを追加します)。
  4. DAによって定期的にブロードキャストされたDAのアドバータイズパケットを受信する(その後SAの既知のDAキャッシュに新しいアドバータイズパケットを追加します)。

ユーザエージェントは常に最初にローカルサービスエージェントに対して問い合わせます。ローカルサービスエージェントの応答によってユーザエージェントが次の検出段階を続行するかどうかが決定されるため、このことは重要な点です(DHCPのこのケースについては、ユーザエージェントの手順3および4を参照してください)。