Concepts fondamentaux de SLP

Le protocole SLP spécifie trois composants :

La fonction de l'agent utilisateur est de fournir une interface par programmation aux clients pour les requêtes de services, et aux services pour leur permettre de s'annoncer. Un agent utilisateur contacte un agent Annuaire pour interroger des services enregistrés d'une classe de service et d'une étendue spécifiées.

La tâche de l'agent de service consiste à fournir des points de stockage et de maintenance persistants pour les services locaux enregistrés auprès de SLP. L'agent de service a pour tâche principale de gérer une base de données en mémoire des services locaux enregistrés. En fait, un service ne peut pas s'enregistrer auprès de SLP tant qu'un agent de service local n'est pas présent. Les clients peuvent seulement découvrir les services au moyen d'une bibliothèque d'agent Utilisateur, mais l'enregistrement demande un agent Service (SA), principalement parce qu'un SA doit régulièrement vérifier l'existence de services enregistrés pour maintenir l'enregistrement des agents Annuaire à l'écoute.

Le travail de l'agent Annuaire consiste à fournir un cache persistant à long terme pour les services annoncés ainsi qu'un point d'accès permettant aux agents utilisateur de rechercher des services. En tant que cache, l'agent Annuaire reste à l'écoute de l'annonce de nouveaux services par les agents de service et met en cache ces notifications. À court terme, le cache d'un agent Annuaire grossit rapidement. Les agents Annuaire utilisent un algorithme d'expiration pour faire expirer les entrées de cache. Lorsqu'un agent Annuaire s'active, il lit le cache du stockage persistant (en général un disque dur), puis commence à faire expirer les entrées selon l'algorithme. Lorsqu'un nouvel agent Annuaire s'active ou lorsqu'un cache a été supprimé, l'agent Annuaire détecte la condition et envoie une notification spéciale à tous les agents Service à l'écoute pour qu'ils vident leurs bases de données locales, de manière que l'agent Annuaire puisse rapidement créer son cache.

En l'absence d'agents Annuaire, l'agent Utilisateur effectue une requête de multidiffusion générale à laquelle les agents Service peuvent répondre, construisant ainsi la liste des services demandés de la même manière que les agents Annuaire créent leur cache. La liste des services renvoyée par une telle requête est incomplète et bien plus localisée que celle fournie par un agent Annuaire, notamment en présence d'un filtrage multidiffusion mis en œuvre par un grand nombre d'administrateurs réseaux, lesquels limitent les diffusions et les multidiffusions au sous-réseau local seulement.

En bref, tout s'articule autour de l'agent Annuaire trouvé par un agent utilisateur sur une étendue donnée.


Protocole SLP Novell

La version Novell de SLP prend certaines libertés vis-à-vis de la norme SLP afin de fournir un environnement d'annonce de service renforcé, mais au prix d'une certaine évolutivité.

Par exemple, pour améliorer l'évolutivité d'une structure d'annonce de service, nous cherchons à limiter le nombre de paquets diffusés ou multidiffusés sur un sous-réseau. La norme SLP gère ce facteur en imposant des limitations aux agents de service et utilisateur concernant les requêtes à l'agent Annuaire. Le premier agent Annuaire découvert à desservir l'étendue souhaitée est celui qu'un agent de service (et par conséquent des agents utilisateur locaux) va utiliser pour toutes les requêtes à venir sur cette étendue.

La mise en œuvre de Novell SLP permet d'analyser tous les agents Annuaire connus, à la recherche des informations de la requête. Un aller-retour de 300 millisecondes étant considéré comme trop long, 10 serveurs peuvent être balayés en 3 à 5 secondes. Il n'est pas nécessaire d'effectuer cette opération si SLP est configuré correctement sur le réseau et qu'OpenSLP considère le réseau comme configuré correctement pour le trafic SLP. Les valeurs de timeout de réponse d'OpenSLP sont supérieures à celles du prestataire de services SLP de Novell, ce qui limite le nombre d'agents Annuaire au premier qui répond, que ses informations soient ou non précises et complètes.


Agents utilisateur

Un agent utilisateur prend la forme physique d'une bibliothèque statique ou dynamique liée à une application. Il permet à l'application d'émettre des requêtes de services SLP.

Les agents utilisateur suivent un algorithme pour obtenir l'adresse d'un agent Annuaire auquel envoyer les requêtes. Une fois qu'ils ont obtenu une adresse d'agent Annuaire sur une étendue spécifiée, ils continuent à utiliser cette adresse pour cette étendue jusqu'à ce qu'elle ne réponde plus. Là, ils se procurent une autre adresse pour l'étendue. Les agents utilisateur localisent l'adresse d'un agent Annuaire sur une étendue spécifiée en :

  1. vérifiant si l'identificateur de socket de la requête en cours est connecté à un agent Annuaire pour l'étendue indiquée ; (S'il se trouve que la requête fait partie d'une requête en plusieurs parties, il peut déjà exister une connexion en cache dans la requête.)
  2. recherchant dans le cache de l'agent Annuaire connu un agent Annuaire correspondant à l'étendue indiquée ;
  3. recherchant auprès de l'agent de service un agent Annuaire de l'étendue spécifiée (et en ajoutant de nouvelles adresses au cache) ;
  4. interrogeant DHCP pour obtenir des adresses d'agents Annuaire configurées pour le réseau et correspondant à l'étendue indiquée (et en ajoutant de nouvelles adresses au cache) ;
  5. envoyant une requête de découverte d'agent Annuaire par multidiffusion sur un port connu (et en ajoutant de nouvelles adresses au cache).

L'étendue indiquée est celle « par défaut », sauf spécification contraire. Cela signifie que si aucune étendue n'est définie de façon statique dans le fichier de configuration SLP et qu'aucune étendue n'est indiquée dans la requête, alors l'étendue utilisée est le mot « default ». Notez également que eDirectory n'indique jamais d'étendue dans ses enregistrements. Cela ne signifie pas que l'étendue toujours utilisée avec eDirectory soit « default ». En fait, s'il existe une étendue configurée statiquement, celle-ci devient l'étendue par défaut pour les requêtes à l'agent Utilisateur local et les enregistrements de l'agent Service en l'absence d'une étendue spécifiée.


Agents de service

Les agents de service prennent la forme physique d'un processus distinct exécuté sur la machine hôte. Dans le cas de Win32, slpd.exe s'exécute en tant que service sur l'ordinateur local. Des agents utilisateur interrogent l'agent de service local en envoyant des messages à l'adresse de bouclage sur un port connu.

Un agent de service localise et met en cache les agents Annuaire et la liste de l'étendue qu'ils prennent en charge en envoyant directement une requête de découverte d'agent Annuaire à des adresses d'agent Annuaire potentielles en :

  1. vérifiant toutes les adresses d'agent Annuaire configurées statiquement (et en ajoutant de nouvelles au cache d'agent Annuaire connu de l'agent de service) ;
  2. demandant la liste des agents Annuaire et des étendues à DHCP (et en en ajoutant de nouveaux au cache d'agent Annuaire connu de l'agent de service) ;
  3. envoyant une requête de découverte d'agent Annuaire par multidiffusion sur un port connu (et en en ajoutant de nouvelles au cache d'agent Annuaire connu de l'agent de service) ;
  4. recevant les paquets d'annonce régulièrement diffusés par les agents Annuaire (et en ajoutant les nouveaux au cache d'agent Annuaire connu de l'agent de service).

Puisqu'un agent utilisateur interroge toujours l'agent de service local en premier, cela est important, car la réponse de l'agent de service local détermine si l'agent utilisateur passe ou non à l'étape suivante de la découverte (dans ce cas, DHCP-- voir étapes 3 et 4 de la section Agents utilisateur).