サービスロケーションプロトコル(SLP)とは
サービスロケーションプロトコル(SLP)は、ネットワークに接続されたデバイスやアプリケーションが提供するサービスを、クライアントが動的に発見するための
通信プロトコルです。IETFによってRFC 2165およびRFC 2608で標準化されています。主に企業内ネットワークのような、管理された環境での利用を想定しており、
インターネットのような広範なネットワークでの利用は考慮されていません。
SLPの概要
SLPは、サービスの種類や属性に基づいてネットワークサービスを検索することができます。属性指定検索にはRFC 3059で標準化された属性リスト拡張が使用されます。SLPはシンプルなバイナリプロトコルでありながら、サービス名や属性には可変長の文字列を使用するため、HTTPに匹敵する拡張性を持っています。また、SLPはサービスが使用するプロトコルに依存しないため、Web、
電子メール、リアルタイム通信など、さまざまなサービスの発見に利用できます。
SLPの動作原理
SLPにおけるサービス検索は、主に以下の2つの方法で行われます。
1.
分散型検索(ディレクトリ不使用)
- ユーザーエージェントが
マルチキャストを使用して、ネットワーク上のサービスエージェントに直接質問を送信し、サービスエージェントがユニキャストで応答します。
2.
集中型検索(ディレクトリ使用)
- ユーザーエージェントが、事前に知っている
ディレクトリエージェントに対してユニキャストで質問を送信します。サービスエージェントは、あらかじめ
ディレクトリエージェントにサービスを登録しておきます。
これらの方法を組み合わせて、
マルチキャストを使用した質問に
ディレクトリエージェントが応答することも可能です。
サービス広告
サービスエージェントは、サービスURLとサービステンプレートを使用してサービスを宣伝します。以下は、ネットワークプリンタのサービステンプレートの例です。
service:printer://lj4050.tum.de:1020/queue1
scopes = tum, bmw, administrator
printer-name = lj4050
printer-model = HP LJ4050 N
printer-location = Room 0409
color-supported = false
pages-per-minute = 9
sides-supported = one-sided, two-sided
SLPの特性
SLPは要求ドリブンプロトコルであり、ユーザーエージェントが要求を送信しない限り、サービスエージェント側の変更は通知されません。しかし、RFC 3082で実験された通知/サブスクリプション機能を利用すれば、イベントドリブンなサービス発見も可能ですが、この機能は標準化されていません。
SLPのAPI
RFC 2614には、C言語でのSLPのAPI例が紹介されています。主要な関数は以下の通りです。
サービス登録関数 `SLPReg()`
サービスを管理情報に登録します。
c
SLPError SLPReg(SLPHandle hSLP, const char
pcSrvURL, const unsigned short usLifetime,
const char pcSrvType, const char
pcAttrs, SLPBoolean fresh,
SLPRegReport callback, void pvCookie);
サービス登録解除関数 `SLPDereg()`
管理情報からサービス登録を解除します。
c
SLPError SLPDereg(SLPHandle hSLP, const char
pcURL, SLPRegReport callback, void pvCookie);
サービス属性削除関数 `SLPDelAttrs()`
管理情報からサービス属性を削除します。
c
SLPError SLPDelAttrs(SLPHandle hSLP, const char
pcURL, const char pcAttrs,
SLPRegReport callback, void
pvCookie);
サービス検索関数 `SLPFindSrvTypes()`
管理情報からサービス型を検索します。
c
SLPError SLPFindSrvTypes(SLPHandle hSLP, const char pcNamingAuthority,
const char
pcScopeList, SLPSrvTypeCallback callback,
void pvCookie);
サービス検索関数 `SLPFindSrvs()`
管理情報から指定されたサービス型のサービスを検索します。
c
SLPError SLPFindSrvs(SLPHandle hSLP, const char
pcServiceType, const char pcScopeList,
const char
pcSearchFilter, SLPSrvURLCallback callback,
void pvCookie);
サービス属性検索関数 `SLPFindAttrs()`
管理情報からサービス属性を検索します。
c
SLPError SLPFindAttrs(SLPHandle hSLP, const char
pcURLOrServiceType, const char pcScopeList,
const char
pcAttrIds, SLPAttrCallback callback, void pvCookie);
SLPの実装例
SLP Version 1は、Hewlett Packard(HP)社のJetSend技術でプリンタやデジタルカメラに採用され、他社製品にも使用されています。SLP Version 2も、HPのWeb JetAdminやSun Microsystems社のSolaris 8などに採用されています。
AppleのMac OSでは、初期バージョンから
AppleTalkによるサービス発見が可能でしたが、Mac OS 8.5からSLP Version 1も採用されました。Mac OS 9ではSLP Version 2に移行しましたが、
Mac OS X v10.2 Jaguar以降はRendezvous(
Bonjour)の導入によりSLPの重要性が薄れ、Mac OS X 10.5 LeopardでSLPは廃止されました。オープンソースの実装としては、OpenSLPがあります。