6. Host State Diagram (Host-Zustandsdiagramm)
6. Host State Diagram (Host-Zustandsdiagramm)
Das Host-Verhalten wird durch das folgende Zustandsübergangsdiagramm formaler spezifiziert. Ein Host kann sich in Bezug auf eine einzelne IP-Multicast-Gruppe auf einer einzelnen Netzwerkschnittstelle in einem von drei möglichen Zuständen befinden:
-
"Non-Member" (Nicht-Mitglied) Zustand, wenn der Host nicht zur Gruppe auf der Schnittstelle gehört. Dies ist der Anfangszustand für alle Mitgliedschaften auf allen Netzwerkschnittstellen; er erfordert keinen Speicher im Host.
-
"Delaying Member" (Verzögerndes Mitglied) Zustand, wenn der Host zur Gruppe auf der Schnittstelle gehört und ein Berichtsverzögerungstimer für diese Mitgliedschaft läuft.
-
"Idle Member" (Untätiges Mitglied) Zustand, wenn der Host zur Gruppe auf der Schnittstelle gehört und keinen Berichtsverzögerungstimer für diese Mitgliedschaft laufen hat.
Es gibt fünf signifikante Ereignisse, die IGMP-Zustandsübergänge verursachen können:
-
"join group" (Gruppe beitreten) tritt auf, wenn der Host beschließt, der Gruppe auf der Schnittstelle beizutreten. Es kann nur im Non-Member Zustand auftreten.
-
"leave group" (Gruppe verlassen) tritt auf, wenn der Host beschließt, die Gruppe auf der Schnittstelle zu verlassen. Es kann nur in den Delaying Member und Idle Member Zuständen auftreten.
-
"query received" (Abfrage empfangen) tritt auf, wenn der Host entweder eine gültige General Membership Query Nachricht oder eine gültige Group-Specific Membership Query Nachricht empfängt. Um gültig zu sein, muss die Query-Nachricht mindestens 8 Oktette lang sein und eine korrekte IGMP-Prüfsumme haben. Die Gruppenadresse im IGMP-Header muss entweder Null (eine General Query) oder eine gültige Multicast-Gruppenadresse (eine Group-Specific Query) sein. Eine General Query gilt für alle Mitgliedschaften auf der Schnittstelle, von der die Query empfangen wurde. Eine Group-Specific Query gilt für die Mitgliedschaft in einer einzelnen Gruppe auf der Schnittstelle, von der die Query empfangen wurde. Abfragen werden für Mitgliedschaften im Non-Member Zustand ignoriert.
-
"report received" (Bericht empfangen) tritt auf, wenn der Host eine gültige IGMP Membership Report Nachricht (Version 1 oder Version 2) empfängt. Um gültig zu sein, muss die Report-Nachricht mindestens 8 Oktette lang sein und eine korrekte IGMP-Prüfsumme haben. Ein Membership Report gilt nur für die Mitgliedschaft in der durch den Membership Report identifizierten Gruppe auf der Schnittstelle, von der der Membership Report empfangen wurde. Er wird für Mitgliedschaften im Non-Member oder Idle Member Zustand ignoriert.
-
"timer expired" (Timer abgelaufen) tritt auf, wenn der Berichtsverzögerungstimer für die Gruppe auf der Schnittstelle abläuft. Es kann nur im Delaying Member Zustand auftreten.
Alle anderen Ereignisse, wie der Empfang ungültiger IGMP-Nachrichten oder anderer IGMP-Nachrichten als Query oder Report, werden in allen Zuständen ignoriert.
Es gibt sieben mögliche Aktionen, die als Reaktion auf die oben genannten Ereignisse ergriffen werden können:
-
"send report" (Bericht senden) für die Gruppe auf der Schnittstelle. Der Typ des Berichts wird durch den Zustand der Schnittstelle bestimmt. Die Report-Nachricht wird an die gemeldete Gruppe gesendet.
-
"send leave" (Verlassen senden) für die Gruppe auf der Schnittstelle. Wenn der Schnittstellenzustand besagt, dass der Querier IGMPv1 ausführt, SOLLTE diese Aktion übersprungen werden. Wenn das Flag, das besagt, dass wir der letzte Host waren, der berichtet hat, gelöscht ist, KANN diese Aktion übersprungen werden. Die Leave-Nachricht wird an die ALL-ROUTERS Gruppe (224.0.0.2) gesendet.
-
"set flag" (Flag setzen), dass wir der letzte Host waren, der einen Bericht für diese Gruppe gesendet hat.
-
"clear flag" (Flag löschen), da wir nicht der letzte Host waren, der einen Bericht für diese Gruppe gesendet hat.
-
"start timer" (Timer starten) für die Gruppe auf der Schnittstelle unter Verwendung eines Verzögerungswertes, der gleichmäßig aus dem Intervall (0, Max Response Time] gewählt wird, wobei Max Response Time in der Query angegeben ist. Wenn es sich um einen unaufgeforderten Bericht handelt, wird der Timer auf einen Verzögerungswert gesetzt, der gleichmäßig aus dem Intervall (0, [Unsolicited Report Interval] ] gewählt wird.
-
"reset timer" (Timer zurücksetzen) für die Gruppe auf der Schnittstelle auf einen neuen Wert, unter Verwendung eines Verzögerungswertes, der gleichmäßig aus dem Intervall (0, Max Response Time] gewählt wird, wie in "start timer" beschrieben.
-
"stop timer" (Timer stoppen) für die Gruppe auf der Schnittstelle.
In allen folgenden Zustandsdiagrammen ist jeder Zustandsübergangsbogen mit dem Ereignis beschriftet, das den Übergang verursacht, und in Klammern mit allen Aktionen, die während des Übergangs ergriffen werden. Beachten Sie, dass der Übergang immer durch das Ereignis ausgelöst wird; selbst wenn die Aktion bedingt ist, tritt der Übergang dennoch auf.
________________
| |
| |
| |
| |
--------->| 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) |
-------------------
Die All-Systems-Gruppe (Adresse 224.0.0.1) wird als Sonderfall behandelt. Der Host startet im Idle Member Zustand für diese Gruppe auf jeder Schnittstelle, wechselt nie in einen anderen Zustand und sendet nie einen Bericht für diese Gruppe.
Darüber hinaus kann sich ein Host in Bezug auf eine einzelne Netzwerkschnittstelle in einem von zwei möglichen Zuständen befinden:
-
"No IGMPv1 Router Present" (Kein IGMPv1-Router anwesend), wenn der Host für die [Version 1 Router Present Timeout] keine Abfrage im IGMPv1-Stil gehört hat. Dies ist der Anfangszustand.
-
"IGMPv1 Router Present" (IGMPv1-Router anwesend), wenn der Host innerhalb der [Version 1 Router Present Timeout] eine Abfrage im IGMPv1-Stil gehört hat.
Es gibt zwei Ereignisse, die Zustandsübergänge verursachen können:
-
"IGMPv1 query received" (IGMPv1-Abfrage empfangen), wenn der Host eine Abfrage mit dem auf 0 gesetzten Max Response Time Feld empfängt.
-
"timer expires" (Timer abgelaufen), wenn der Timer abläuft, der gesetzt wurde, um die Anwesenheit eines IGMPv1-Routers zu vermerken.
Und eine einzelne Aktion, die durch ein Ereignis ausgelöst werden kann:
- "set timer" (Timer setzen), Setzen des Timers auf seinen Maximalwert [Version 1 Router Present Timeout] und (Neu)starten.
________________
| |
| |
| No IGMPv1 |
| Router |
| Present |
| |
---->| |----
| | | |
| |________________| |
timer expires | | IGMPv1 query
| ________________ | received
| | | | (set timer)
| | | |
| | | |
-----| IGMPv1 |<---
| Router |
| Present |
| |
---->| |----
| |________________| |
| |
| IGMPv1 query received |
| (set timer) |
---------------------------