サービス・ロケーション・プロトコル

サービスロケーションプロトコル  は IETF のドキュメント RFC 2165 および RFC 2608 によって標準化されたサービス発見のための通信プロトコルである。

1. 概要
-----

SLP においては、サービスの種類や属性を指定してネットワーク・サービスを検索することができる 。SLP は企業内ネットワークのようにきちんと管理されたネットワーク上で使用することを前提としていて、大域的なインターネットにおいて使用することはできない。SLP は単純なバイナリ・プロトコルだが、サービス名や属性などとしては可変長の文字列を指定するので、HTTP などに匹敵する拡張性がある。SLP はサービスに使用されるプロトコルには依存しないので、Web、電子メール、リアルタイム通信をはじめとする様々なサービスの発見のために使用することができる。特定の仕様をみたすサービスを検索するのが本来の用法だが、リアルタイム通信などにおいて特定の利用者やメディアを検索するような場合にも使用可能だと考えられる。

サービス検索のもっとも基本的な方法はつぎの 2 とおりである。いずれにおいても検索をおこなうのはユーザ・エージェントであり、サービスを広告するのはサービス・エージェントである。

1.1. ディレクトリを使用しない分散型の方法
-----------------------

下図 のようにマルチキャストを使用することによってユーザ・エージェントが未知のサービス・エージェントに質問をおくり、サービス・エージェントが直接こたえる方法である。

+------------+ ----Multicast SrvRqst----> +---------------+ | User Agent | | Service Agent | +------------+ <----Unicast SrvRply------ +---------------+ 　 マルチキャストを使用したサービス検索

1.2. ディレクトリを使用する集中型の方法
----------------------

下図のように、ユーザ・エージェントがあらかじめ知っているディレクトリ・エージェントにユニキャストを使用して質問する方法である。この場合、サービス・エージェントはあらかじめディレクトリ・エージェントに対してサービスを登録する。

+-------+ -Unicast SrvRqst-> +-----------+ <-Unicast SrvReg- +--------+ | User | | Directory | |Service | | Agent | | Agent | | Agent | +-------+ <-Unicast SrvRply- +-----------+ -Unicast SrvAck-> +--------+ 　ユニキャストを使用したサービス検索

なお、これらの 2 方法をくみあわせて、マルチキャストを使用した質問にディレクトリ・エージェントがこたえる方法もある。

サービス・エージェントは、サービスをサービス URL とサービス・テンプレートを使用して宣伝することができる。ネットワーク・プリンタのサービス・テンプレートの例を前記の C. Bettstetter らの論文から引用する。

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 は要求ドリブンのプロトコルである。つまり、ユーザ・エージェントが要求を送信しないかぎりはサービス・エージェント側に変化が起っても通知されない。しかし、2001 年 3 月に発行された RFC 3082 において実験された notification / subscription の機能を使用すればイベントドリブンでサービスを発見することも可能である。ただし、notification / subscription の機能は標準化されていない。

2. SLP の API
------------

1999 年 6 月に発行された RFC 2614 には C による SLP の API  の例が紹介されている。主要な関数の仕様は下記のとおりである。

2.1. サービス登録関数 SLPReg
----------------------

管理情報にサービスを登録するために次の関数が用意されている。

SLPError SLPReg; // コールバック時に使用されるメモリ

指定された URL およびサービス型をもつサービス宣伝を登録  する。

2.2. サービス登録解除関数 SLPDereg
--------------------------

管理情報からサービス登録を解除するために次の関数が用意されている。

SLPError SLPDereg; // コールバック時に使用されるメモリ 指定された URL をもつサービス宣伝の登録を解除  する。

2.3. サービス属性削除関数 SLPDelAttrs
-----------------------------

管理情報からサービス属性を削除するために次の関数が用意されている。

SLPError SLPDelAttrs; // コールバック時に使用されるメモリ

指定された URL をもつサービス宣伝から指定された属性を削除する。

2.4. サービス検索関数 SLPFindSrvTypes
-------------------------------

管理情報においてサービスを検索するために次の関数が用意されている。

SLPError SLPFindSrvTypes; // コールバック時に使用されるメモリ

サービス型を検索する。

2.5. サービス検索関数 SLPFindSrvs
---------------------------

管理情報においてサービスを検索するために次の関数が用意されている。

SLPError SLPFindSrvs; // コールバック時に使用されるメモリ

指定されたサービス型をもつサービスを検索する。

2.6. サービス属性検索関数 SLPFindAttrs
------------------------------

管理情報においてサービス属性を検索するために次の関数が用意されている。

SLPError SLPFindAttrs SLPAttrCallback callback, // 操作終了時に呼ばれるコールバック void *pvCookie); // コールバック時に使用されるメモリ

サービス属性を検索する。

3. SLP の実装
----------

SLP Version 1 は Hewlett Packard  社による JetSend 技術においてプリンタやデジタル・カメラなどの製品に採用され、他社の製品にも使用されている。

SLP Version 2 も HP 社の Web JetAdmin や Sun Microsystems 社の Solaris 8 などの製品に採用されている。

Mac OSでは初期のバージョンからAppleTalkによりサービス発見が可能であったが、Mac OS 8.5からSLP Version 1も採用された。Mac OS 9ではSLP Version 2に移行した。Mac OS X v10.2 JaguarからはRendezvousも実装されたためSLPの重要性が希薄になり、Mac OS X 10.5 LeopardでSLPは廃止された。

オープンソースの実装としては[1]がある。