Passa al contenuto principale

6. Host State Diagram (Diagramma di stato dell'host)

6. Host State Diagram (Diagramma di stato dell'host)

Il comportamento dell'host è specificato più formalmente dal diagramma di transizione di stato qui sotto. Un host può trovarsi in uno dei tre stati possibili rispetto a qualsiasi singolo gruppo multicast IP su qualsiasi singola interfaccia di rete:

  • Stato "Non-Member" (Non membro), quando l'host non appartiene al gruppo sull'interfaccia. Questo è lo stato iniziale per tutte le appartenenze su tutte le interfacce di rete; non richiede memoria nell'host.

  • Stato "Delaying Member" (Membro in ritardo), quando l'host appartiene al gruppo sull'interfaccia e ha un timer di ritardo del rapporto in esecuzione per quell'appartenenza.

  • Stato "Idle Member" (Membro inattivo), quando l'host appartiene al gruppo sull'interfaccia e non ha un timer di ritardo del rapporto in esecuzione per quell'appartenenza.

Ci sono cinque eventi significativi che possono causare transizioni di stato IGMP:

  • "join group" (unisciti al gruppo) si verifica quando l'host decide di unirsi al gruppo sull'interfaccia. Può verificarsi solo nello stato Non-Member.

  • "leave group" (lascia il gruppo) si verifica quando l'host decide di lasciare il gruppo sull'interfaccia. Può verificarsi solo negli stati Delaying Member e Idle Member.

  • "query received" (query ricevuta) si verifica quando l'host riceve un messaggio General Membership Query valido o un messaggio Group-Specific Membership Query valido. Per essere valido, il messaggio Query deve essere lungo almeno 8 ottetti e avere un checksum IGMP corretto. L'indirizzo del gruppo nell'intestazione IGMP deve essere zero (una General Query) o un indirizzo di gruppo multicast valido (una Group-Specific Query). Una General Query si applica a tutte le appartenenze sull'interfaccia da cui viene ricevuta la Query. Una Group-Specific Query si applica all'appartenenza a un singolo gruppo sull'interfaccia da cui viene ricevuta la Query. Le query vengono ignorate per le appartenenze nello stato Non-Member.

  • "report received" (rapporto ricevuto) si verifica quando l'host riceve un messaggio IGMP Membership Report valido (Versione 1 o Versione 2). Per essere valido, il messaggio Report deve essere lungo almeno 8 ottetti e avere un checksum IGMP corretto. Un Membership Report si applica solo all'appartenenza al gruppo identificato dal Membership Report, sull'interfaccia da cui viene ricevuto il Membership Report. Viene ignorato per le appartenenze nello stato Non-Member o Idle Member.

  • "timer expired" (timer scaduto) si verifica quando il timer di ritardo del rapporto per il gruppo sull'interfaccia scade. Può verificarsi solo nello stato Delaying Member.

Tutti gli altri eventi, come la ricezione di messaggi IGMP non validi o messaggi IGMP diversi da Query o Report, vengono ignorati in tutti gli stati.

Ci sono sette possibili azioni che possono essere intraprese in risposta agli eventi di cui sopra:

  • "send report" (invia rapporto) per il gruppo sull'interfaccia. Il tipo di rapporto è determinato dallo stato dell'interfaccia. Il messaggio Report viene inviato al gruppo segnalato.

  • "send leave" (invia lascia) per il gruppo sull'interfaccia. Se lo stato dell'interfaccia dice che il Querier sta eseguendo IGMPv1, questa azione DOVREBBE essere saltata. Se il flag che dice che eravamo l'ultimo host a segnalare è cancellato, questa azione PUÒ essere saltata. Il messaggio Leave viene inviato al gruppo ALL-ROUTERS (224.0.0.2).

  • "set flag" (imposta flag) che eravamo l'ultimo host a inviare un rapporto per questo gruppo.

  • "clear flag" (cancella flag) poiché non eravamo l'ultimo host a inviare un rapporto per questo gruppo.

  • "start timer" (avvia timer) per il gruppo sull'interfaccia, utilizzando un valore di ritardo scelto uniformemente dall'intervallo (0, Max Response Time], dove Max Response Time è specificato nella Query. Se questo è un Report non richiesto, il timer è impostato su un valore di ritardo scelto uniformemente dall'intervallo (0, [Unsolicited Report Interval] ].

  • "reset timer" (reimposta timer) per il gruppo sull'interfaccia su un nuovo valore, utilizzando un valore di ritardo scelto uniformemente dall'intervallo (0, Max Response Time], come descritto in "start timer".

  • "stop timer" (ferma timer) per il gruppo sull'interfaccia.

In tutti i seguenti diagrammi di stato, ogni arco di transizione di stato è etichettato con l'evento che causa la transizione e, tra parentesi, qualsiasi azione intrapresa durante la transizione. Si noti che la transizione è sempre innescata dall'evento; anche se l'azione è condizionale, la transizione avviene comunque.

                              ________________
| |
| |
| |
| |
--------->| 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) |
-------------------

Il gruppo di tutti i sistemi (indirizzo 224.0.0.1) è gestito come un caso speciale. L'host inizia nello stato Idle Member per quel gruppo su ogni interfaccia, non passa mai a un altro stato e non invia mai un rapporto per quel gruppo.

Inoltre, un host può trovarsi in uno dei due stati possibili rispetto a qualsiasi singola interfaccia di rete:

  • "No IGMPv1 Router Present" (Nessun router IGMPv1 presente), quando l'host non ha sentito una query in stile IGMPv1 per il [Version 1 Router Present Timeout]. Questo è lo stato iniziale.

  • "IGMPv1 Router Present" (Router IGMPv1 presente), quando l'host ha sentito una query in stile IGMPv1 entro il [Version 1 Router Present Timeout].

Ci sono due eventi che possono causare transizioni di stato:

  • "IGMPv1 query received" (query IGMPv1 ricevuta), quando l'host riceve una query con il campo Max Response Time impostato a 0.

  • "timer expires" (timer scaduto), quando il timer impostato per notare la presenza di un router IGMPv1 scade.

E una singola azione che può essere innescata da un evento:

  • "set timer" (imposta timer), impostando il timer al suo valore massimo [Version 1 Router Present Timeout] e (ri)avviandolo.
                              ________________
| |
| |
| No IGMPv1 |
| Router |
| Present |
| |
---->| |----
| | | |
| |________________| |
timer expires | | IGMPv1 query
| ________________ | received
| | | | (set timer)
| | | |
| | | |
-----| IGMPv1 |<---
| Router |
| Present |
| |
---->| |----
| |________________| |
| |
| IGMPv1 query received |
| (set timer) |
---------------------------