Entête IGMP

Entête IGMP

1 – Définition du protocole IGMP

Le protocole IGMP (Internet Group Management Protocol) permet de gérer les déclarations d’appartenance à un ou plusieurs groupes auprès des routeurs Multicast. Les inscriptions sont soit spontanées soit après requête du routeur. Pour cela, l’hôte envoi une trame IGMP destinées à ce ou ces groupes. Il existe 2 version du protocole IGMP.

Vous trouverez tous les détails du protocole IGMP version 1 dans la RFC 1112.

Vous trouverez tous les détails du protocole IGMP version 2 dans la RFC 2236.

2 – Structure de l’entête IGMP

Voici la structure de l’entête IGMP V2 basé sur 8 octets.

entete-igmp entete igmp
De la même manière que l’entête ICMP, IGMP est un protocole de couche 3. Il est encapsulé dans IP afin d’être véhiculé sur un réseau IP. Le terme « Encapsulé » relate pourquoi ce protocole est en couche 3 et non pas en niveau 4.

3 – Définition des différents champs

3.1 – Type

Le champ Type est codé sur 8 bits et détermine la nature du message IGMP. Voici les 4 types de messages existant :

  • 11 – 00001011 – Requête pour identifier les groupes ayant des membres actifs. 
  • 12 – 00001100 – Rapport d’appartenance au groupe émis par un membre actif du groupe (IGMP version 1) 
  • 16 – 00010000 – Rapport d’appartenance au groupe émis par un membre actif du groupe (IGMP version 2) 
  • 17 – 00010001 – Un membre annonce son départ du groupe

3.2 – Temps de réponse max

Ce champ n’est utilisé que pour les messages de type 11. Il indique le temps d’attente maximum pour un client avant l’émission du rapport d’appartenance. L’unité utilisée est le 1/10 de seconde. Pour les autres types, ce champ est marqué à 0.

3.3 – Checksum

Le champ Checksum est codé sur 16 bits et représente la validité du paquet de la couche 3 IGMP. Pour pouvoir calculer le Checksum, il faut positionner le champ du checksum a 0. Ce calcul est strictement le même que celui du protocole ICMP.

Voici un exemple de fonction permettant le calcul du checksum IGMP :

unsigned short calcul_du_checksum(bool liberation, unsigned short *data, int taille)
     {
     unsigned long checksum=0;
     // ********************************************************
     // Complément à 1 de la somme des complément à 1 sur 16 bits
     // ********************************************************
     while(taille>1)
         {
         if (liberation==TRUE)
             liberation_du_jeton(); // Rend la main à la fenêtre principale
         checksum=checksum+*data++;
         taille=taille-sizeof(unsigned short);
         }
 
     if(taille)
         checksum=checksum+*(unsigned char*)data;
 
     checksum=(checksum>>16)+(checksum&0xffff);
     checksum=checksum+(checksum>>16);
 
     return (unsigned short)(~checksum);
     }
 
 unsigned short calcul_du_checksum_multicast(bool liberation, struct multicast multicast_tampon,char data_tampon[65535])
       {
       char tampon[65535];
       unsigned short checksum;
 
       // ********************************************************
       // Initialisation du checksum
       // ********************************************************
       multicast_tampon.checksum=0; // Doit être à 0 pour le calcul
 
       // ********************************************************
       // Calcul du Multicast
       // ********************************************************
       memcpy(tampon,(unsigned short *)&multicast_tampon,sizeof(struct multicast));
       memcpy(tampon+sizeof(struct multicast),data_tampon,strlen(data_tampon));
       checksum=calcul_du_checksum(liberation,(unsigned short*)tampon,sizeof(struct multicast)+strlen(data_tampon));
 
       return(checksum);
       }

3.4 – Adresse du groupe

Le champ Adresse du groupe est codé sur 32 bits et contient une adresse IP. Celle ci représente l’adresse du groupe d’appartenance ou 0 si l’inscription n’a pas encore eu lieu. Le type 11 place ce champ à 0 et les autres types marquent l’IP.

4 – La multidiffusion IGMP

La multidiffusion est une technique intégrée au protocole IP multicast qui permet à plusieurs hôtes destinataires de recevoir une même trame. Par rapport à du broadcast, qui s’adresse à tous les hôtes du réseau, le muticast ne s’adresse qu’à un groupe d’hôtes ciblées au sein du réseau.

entete-igmp multidiffusion

Le groupe d’ordinateur multicast est identifié par une adresse IP de groupe multicast « de classe D ». Le protocole permet à un hôte de s’enregistrer dans ce groupe.

Rappel : la plage d’adresses de classe D va de 224.0.0.1 à 239.255.255.254. Les adresses 224.0.0.1 à 224.0.0.255 sont réservés à des fonctions spécifiques au réseau local (LAN). Les adresses 239.0.0.0 – 239.255.255.255 sont réservées pour des usages privés.

5 – Routage et commutation multicast

Pour que le mécanisme fonctionne, il faut qu’il existe dans le réseau un routeur qui gère la fonction de multicast et qui puisse se joindre au groupe multicast. Les switches qui gèrent le protocole de multicast peuvent remplir ce rôle. Par contre la plupart des routeurs Internet ne le gèrent pas, ce qui explique qu’il est difficile d’utiliser cette technique nativement sur Internet.

entete-igmp routage commutation multicast

6 – Suivi du document

Création et suivi de la documentation par _SebF

Modification de la documentation par _SebF

  • Intégration de la version 2 du protocol de multicast.

Modification de la documentation par Christophe VARDON

  • Intégration du chapitre 4 sur la multidiffusion et du chapitre 5 sur le routage et la commutation multicast

7 – Discussion autour de l’entête IGMP

Vous pouvez poser toutes vos questions, faire part de vos remarques et partager vos expériences à propos de l’entête IGMP. Pour cela, n’hésitez pas à laisser un commentaire ci-dessous :

Commentaire et discussion

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *