6. Host State Diagram (Diagramme d'état de l'hôte)
6. Host State Diagram (Diagramme d'état de l'hôte)
Le comportement de l'hôte est spécifié plus formellement par le diagramme de transition d'état ci-dessous. Un hôte peut se trouver dans l'un des trois états possibles par rapport à un seul groupe de multidiffusion IP sur une seule interface réseau :
-
État "Non-Member" (Non-membre), lorsque l'hôte n'appartient pas au groupe sur l'interface. C'est l'état initial pour toutes les appartenances sur toutes les interfaces réseau ; il ne nécessite aucun stockage dans l'hôte.
-
État "Delaying Member" (Membre en retard), lorsque l'hôte appartient au groupe sur l'interface et a une minuterie de retard de rapport en cours d'exécution pour cette appartenance.
-
État "Idle Member" (Membre inactif), lorsque l'hôte appartient au groupe sur l'interface et n'a pas de minuterie de retard de rapport en cours d'exécution pour cette appartenance.
Il existe cinq événements significatifs qui peuvent provoquer des transitions d'état IGMP :
-
"join group" (rejoindre le groupe) se produit lorsque l'hôte décide de rejoindre le groupe sur l'interface. Cela ne peut se produire que dans l'état Non-Member.
-
"leave group" (quitter le groupe) se produit lorsque l'hôte décide de quitter le groupe sur l'interface. Cela ne peut se produire que dans les états Delaying Member et Idle Member.
-
"query received" (requête reçue) se produit lorsque l'hôte reçoit soit un message General Membership Query valide, soit un message Group-Specific Membership Query valide. Pour être valide, le message Query doit avoir une longueur d'au moins 8 octets et avoir une somme de contrôle IGMP correcte. L'adresse de groupe dans l'en-tête IGMP doit être zéro (une General Query) ou une adresse de groupe de multidiffusion valide (une Group-Specific Query). Une General Query s'applique à toutes les appartenances sur l'interface à partir de laquelle la Query est reçue. Une Group-Specific Query s'applique à l'appartenance à un seul groupe sur l'interface à partir de laquelle la Query est reçue. Les requêtes sont ignorées pour les appartenances à l'état Non-Member.
-
"report received" (rapport reçu) se produit lorsque l'hôte reçoit un message IGMP Membership Report valide (version 1 ou version 2). Pour être valide, le message Report doit avoir une longueur d'au moins 8 octets et avoir une somme de contrôle IGMP correcte. Un Membership Report s'applique uniquement à l'appartenance au groupe identifié par le Membership Report, sur l'interface à partir de laquelle le Membership Report est reçu. Il est ignoré pour les appartenances à l'état Non-Member ou Idle Member.
-
"timer expired" (minuterie expirée) se produit lorsque la minuterie de retard de rapport pour le groupe sur l'interface expire. Cela ne peut se produire que dans l'état Delaying Member.
Tous les autres événements, tels que la réception de messages IGMP invalides, ou de messages IGMP autres que Query ou Report, sont ignorés dans tous les états.
Il existe sept actions possibles qui peuvent être entreprises en réponse aux événements ci-dessus :
-
"send report" (envoyer un rapport) pour le groupe sur l'interface. Le type de rapport est déterminé par l'état de l'interface. Le message Report est envoyé au groupe signalé.
-
"send leave" (envoyer quitter) pour le groupe sur l'interface. Si l'état de l'interface indique que le Querier exécute IGMPv1, cette action DEVRAIT être ignorée. Si le drapeau indiquant que nous étions le dernier hôte à signaler est effacé, cette action PEUT être ignorée. Le message Leave est envoyé au groupe ALL-ROUTERS (224.0.0.2).
-
"set flag" (définir le drapeau) que nous étions le dernier hôte à envoyer un rapport pour ce groupe.
-
"clear flag" (effacer le drapeau) puisque nous n'étions pas le dernier hôte à envoyer un rapport pour ce groupe.
-
"start timer" (démarrer la minuterie) pour le groupe sur l'interface, en utilisant une valeur de retard choisie uniformément dans l'intervalle (0, Max Response Time], où Max Response Time est spécifié dans la Query. S'il s'agit d'un rapport non sollicité, la minuterie est réglée sur une valeur de retard choisie uniformément dans l'intervalle (0, [Unsolicited Report Interval] ].
-
"reset timer" (réinitialiser la minuterie) pour le groupe sur l'interface à une nouvelle valeur, en utilisant une valeur de retard choisie uniformément dans l'intervalle (0, Max Response Time], comme décrit dans "start timer".
-
"stop timer" (arrêter la minuterie) pour le groupe sur l'interface.
Dans tous les diagrammes d'état suivants, chaque arc de transition d'état est étiqueté avec l'événement qui provoque la transition et, entre parenthèses, toutes les actions entreprises pendant la transition. Notez que la transition est toujours déclenchée par l'événement ; même si l'action est conditionnelle, la transition se produit toujours.
________________
| |
| |
| |
| |
--------->| Non-Member |<---------
| | | |
| | | |
| | | |
| |________________| |
| | |
| leave group | join group | leave group
| (stop timer, |(send report, | (send leave
| send leave if | set flag, | if flag set)
| flag set) | start timer) |
________|________ | ________|________
| |<--------- | |
| | | |
| |<-------------------| |
| | query received | |
| Delaying Member | (start timer) | Idle Member |
---->| |------------------->| |
| | | report received | |
| | | (stop timer, | |
| | | clear flag) | |
| |_________________|------------------->|_________________|
| query received | timer expired
| (reset timer if | (send report,
| Max Resp Time | set flag)
| < current timer) |
-------------------
Le groupe de tous les systèmes (adresse 224.0.0.1) est traité comme un cas particulier. L'hôte démarre à l'état Idle Member pour ce groupe sur chaque interface, ne passe jamais à un autre état et n'envoie jamais de rapport pour ce groupe.
De plus, un hôte peut se trouver dans l'un des deux états possibles par rapport à une seule interface réseau :
-
"No IGMPv1 Router Present" (Aucun routeur IGMPv1 présent), lorsque l'hôte n'a pas entendu de requête de style IGMPv1 pendant le [Version 1 Router Present Timeout]. C'est l'état initial.
-
"IGMPv1 Router Present" (Routeur IGMPv1 présent), lorsque l'hôte a entendu une requête de style IGMPv1 dans le [Version 1 Router Present Timeout].
Il existe deux événements qui peuvent provoquer des transitions d'état :
-
"IGMPv1 query received" (requête IGMPv1 reçue), lorsque l'hôte reçoit une requête avec le champ Max Response Time mis à 0.
-
"timer expires" (minuterie expirée), lorsque la minuterie réglée pour noter la présence d'un routeur IGMPv1 expire.
Et une seule action qui peut être déclenchée par un événement :
- "set timer" (régler la minuterie), en réglant la minuterie à sa valeur maximale [Version 1 Router Present Timeout] et en la (re)démarrant.
________________
| |
| |
| No IGMPv1 |
| Router |
| Present |
| |
---->| |----
| | | |
| |________________| |
timer expires | | IGMPv1 query
| ________________ | received
| | | | (set timer)
| | | |
| | | |
-----| IGMPv1 |<---
| Router |
| Present |
| |
---->| |----
| |________________| |
| |
| IGMPv1 query received |
| (set timer) |
---------------------------