Entête IGMP
par _SebF
1 -
Définition du
protocole
2 - Structure de l'entête
3 -
Définition des différents
champs
3.1 -
Type
3.2 -
Temps de réponse max
3.3 -
Checksum
3.4 -
Adresse du groupe
4 - Discussion autour de la
documentation
5 -
Suivi du document
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.
Voici la structure de l'entête IGMP V2 basé sur 8 octets.

De la même manière qu'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.
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
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.
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_igmp(bool
liberation, struct igmp igmp_tampon,char
data_tampon[65535])
{
char tampon[65535];
unsigned
short checksum;
//
********************************************************
// Initialisation du checksum
//
********************************************************
igmp_tampon.checksum=0; // Doit
être à 0 pour le calcul
//
********************************************************
//
Calcul du IGMP
//
********************************************************
memcpy(tampon,(unsigned short *)&igmp_tampon,sizeof(struct
igmp));
memcpy(tampon+sizeof(struct
igmp),data_tampon,strlen(data_tampon));
checksum=calcul_du_checksum(liberation,(unsigned short*)tampon,sizeof(struct
igmp)+strlen(data_tampon));
return(checksum);
} |
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.
Vous pouvez poser toutes vos questions,
vos remarques et vos expériences à propos de l'entête IGMP. Pour cela,
rendez-vous sur le
Forum "TCP-IP".
Le 14 novembre 2003, par _SebF, intégration de la version 2
d'IGMP.
Le 23 septembre 2003, par _SebF, création du document.
|