Aller au contenu principal

3. Protocol Description (Description du protocole)

3. Protocol Description (Description du protocole)

Notez que les valeurs par défaut des minuteries sont décrites plus loin dans ce document. Les noms de minuterie et de compteur apparaissent entre crochets.

Le terme "interface" est parfois utilisé dans ce document pour signifier "l'interface principale sur un réseau attaché" ; si un routeur a plusieurs interfaces physiques sur un seul réseau, ce protocole n'a besoin de fonctionner que sur l'une d'entre elles. Les hôtes, en revanche, doivent effectuer leurs actions sur toutes les interfaces auxquelles sont associées des appartenances.

Les routeurs de multidiffusion utilisent IGMP pour savoir quels groupes ont des membres sur chacun de leurs réseaux physiques attachés. Un routeur de multidiffusion conserve une liste des appartenances aux groupes de multidiffusion pour chaque réseau attaché, et une minuterie pour chaque appartenance. "Appartenances aux groupes de multidiffusion" signifie la présence d'au moins un membre d'un groupe de multidiffusion sur un réseau attaché donné, et non une liste de tous les membres. En ce qui concerne chacun de ses réseaux attachés, un routeur de multidiffusion peut assumer l'un des deux rôles suivants : Querier (Interrogateur) ou Non-Querier (Non-Interrogateur). Il n'y a normalement qu'un seul Querier par réseau physique. Tous les routeurs de multidiffusion démarrent en tant que Querier sur chaque réseau attaché. Si un routeur de multidiffusion entend un message Query provenant d'un routeur avec une adresse IP inférieure, il DOIT devenir un Non-Querier sur ce réseau. Si un routeur n'a pas entendu de message Query d'un autre routeur pendant [Other Querier Present Interval] (Intervalle de présence d'un autre interrogateur), il reprend le rôle de Querier. Les routeurs envoient périodiquement [Query Interval] (Intervalle de requête) une General Query (Requête générale) sur chaque réseau attaché pour lequel ce routeur est le Querier, afin de solliciter des informations d'appartenance. Au démarrage, un routeur DEVRAIT envoyer [Startup Query Count] (Nombre de requêtes de démarrage) General Queries espacées de manière rapprochée [Startup Query Interval] (Intervalle de requête de démarrage) afin de déterminer rapidement et de manière fiable les informations d'appartenance. Une General Query est adressée au groupe de multidiffusion de tous les systèmes (224.0.0.1), a un champ Group Address (Adresse de groupe) de 0, et a un Max Response Time (Temps de réponse maximal) de [Query Response Interval] (Intervalle de réponse à la requête).

Lorsqu'un hôte reçoit une General Query, il définit des minuteries de retard pour chaque groupe (à l'exclusion du groupe de tous les systèmes) dont il est membre sur l'interface à partir de laquelle il a reçu la requête. Chaque minuterie est réglée sur une valeur aléatoire différente, en utilisant la granularité d'horloge la plus élevée disponible sur l'hôte, sélectionnée dans la plage (0, Max Response Time], avec Max Response Time tel que spécifié dans le paquet Query. Lorsqu'un hôte reçoit une Group-Specific Query (Requête spécifique au groupe), il règle une minuterie de retard sur une valeur aléatoire sélectionnée dans la plage (0, Max Response Time] comme ci-dessus pour le groupe interrogé s'il est membre sur l'interface à partir de laquelle il a reçu la requête. Si une minuterie pour le groupe est déjà en cours d'exécution, elle n'est réinitialisée à la valeur aléatoire que si le Max Response Time demandé est inférieur à la valeur restante de la minuterie en cours d'exécution. Lorsque la minuterie d'un groupe expire, l'hôte multidiffuse un Version 2 Membership Report (Rapport d'appartenance version 2) au groupe, avec un IP TTL de 1. Si l'hôte reçoit le rapport d'un autre hôte (version 1 ou 2) alors qu'il a une minuterie en cours d'exécution, il arrête sa minuterie pour le groupe spécifié et n'envoie pas de rapport, afin de supprimer les rapports en double.

Lorsqu'un routeur reçoit un Report, il ajoute le groupe signalé à la liste des appartenances aux groupes de multidiffusion sur le réseau sur lequel il a reçu le rapport et règle la minuterie pour l'appartenance à [Group Membership Interval] (Intervalle d'appartenance au groupe). Les rapports répétés rafraîchissent la minuterie. Si aucun rapport n'est reçu pour un groupe particulier avant l'expiration de cette minuterie, le routeur suppose que le groupe n'a pas de membres locaux et qu'il n'a pas besoin de transmettre des multidiffusions d'origine distante pour ce groupe sur le réseau attaché.

Lorsqu'un hôte rejoint un groupe de multidiffusion, il devrait immédiatement transmettre un Version 2 Membership Report non sollicité pour ce groupe, au cas où il serait le premier membre de ce groupe sur le réseau. Pour couvrir la possibilité que le Membership Report initial soit perdu ou endommagé, il est recommandé qu'il soit répété une ou deux fois après de courts délais [Unsolicited Report Interval] (Intervalle de rapport non sollicité). (Un moyen simple d'accomplir cela est d'envoyer le Version 2 Membership Report initial, puis d'agir comme si une Group-Specific Query avait été reçue pour ce groupe, et de régler une minuterie de manière appropriée).

Lorsqu'un hôte quitte un groupe de multidiffusion, s'il était le dernier hôte à répondre à une Query avec un Membership Report pour ce groupe, il DEVRAIT envoyer un message Leave Group (Quitter le groupe) au groupe de multidiffusion de tous les routeurs (224.0.0.2). S'il n'était pas le dernier hôte à répondre à une Query, il PEUT ne rien envoyer car il doit y avoir un autre membre sur le sous-réseau. C'est une optimisation pour réduire le trafic ; un hôte sans stockage suffisant pour se souvenir s'il était ou non le dernier hôte à répondre PEUT toujours envoyer un message Leave Group lorsqu'il quitte un groupe. Les routeurs DEVRAIENT accepter un message Leave Group adressé au groupe quitté, afin de s'adapter aux implémentations d'une version antérieure de cette norme. Les messages Leave Group sont adressés au groupe de tous les routeurs car les autres membres du groupe n'ont pas besoin de savoir qu'un hôte a quitté le groupe, mais il n'y a aucun mal à adresser le message au groupe.

Lorsqu'un Querier reçoit un message Leave Group pour un groupe qui a des membres de groupe sur l'interface de réception, il envoie [Last Member Query Count] (Nombre de requêtes du dernier membre) Group-Specific Queries tous les [Last Member Query Interval] (Intervalle de requête du dernier membre) au groupe quitté. Ces Group-Specific Queries ont leur Max Response time réglé sur [Last Member Query Interval]. Si aucun rapport n'est reçu après l'expiration du temps de réponse de la dernière requête, les routeurs supposent que le groupe n'a pas de membres locaux, comme ci-dessus. Toute transition de Querier à non-Querier est ignorée pendant ce temps ; le même routeur continue d'envoyer les Group-Specific Queries.

Les Non-Queriers DOIVENT ignorer les messages Leave Group, et les Queriers DEVRAIENT ignorer les messages Leave Group pour lesquels il n'y a pas de membres de groupe sur l'interface de réception.

Lorsqu'un non-Querier reçoit un message Group-Specific Query, si sa minuterie d'appartenance au groupe existante est supérieure à [Last Member Query Count] fois le Max Response Time spécifié dans le message, il règle sa minuterie d'appartenance au groupe à cette valeur.