[ Top page ]

« SIP, SIMPLE における登録・発見 | メイン | Jini と JiniME »

登録・発見

Service Location Protocol

Service Location Protocol (SLP) は IETF のドキュメント RFC 2165 (初版,J. Veizades, E. Guttman, C. Perkins, S. Kaplan: Service Location Protocol) および RFC 2608 (改訂版,E. Guttman, C. Perkins, J. Veizades, M. Day: Service Location Protocol, Version 2) によって標準化されたサービス発見のためのプロトコルである.

SLP の概要

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

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

(1) ディレクトリを使用しない分散型の方法
図 1 (前記の RFC 2608 から引用) のようにマルチキャストを使用することによってユーザエージェントが未知のサービス・エージェントに質問をおくり,サービス・エージェントが直接こたえる方法である.

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

(2) ディレクトリを使用する集中型の方法
図 2 (前記の RFC 2608 から引用) のように,ユーザエージェントがあらかじめ知っているディレクトリ・エージェントにユニキャストを使用して質問する方法である.この場合,サービス・エージェントはあらかじめディレクトリ・エージェントに対してサービスを登録する.

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

なお,これらの 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 (J. Kempf, J. Goldschmidt: Notification and Subscription for SLP) において実験された notification / subscription の機能を使用すればイベント駆動でサービスを発見することも可能である.ただし,notification / subscription の機能は標準化されていない.

SLP の API

1999 年 6 月に発行された RFC 2614 (J. Kempf and E. Guttman: An API for Service Location) には C による SLP の API の例が紹介されている.主要な関数の仕様は下記のとおりである.

(1) サービス登録関数 SLPReg()
管理情報にサービスを登録するために次の関数が用意されている.
 SLPError SLPReg(SLPHandle   hSLP,	// SLP の管理情報
                const char  *pcSrvURL,	// サービス URL
                const unsigned short usLifetime,
                const char  *pcSrvType,	// サービス型
                const char  *pcAttrs	 // 宣伝の属性
                SLPBoolean  fresh,
                SLPRegReport callback,  // 操作終了時に呼ばれるコールバック
                void *pvCookie);	 // コールバック時に使用されるメモリ

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

(2) サービス登録解除関数 SLPDereg()
管理情報からサービス登録を解除するために次の関数が用意されている.
   SLPError SLPDereg(SLPHandle  hSLP,	// SLP の管理情報
                     const char *pcURL,	// サービス URL
                     SLPRegReport callback,
					 // 操作終了時に呼ばれるコールバック
                     void *pvCookie);    // コールバック時に使用されるメモリ

指定された URL をもつサービス宣伝の登録を解除 (deregister) する.

(3) サービス属性削除関数 SLPDelAttrs()
管理情報からサービス属性を削除するために次の関数が用意されている.
 SLPError SLPDelAttrs(SLPHandle   hSLP,		// SLP の管理情報
                     const char  *pcURL,	// サービス URL
                     const char  *pcAttrs,	// 削除する属性
                     SLPRegReport callback,
					// 操作終了時に呼ばれるコールバック
                     void *pvCookie);   // コールバック時に使用されるメモリ

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

(4) サービス検索関数 SLPFindSrvTypes()
管理情報においてサービスを検索するために次の関数が用意されている.
   SLPError SLPFindSrvTypes(SLPHandle hSLP,	// SLP の管理情報
                            const char  *pcNamingAuthority,
					// 検索するべき naming authority
                            const char  *pcScopeList,
					// 検索するべきスコープのリスト
                            SLPSrvTypeCallback callback,
					// 操作終了時に呼ばれるコールバック
                            void *pvCookie);
					// コールバック時に使用されるメモリ

サービス型を検索する.

(5) サービス検索関数 SLPFindSrvs()
管理情報においてサービスを検索するために次の関数が用意されている.
   SLPError SLPFindSrvs(SLPHandle  hSLP,	// SLP の管理情報
                        const char *pcServiceType, // サービス型
                        const char *pcScopeList,
					// 検索するべきスコープのリスト
                        const char *pcSearchFilter, // 検索フィルタ
                        SLPSrvURLCallback callback,
					// 操作終了時に呼ばれるコールバック
                        void *pvCookie);
					// コールバック時に使用されるメモリ
指定されたサービス型をもつサービスを検索する.
(6) サービス属性検索関数 SLPFindAttrs()
管理情報においてサービス属性を検索するために次の関数が用意されている.
   SLPError SLPFindAttrs(SLPHandle hSLP,	// SLP の管理情報
                         const char *pcURLOrServiceType, 
					// URL またはサービス型
                         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 などの製品に採用されている.SLP のリファレンス実装 (reference implementation) は http://www.srvloc.org/ からダウンロードすることができる.

Keywords: Service Location Protocol, 要求駆動, イベント駆動, 要求ドリブン, イベントドリブン

コメントを投稿

Powered by
Movable Type 3.36