サービスロケーションプロトコル(SLP、srvloc)は、コンピュータやその他のデバイスが事前の設定なしにローカルエリアネットワーク内のサービスを検出できるようにするサービス検出プロトコルです。SLPは、小規模な管理されていないネットワークから大規模なエンタープライズネットワークまで拡張できるように設計されています。標準化過程の文書として、RFC 2608およびRFC 3224で定義されています。
SLPは、デバイスがローカルネットワーク上でサービスをアナウンスするために使用されます。各サービスには、サービスを特定するために使用されるURLが必要です。さらに、属性と呼ばれる名前と値のペアを無制限に持つことができます。各デバイスは常に1つ以上のスコープに属している必要があります。スコープは単純な文字列であり、他のシステムのネットワーク近隣に相当し、サービスをグループ化するために使用されます。デバイスは、異なるスコープに属するサービスを認識することはできません。
プリンターのURLは次のようになります。
サービス:プリンター:lpr://myprinter/myqueue
この URL は、ホスト名が「myprinter」のプリンタ上の「myqueue」というキューを記述しています。プリンタで使用されるプロトコルはLPRです。プリンタでは特別な URL スキーム「service:」が使用されていることに注意してください。「service:」 URL は必須ではありません。任意の URL スキームを使用できますが、使用するプロトコルに関係なく、同じタイプのすべてのサービス (たとえば、すべてのプリンタ) を検索できます。「service:」 URL タイプ (「service:printer:lpr」) の最初の 3 つのコンポーネントは、サービス タイプとも呼ばれます。最初の 2 つのコンポーネント (「service:printer」) は、抽象サービス タイプと呼ばれます。「service:」以外の URL では、スキーマ名がサービス タイプです (たとえば、「http://www.wikipedia.org」の「http」)。
プリンターの属性は次のようになります。
(プリンター名=ヒューゴ) (プリンターの自然言語設定=en-us) (プリンター設置場所=自宅オフィス) (プリンター文書フォーマットサポート=application/postscript) (プリンターカラー対応=false) (プリンター圧縮サポート=deflate、gzip)
この例では、SLPにおける属性の標準構文を使用していますが、読みやすさを向上させるために改行のみを追加しています。
「service:」URLの定義と、そのURLに許可される属性は、URL構文と属性を形式的に記述したサービステンプレートによって規定されます。サービステンプレートはRFC 2609で定義されています。
SLPでは、サービスを検索し、サービスに関する情報を取得するために、いくつかのクエリタイプが利用可能です。
SLP(言語聴覚療法)では、機器に3つの異なる役割が割り当てられています。また、1つの機器が2つ、または3つすべての役割を同時に担うことも可能です。
現在、ほとんどの実装は、ユーザーエージェント(UA)とソフトウェアエージェント(SA)の両方として機能できるデーモンです。通常、デーモンはデーモンエージェント(DA)としても機能するように設定できます。
SLPはパケット指向プロトコルです。ほとんどのパケットはUDPを使用して送信されますが、より長いパケットの送信にはTCPも使用できます。UDPは信頼性に欠ける可能性があるため、SLPは応答が受信されるまで、すべてのマルチキャストを間隔を徐々に広げながら複数回繰り返します。すべてのデバイスはポート427でUDPパケットをリッスンする必要があります。サービスエージェント(SA)とディレクトリエージェント(DA)は、同じポートでTCPもリッスンする必要があります。マルチキャストはSLPで広く使用されており、特にネットワークに参加して他のデバイスを見つける必要があるデバイスで使用されます。
SLPの動作は、DAがネットワーク内に存在するかどうかによって大きく異なります。クライアントが初めてネットワークに参加すると、ネットワーク上のDAを問い合わせるクエリをマルチキャストします。応答するDAがない場合、クライアントはDAが存在しないネットワークに属しているとみなします。DAは、定義済みの間隔で「ハートビート」パケットをマルチキャストし、他のすべてのデバイスがこれを受信するため、後から追加することも可能です。SAがDAを検出すると、DA上のすべてのサービスを登録する必要があります。サービスが消滅した場合は、SAはDAに通知し、登録を解除する必要があります。
DA(データアクセスプロバイダ)が存在しないネットワークでクエリを送信するには、UA(ユーザーエージェント)はクエリを含むマルチキャストUDPパケットを送信します。一致するクエリを含むすべてのSA(サービスプロバイダ)は、UDP応答をUAに送信します。応答が大きすぎて単一のUDPパケットに収まらない場合、パケットは「オーバーフロー」としてマークされ、UAは任意のサイズのパケットを送信できるTCPを使用して、クエリをSAに直接送信できます。
DA(データアクセスプロバイダ)が存在するネットワークでクエリを送信するには、UA(ユーザーエージェント)はUDPまたはTCPを使用してクエリパケットをDAに送信します。すべてのSA(サービスプロバイダ)はすべてのサービスをDAに登録する必要があるため、DAはリクエストを完全に処理し、結果をUAに返送します。
SLPには、公開鍵暗号方式に基づいたセキュリティメカニズムが組み込まれており、サービスアナウンスへの署名が可能となっている。しかし、実際にはほとんど使用されていない。