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

サービスロケーションプロトコル(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があります。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。