Aller au contenu principal

4. Formats de messages

4. Formats de messages

Les messages IGMP sont encapsulés dans des datagrammes IPv4, avec un numéro de protocole IP de 2. Chaque message IGMP décrit dans ce document est envoyé avec un IP Time-to-Live de 1, une IP Precedence de Internetwork Control (par exemple, Type of Service 0xc0), et porte une option IP Router Alert [RFC-2113] dans son en-tête IP. Les types de messages IGMP sont enregistrés par l'IANA [IANA-REG] comme décrit par [RFC-3228].

Il existe deux types de messages IGMP concernés par le protocole IGMPv3 décrit dans ce document:

Type Number (hex)Message Name
0x11Membership Query
0x22Version 3 Membership Report

Une implémentation d'IGMPv3 DOIT également prendre en charge les trois types de messages suivants, pour l'interopération avec les versions précédentes d'IGMP (voir section 7):

Type Number (hex)Message NameReference
0x12Version 1 Membership Report[RFC-1112]
0x16Version 2 Membership Report[RFC-2236]
0x17Version 2 Leave Group[RFC-2236]

Les types de messages non reconnus DOIVENT être ignorés silencieusement. D'autres types de messages peuvent être utilisés par des versions plus récentes ou des extensions d'IGMP, par des protocoles de routage multicast, ou pour d'autres usages.

Dans ce document, sauf qualification contraire, les mots capitalisés "Query" et "Report" se réfèrent respectivement aux IGMP Membership Queries et aux IGMP Version 3 Membership Reports.

4.1. Message Membership Query

Les Membership Queries sont envoyés par les routeurs multicast IP pour interroger l'état de réception multicast des interfaces voisines. Les Queries ont le format suivant:

    0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x11 | Max Resp Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resv |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- . -+
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4.1.1. Max Resp Code

Le champ Max Resp Code spécifie le temps maximum autorisé avant l'envoi d'un rapport de réponse. Le temps réellement autorisé, appelé Max Resp Time, est représenté en unités de 1/10 de seconde et est dérivé du Max Resp Code comme suit:

Si Max Resp Code < 128, Max Resp Time = Max Resp Code

Si Max Resp Code >= 128, Max Resp Code représente une valeur à virgule flottante comme suit:

    0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+

Max Resp Time = (mant | 0x10) << (exp + 3)

Les petites valeurs de Max Resp Time permettent aux routeurs IGMPv3 d'ajuster la "latence de départ" (le temps entre le moment où le dernier hôte quitte un groupe et le moment où le protocole de routage est notifié qu'il n'y a plus de membres). Les valeurs plus grandes, en particulier dans la plage exponentielle, permettent d'ajuster le caractère en rafale du trafic IGMP sur un réseau.

4.1.2. Checksum

Le Checksum est le complément à un sur 16 bits de la somme en complément à un de l'ensemble du message IGMP (la charge utile IP complète). Pour calculer le checksum, le champ Checksum est mis à zéro. Lors de la réception de paquets, le checksum DOIT être vérifié avant de traiter un paquet. [RFC-1071]

4.1.3. Group Address

Le champ Group Address est mis à zéro lors de l'envoi d'une General Query, et mis à l'adresse multicast IP interrogée lors de l'envoi d'une Group-Specific Query ou Group-and-Source-Specific Query (voir section 4.1.9, ci-dessous).

4.1.4. Resv (Reserved)

Le champ Resv est mis à zéro à la transmission, et ignoré à la réception.

4.1.5. S Flag (Suppress Router-Side Processing)

Lorsqu'il est mis à un, le S Flag indique à tous les routeurs multicast receveurs qu'ils doivent supprimer les mises à jour de minuterie normales qu'ils effectuent lors de l'écoute d'une Query. Il ne supprime cependant pas l'élection du querier ou le traitement normal "côté hôte" d'une Query qu'un routeur peut être tenu d'effectuer en conséquence d'être lui-même un membre de groupe.

4.1.6. QRV (Querier's Robustness Variable)

S'il n'est pas nul, le champ QRV contient la valeur [Robustness Variable] utilisée par le querier, c'est-à-dire l'émetteur de la Query. Si la [Robustness Variable] du querier dépasse 7, la valeur maximale du champ QRV, le QRV est mis à zéro. Les routeurs adoptent la valeur QRV de la Query la plus récemment reçue comme leur propre valeur [Robustness Variable], sauf si ce QRV le plus récemment reçu était zéro, auquel cas les récepteurs utilisent la valeur [Robustness Variable] par défaut spécifiée dans la section 8.1 ou une valeur configurée statiquement.

4.1.7. QQIC (Querier's Query Interval Code)

Le champ Querier's Query Interval Code spécifie le [Query Interval] utilisé par le querier. L'intervalle réel, appelé Querier's Query Interval (QQI), est représenté en unités de secondes et est dérivé du Querier's Query Interval Code comme suit:

Si QQIC < 128, QQI = QQIC

Si QQIC >= 128, QQIC représente une valeur à virgule flottante comme suit:

    0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+

QQI = (mant | 0x10) << (exp + 3)

Les routeurs multicast qui ne sont pas le querier actuel adoptent la valeur QQI de la Query la plus récemment reçue comme leur propre valeur [Query Interval], sauf si ce QQI le plus récemment reçu était zéro, auquel cas les routeurs receveurs utilisent la valeur [Query Interval] par défaut spécifiée dans la section 8.2.

4.1.8. Number of Sources (N)

Le champ Number of Sources (N) spécifie combien d'adresses source sont présentes dans la Query. Ce nombre est zéro dans une General Query ou une Group-Specific Query, et non nul dans une Group-and-Source-Specific Query. Ce nombre est limité par la MTU du réseau sur lequel la Query est transmise. Par exemple, sur un Ethernet avec une MTU de 1500 octets, l'en-tête IP incluant l'option Router Alert consomme 24 octets, et les champs IGMP jusqu'au champ Number of Sources (N) inclus consomment 12 octets, laissant 1464 octets pour les adresses source, ce qui limite le nombre d'adresses source à 366 (1464/4).

4.1.9. Source Address [i]

Les champs Source Address [i] sont un vecteur de n adresses unicast IP, où n est la valeur dans le champ Number of Sources (N).

4.1.10. Additional Data

Si le champ Packet Length dans l'en-tête IP d'une Query reçue indique qu'il y a des octets de données supplémentaires présents, au-delà des champs décrits ici, les implémentations IGMPv3 DOIVENT inclure ces octets dans le calcul pour vérifier le Checksum IGMP reçu, mais DOIVENT autrement ignorer ces octets supplémentaires. Lors de l'envoi d'une Query, une implémentation IGMPv3 NE DOIT PAS inclure d'octets supplémentaires au-delà des champs décrits ici.

4.1.11. Variantes de Query

Il existe trois variantes du message Query:

  1. Une "General Query" est envoyée par un routeur multicast pour connaître l'état complet de réception multicast des interfaces voisines (c'est-à-dire les interfaces attachées au réseau sur lequel la Query est transmise). Dans une General Query, le champ Group Address et le champ Number of Sources (N) sont tous deux zéro.

  2. Une "Group-Specific Query" est envoyée par un routeur multicast pour connaître l'état de réception, par rapport à une seule adresse multicast, des interfaces voisines. Dans une Group-Specific Query, le champ Group Address contient l'adresse multicast d'intérêt, et le champ Number of Sources (N) contient zéro.

  3. Une "Group-and-Source-Specific Query" est envoyée par un routeur multicast pour savoir si une interface voisine désire la réception de paquets envoyés à une adresse multicast spécifiée, provenant de l'une des sources d'une liste spécifiée. Dans une Group-and-Source-Specific Query, le champ Group Address contient l'adresse multicast d'intérêt, et les champs Source Address [i] contiennent la ou les adresses source d'intérêt.

4.1.12. Adresses de destination IP pour les Queries

Dans IGMPv3, les General Queries sont envoyées avec une adresse de destination IP de 224.0.0.1, l'adresse multicast all-systems. Les Group-Specific et Group-and-Source-Specific Queries sont envoyées avec une adresse de destination IP égale à l'adresse multicast d'intérêt. Cependant, un système DOIT accepter et traiter toute Query dont le champ IP Destination Address contient n'importe laquelle des adresses (unicast ou multicast) attribuées à l'interface sur laquelle la Query arrive.

4.2. Message Version 3 Membership Report

Les Version 3 Membership Reports sont envoyés par les systèmes IP pour signaler (aux routeurs voisins) l'état actuel de réception multicast, ou les changements dans l'état de réception multicast, de leurs interfaces. Les Reports ont le format suivant:

    0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x22 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved | Number of Group Records (M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [1] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [2] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . |
. . .
| . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Group Record [M] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

où chaque Group Record a le format interne suivant:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Multicast Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+- -+
| Source Address [2] |
+- -+
. . .
. . .
. . .
+- -+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. .
. Auxiliary Data .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4.2.1. Reserved

Les champs Reserved sont mis à zéro à la transmission, et ignorés à la réception.

4.2.2. Checksum

Le Checksum est le complément à un sur 16 bits de la somme en complément à un de l'ensemble du message IGMP (la charge utile IP complète). Pour calculer le checksum, le champ Checksum est mis à zéro. Lors de la réception de paquets, le checksum DOIT être vérifié avant de traiter un message.

4.2.3. Number of Group Records (M)

Le champ Number of Group Records (M) spécifie combien de Group Records sont présents dans ce Report.

4.2.4. Group Record

Chaque Group Record est un bloc de champs contenant des informations relatives à l'appartenance de l'émetteur à un seul groupe multicast sur l'interface à partir de laquelle le Report est envoyé.

4.2.5. Record Type

Voir section 4.2.12, ci-dessous.

4.2.6. Aux Data Len

Le champ Aux Data Len contient la longueur du champ Auxiliary Data dans ce Group Record, en unités de mots de 32 bits. Il peut contenir zéro, pour indiquer l'absence de données auxiliaires.

4.2.7. Number of Sources (N)

Le champ Number of Sources (N) spécifie combien d'adresses source sont présentes dans ce Group Record.

4.2.8. Multicast Address

Le champ Multicast Address contient l'adresse multicast IP à laquelle ce Group Record se rapporte.

4.2.9. Source Address [i]

Les champs Source Address [i] sont un vecteur de n adresses unicast IP, où n est la valeur dans le champ Number of Sources (N) de cet enregistrement.

4.2.10. Auxiliary Data

Le champ Auxiliary Data, s'il est présent, contient des informations supplémentaires relatives à ce Group Record. Le protocole spécifié dans ce document, IGMPv3, ne définit aucune donnée auxiliaire. Par conséquent, les implémentations d'IGMPv3 NE DOIVENT PAS inclure de données auxiliaires (c'est-à-dire DOIVENT mettre le champ Aux Data Len à zéro) dans tout Group Record transmis, et DOIVENT ignorer toute donnée auxiliaire présente dans tout Group Record reçu. La sémantique et l'encodage interne du champ Auxiliary Data doivent être définis par toute version future ou extension d'IGMP qui utilise ce champ.

4.2.11. Additional Data

Si le champ Packet Length dans l'en-tête IP d'un Report reçu indique qu'il y a des octets de données supplémentaires présents, au-delà du dernier Group Record, les implémentations IGMPv3 DOIVENT inclure ces octets dans le calcul pour vérifier le Checksum IGMP reçu, mais DOIVENT autrement ignorer ces octets supplémentaires. Lors de l'envoi d'un Report, une implémentation IGMPv3 NE DOIT PAS inclure d'octets supplémentaires au-delà du dernier Group Record.

4.2.12. Types de Group Record

Il existe plusieurs types différents de Group Records qui peuvent être inclus dans un message Report:

  • Un "Current-State Record" est envoyé par un système en réponse à une Query reçue sur une interface. Il signale l'état de réception actuel de cette interface, par rapport à une seule adresse multicast. Le Record Type d'un Current-State Record peut être l'une des deux valeurs suivantes:

    ValueName and Meaning
    1MODE_IS_INCLUDE - indique que l'interface a un mode de filtre INCLUDE pour l'adresse multicast spécifiée. Les champs Source Address [i] dans ce Group Record contiennent la liste source de l'interface pour l'adresse multicast spécifiée, si elle n'est pas vide.
    2MODE_IS_EXCLUDE - indique que l'interface a un mode de filtre EXCLUDE pour l'adresse multicast spécifiée. Les champs Source Address [i] dans ce Group Record contiennent la liste source de l'interface pour l'adresse multicast spécifiée, si elle n'est pas vide.
  • Un "Filter-Mode-Change Record" est envoyé par un système chaque fois qu'une invocation locale d'IPMulticastListen provoque un changement du mode de filtre (c'est-à-dire un changement de INCLUDE à EXCLUDE, ou de EXCLUDE à INCLUDE), de l'entrée d'état au niveau de l'interface pour une adresse multicast particulière. Le Record est inclus dans un Report envoyé depuis l'interface sur laquelle le changement s'est produit. Le Record Type d'un Filter-Mode-Change Record peut être l'une des deux valeurs suivantes:

    ValueName and Meaning
    3CHANGE_TO_INCLUDE_MODE - indique que l'interface est passée en mode de filtre INCLUDE pour l'adresse multicast spécifiée. Les champs Source Address [i] dans ce Group Record contiennent la nouvelle liste source de l'interface pour l'adresse multicast spécifiée, si elle n'est pas vide.
    4CHANGE_TO_EXCLUDE_MODE - indique que l'interface est passée en mode de filtre EXCLUDE pour l'adresse multicast spécifiée. Les champs Source Address [i] dans ce Group Record contiennent la nouvelle liste source de l'interface pour l'adresse multicast spécifiée, si elle n'est pas vide.
  • Un "Source-List-Change Record" est envoyé par un système chaque fois qu'une invocation locale d'IPMulticastListen provoque un changement de liste source qui n'est pas coïncident avec un changement de mode de filtre, de l'entrée d'état au niveau de l'interface pour une adresse multicast particulière. Le Record est inclus dans un Report envoyé depuis l'interface sur laquelle le changement s'est produit. Le Record Type d'un Source-List-Change Record peut être l'une des deux valeurs suivantes:

    ValueName and Meaning
    5ALLOW_NEW_SOURCES - indique que les champs Source Address [i] dans ce Group Record contiennent une liste des sources supplémentaires que le système souhaite entendre, pour les paquets envoyés à l'adresse multicast spécifiée. Si le changement concernait une liste source INCLUDE, ce sont les adresses qui ont été ajoutées à la liste; si le changement concernait une liste source EXCLUDE, ce sont les adresses qui ont été supprimées de la liste.
    6BLOCK_OLD_SOURCES - indique que les champs Source Address [i] dans ce Group Record contiennent une liste des sources que le système ne souhaite plus entendre, pour les paquets envoyés à l'adresse multicast spécifiée. Si le changement concernait une liste source INCLUDE, ce sont les adresses qui ont été supprimées de la liste; si le changement concernait une liste source EXCLUDE, ce sont les adresses qui ont été ajoutées à la liste.

Si un changement de liste source entraîne à la fois l'autorisation de nouvelles sources et le blocage d'anciennes sources, deux Group Records sont envoyés pour la même adresse multicast, l'un de type ALLOW_NEW_SOURCES et l'un de type BLOCK_OLD_SOURCES.

Nous utilisons le terme "State-Change Record" pour désigner soit un Filter-Mode-Change Record, soit un Source-List-Change Record.

Les valeurs de Record Type non reconnues DOIVENT être ignorées silencieusement.

4.2.13. Adresses source IP pour les Reports

Un rapport IGMP est envoyé avec une adresse source IP valide pour le sous-réseau de destination. L'adresse source 0.0.0.0 peut être utilisée par un système qui n'a pas encore acquis d'adresse IP. Notez que l'adresse source 0.0.0.0 peut être utilisée simultanément par plusieurs systèmes sur un LAN. Les routeurs DOIVENT accepter un rapport avec une adresse source de 0.0.0.0.

4.2.14. Adresses de destination IP pour les Reports

Les Version 3 Reports sont envoyés avec une adresse de destination IP de 224.0.0.22, à laquelle tous les routeurs multicast compatibles IGMPv3 écoutent. Un système fonctionnant en mode de compatibilité version 1 ou version 2 envoie des Reports version 1 ou version 2 au groupe multicast spécifié dans le champ Group Address du Report. De plus, un système DOIT accepter et traiter tout Report version 1 ou version 2 dont le champ IP Destination Address contient n'importe laquelle des adresses (unicast ou multicast) attribuées à l'interface sur laquelle le Report arrive.

4.2.15. Notation pour les Group Records

Dans le reste de ce document, nous utilisons la notation suivante pour décrire le contenu d'un Group Record se rapportant à une adresse multicast particulière:

   IS_IN ( x )  -  Type MODE_IS_INCLUDE, source addresses x
IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x
TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x
TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x
ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x
BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x

où x est soit:

  • une lettre majuscule (par exemple, "A") pour représenter l'ensemble des adresses source, ou

  • une expression d'ensemble (par exemple, "A+B"), où "A+B" signifie l'union des ensembles A et B, "A*B" signifie l'intersection des ensembles A et B, et "A-B" signifie la suppression de tous les éléments de l'ensemble B de l'ensemble A.

4.2.16. Taille du Membership Report

Si l'ensemble des Group Records requis dans un Report ne rentre pas dans la limite de taille d'un seul message Report (tel que déterminé par la MTU du réseau sur lequel il sera envoyé), les Group Records sont envoyés dans autant de messages Report que nécessaire pour signaler l'ensemble complet.

Si un seul Group Record contient tant d'adresses source qu'il ne rentre pas dans la limite de taille d'un seul message Report, si son Type n'est pas MODE_IS_EXCLUDE ou CHANGE_TO_EXCLUDE_MODE, il est divisé en plusieurs Group Records, chacun contenant un sous-ensemble différent des adresses source et chacun envoyé dans un message Report séparé. Si son Type est MODE_IS_EXCLUDE ou CHANGE_TO_EXCLUDE_MODE, un seul Group Record est envoyé, contenant autant d'adresses source que possible, et les adresses source restantes ne sont pas signalées; bien que le choix des sources à signaler soit arbitraire, il est préférable de signaler le même ensemble de sources dans chaque rapport ultérieur, plutôt que de signaler des sources différentes à chaque fois.