Passa al contenuto principale

5. Descrizione del protocollo per i membri del gruppo

IGMP è un protocollo asimmetrico, che specifica comportamenti diversi per i membri del gruppo (host o router che desiderano ricevere pacchetti multicast) e i router multicast (che ascoltano i messaggi IGMP e coordinano l'inoltro multicast). Questa sezione descrive la parte di IGMPv3 che si applica ai membri del gruppo. (Si noti che un router può anche essere un membro del gruppo.)

Un sistema esegue il protocollo descritto in questa sezione su ogni interfaccia su cui è supportata la ricezione multicast. Il protocollo su ogni interfaccia coinvolge l'elaborazione immediata di due tipi di eventi:

  1. Una modifica dello stato di ricezione multicast sull'interfaccia, causata da un'invocazione locale della definizione IPMulticastListen.

  2. Ricezione di un messaggio Membership Query.

5.1. Azione al cambio di stato dell'interfaccia

Un'invocazione di IPMulticastListen può causare la modifica dello stato di ricezione multicast di un'interfaccia, secondo le regole nella Sezione 3.2. Ogni tale modifica influisce sullo stato per interfaccia per un singolo indirizzo di gruppo multicast.

Una modifica dello stato dell'interfaccia fa sì che il sistema trasmetta immediatamente un State Change Report da quell'interfaccia. Il tipo e il contenuto del State Change Report sono determinati come segue:

  1. Se la modifica dello stato non è significativa, come ad esempio il modo di filtraggio per un gruppo che passa da INCLUDE a INCLUDE o da EXCLUDE a EXCLUDE, con l'insieme di indirizzi sorgente che rimane invariato, non viene generato alcun report.

  2. Se la modifica dello stato è significativa, viene generato un State Change Report. Il Report contiene un singolo Group Record per il gruppo il cui stato è cambiato. Il tipo e il contenuto del Group Record sono determinati confrontando l'Old State (lo stato prima della modifica) con il New State (lo stato dopo la modifica), come indicato nella tabella seguente:

    Old StateNew StateState Change Record Sent
    INCLUDE (A)INCLUDE (B)ALLOW (B-A), BLOCK (A-B)
    EXCLUDE (A)EXCLUDE (B)ALLOW (A-B), BLOCK (B-A)
    INCLUDE (A)EXCLUDE (B)TO_EX (B)
    EXCLUDE (A)INCLUDE (B)TO_IN (B)

    La notazione "ALLOW (B-A)" significa che il State Change Record porta un elenco sorgente contenente tutti gli indirizzi sorgente che sono nell'insieme B ma non nell'insieme A. La notazione "BLOCK (A-B)" significa che il State Change Record porta un elenco sorgente contenente tutti gli indirizzi sorgente che sono nell'insieme A ma non nell'insieme B.

    Se l'elenco sorgente calcolato per un record ALLOW o BLOCK è vuoto, quel record viene omesso dal State Change Report.

Per garantire che il State Change Report sia ricevuto da tutti i router multicast sulla rete, il sistema ritrasmette il Report [Robustness Variable] - 1 volte, a intervalli casuali scelti dall'intervallo (0, [Unsolicited Report Interval]). La [Robustness Variable] è un parametro regolabile, predefinito a 2. L'[Unsolicited Report Interval] è anche un parametro regolabile, predefinito a 10 secondi.

Se un State Change Report è programmato per la trasmissione, e viene ricevuta una Query che causerebbe la generazione di un Current State Report (vedi Sezione 5.2), il State Change Report in attesa viene scartato e viene inviato invece il Current State Report. Il Current State Report deve contenere tutte le informazioni che sarebbero state nel State Change Report.

5.2. Azione alla ricezione di una Query

Quando un sistema riceve una Query, verifica innanzitutto se la Query è valida. Per essere valida, la Query deve:

  1. essere lunga almeno 12 ottetti,
  2. avere un checksum IP corretto,
  3. avere un indirizzo IP di destinazione uguale all'indirizzo multicast all-systems (224.0.0.1) o all'indirizzo di gruppo specifico interrogato.

Se la Query non è valida, viene ignorata. Se la Query è valida, il sistema esegue le seguenti azioni:

  1. Aggiorna il suo timer per il Querier, se necessario (vedi Sezione 6).
  2. Determina se deve rispondere alla Query.

Le seguenti sottosezioni descrivono le regole per rispondere a diversi tipi di Queries.

5.2.1. Azione alla ricezione di una General Query

Al ricevimento di una General Query, il sistema controlla ogni interfaccia per vedere se esiste uno stato di ricezione multicast per un gruppo. Per ogni gruppo per cui esiste uno stato, il sistema programma l'invio di un Current State Report.

Il Report contiene un Group Record per il gruppo. Il tipo del Group Record è MODE_IS_INCLUDE se il modo di filtraggio per il gruppo è INCLUDE, e MODE_IS_EXCLUDE se il modo di filtraggio è EXCLUDE. L'elenco sorgente nel Group Record contiene l'insieme di indirizzi sorgente per il gruppo.

Il Report è programmato per essere inviato in un momento casuale scelto dall'intervallo (0, [Max Resp Time]), dove [Max Resp Time] è il valore specificato nel campo Max Resp Code della Query.

5.2.2. Azione alla ricezione di una Group-Specific Query

Al ricevimento di una Group-Specific Query, il sistema controlla se ha uno stato di ricezione multicast per l'indirizzo di gruppo specificato nella Query. In caso contrario, ignora la Query.

Se esiste uno stato per il gruppo, il sistema programma l'invio di un Current State Report. Il Report contiene un Group Record per il gruppo, costruito come descritto nella Sezione 5.2.1.

Il Report è programmato per essere inviato in un momento casuale scelto dall'intervallo (0, [Max Resp Time]).

5.2.3. Azione alla ricezione di una Group-and-Source-Specific Query

Al ricevimento di una Group-and-Source-Specific Query, il sistema controlla se ha uno stato di ricezione multicast per l'indirizzo di gruppo specificato nella Query. In caso contrario, ignora la Query.

Se esiste uno stato per il gruppo, il sistema determina se è interessato a uno qualsiasi degli indirizzi sorgente specificati nella Query. Il sistema è interessato a un indirizzo sorgente se:

  1. Il modo di filtraggio per il gruppo è EXCLUDE, OPPURE
  2. Il modo di filtraggio per il gruppo è INCLUDE e l'indirizzo sorgente è nell'elenco sorgente.

Se il sistema è interessato ad almeno uno degli indirizzi sorgente, programma l'invio di un Current State Report. Il Report contiene un Group Record per il gruppo, costruito come descritto nella Sezione 5.2.1.

Il Report è programmato per essere inviato in un momento casuale scelto dall'intervallo (0, [Max Resp Time]).

5.2.4. Azione alla ricezione di una Query con il flag "S" impostato

Se il flag "S" (Suppress Router-Side Processing) è impostato in una Query ricevuta, il sistema non aggiorna il suo timer per il Querier. Tuttavia, risponde comunque alla Query come descritto nelle Sezioni da 5.2.1 a 5.2.3.