Résumé

  • La RFC 1112 rendit les adhésions multicast visibles par des requêtes et rapports locaux, mais la temporisation aléatoire permettait au message d’un hôte de représenter le groupe sans en compter les membres.
  • IGMPv1 ne comportait pas de message de départ : le routeur ne savait que le dernier récepteur parti qu’après l’arrêt des rapports et l’expiration de l’état. La RFC 2236 ajouta ensuite un signal de départ plus rapide.

Une adresse de groupe n’était pas une liste d’invités

Une adresse IP multicast pouvait être permanente même lorsqu’aucun hôte n’appartenait au groupe. Un hôte pouvait aussi envoyer des datagrammes à ce groupe sans le rejoindre. Dans la RFC 1112, Stephen Deering séparait ces faits : l’adresse désignait le groupe, tandis que l’adhésion était tenue par hôte et par interface réseau. Une application pouvait demander à IP de rejoindre ou de quitter le groupe ; le routeur voisin devait, lui, savoir si le réseau local comptait encore un intéressé.

La norme distinguait deux niveaux de prise en charge. Un hôte de niveau 1 pouvait émettre du multicast, sans adhérer à un groupe ni implémenter IGMP. Le niveau 2 ajoutait l’adhésion et le protocole qui informait le routeur multicast voisin. L’adresse ne disait donc pas qui recevrait les paquets : il fallait un signal récent du segment local.

Pourquoi le premier rapport n’arrivait pas seul

Le routeur envoyait une Host Membership Query à l’adresse tous-hôtes 224.0.0.1. Chaque hôte de niveau 2 examinait alors ses adhésions sur cette interface. Des réponses immédiates auraient provoqué une rafale de paquets de contrôle identiques. La RFC 1112 attribuait plutôt à chaque adhésion un délai aléatoire. Si un hôte entendait un rapport valide pour le même groupe avant l’expiration de son délai, il annulait son propre rapport en attente. Une seule réponse suffisait alors à indiquer qu’au moins un membre subsistait.

C’était une compression volontaire de l’information. Le routeur ne recevait ni décompte, ni liste des machines, ni preuve que chaque application était prête à consommer le trafic. Il recevait un indice de présence du groupe sur un réseau local. Ce choix réduisait les messages redondants, mais écartait des informations inutiles à la décision de transfert.

L’arrivée dans un nouveau groupe suivait une autre règle : l’hôte devait signaler rapidement son adhésion, car il pouvait être le premier du réseau. La norme recommandait une ou deux répétitions pour se prémunir contre la perte du premier rapport. Le multicast restait toutefois en best effort : rien ne garantissait que chaque membre reçoive intact le datagramme ni qu’ils le reçoivent dans le même ordre. La signalisation d’adhésion informait le routeur sans garantir la livraison.

Le silence après le dernier récepteur

IGMPv1 définissait les Queries et les Reports, mais aucun message Leave Group. Lorsqu’un hôte quittait le groupe, son module IP cessait de le considérer comme membre ; le routeur n’en était pas averti immédiatement. Les requêtes périodiques actualisaient son état. Sans nouveau rapport, le temporisateur d’adhésion finissait par expirer. La simplicité du protocole laissait ainsi subsister un état après le départ du dernier récepteur.

Il ne s’agissait pas d’une croyance éternelle du routeur, mais d’un délai borné par les temporisateurs de requête et d’adhésion. Pour les groupes à fort débit ou les réseaux où les membres changent souvent, ce délai pouvait entraîner la poursuite du transfert vers un segment sans récepteur.

La RFC 2236 ajouta ensuite à IGMPv2 un message Leave Group. Le routeur qui interrogeait le réseau lançait des requêtes propres au groupe et attendait un rapport avant de conclure à l’absence de membres. Le nouveau protocole ne transformait pas le silence en certitude : il raccourcissait la période d’incertitude et cherchait un autre récepteur.

Le compromis historique est précis. IGMPv1 économisait le trafic de contrôle en posant une question de présence. Un rapport pouvait faire taire les autres, tout en laissant au routeur assez d’information pour décider s’il devait continuer à transférer le groupe. Mais le routeur ne pouvait pas savoir combien de membres se cachaient derrière ce rapport unique, ni quand le dernier venait de partir.

Sources