Passa al contenuto principale

4. Formati dei messaggi

4. Formati dei messaggi

I messaggi IGMP sono incapsulati in datagrammi IPv4, con un numero di protocollo IP di 2. Ogni messaggio IGMP descritto in questo documento viene inviato con un IP Time-to-Live di 1, IP Precedence di Internetwork Control (ad esempio, Type of Service 0xc0), e porta un'opzione IP Router Alert [RFC-2113] nel suo header IP. I tipi di messaggi IGMP sono registrati dall'IANA [IANA-REG] come descritto da [RFC-3228].

Ci sono due tipi di messaggi IGMP di interesse per il protocollo IGMPv3 descritto in questo documento:

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

Un'implementazione di IGMPv3 DEVE anche supportare i seguenti tre tipi di messaggi, per l'interoperazione con le versioni precedenti di IGMP (vedi sezione 7):

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

I tipi di messaggi non riconosciuti DEVONO essere ignorati silenziosamente. Altri tipi di messaggi possono essere utilizzati da versioni più recenti o estensioni di IGMP, da protocolli di routing multicast, o per altri usi.

In questo documento, salvo diversa specificazione, le parole maiuscole "Query" e "Report" si riferiscono rispettivamente a IGMP Membership Queries e IGMP Version 3 Membership Reports.

4.1. Messaggio Membership Query

I Membership Queries sono inviati dai router multicast IP per interrogare lo stato di ricezione multicast delle interfacce vicine. I Queries hanno il seguente formato:

    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

Il campo Max Resp Code specifica il tempo massimo consentito prima dell'invio di un report di risposta. Il tempo effettivamente consentito, chiamato Max Resp Time, è rappresentato in unità di 1/10 di secondo ed è derivato dal Max Resp Code come segue:

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

Se Max Resp Code >= 128, Max Resp Code rappresenta un valore in virgola mobile come segue:

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

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

Valori piccoli di Max Resp Time consentono ai router IGMPv3 di regolare la "latenza di abbandono" (il tempo tra il momento in cui l'ultimo host lascia un gruppo e il momento in cui il protocollo di routing viene notificato che non ci sono più membri). Valori più grandi, specialmente nell'intervallo esponenziale, consentono la regolazione dell'esplosività del traffico IGMP su una rete.

4.1.2. Checksum

Il Checksum è il complemento a uno a 16 bit della somma in complemento a uno dell'intero messaggio IGMP (l'intero payload IP). Per calcolare il checksum, il campo Checksum è impostato a zero. Quando si ricevono pacchetti, il checksum DEVE essere verificato prima di elaborare un pacchetto. [RFC-1071]

4.1.3. Group Address

Il campo Group Address è impostato a zero quando si invia una General Query, e impostato all'indirizzo multicast IP interrogato quando si invia una Group-Specific Query o Group-and-Source-Specific Query (vedi sezione 4.1.9, di seguito).

4.1.4. Resv (Reserved)

Il campo Resv è impostato a zero in trasmissione, e ignorato in ricezione.

4.1.5. S Flag (Suppress Router-Side Processing)

Quando impostato a uno, l'S Flag indica a tutti i router multicast riceventi che devono sopprimere gli aggiornamenti normali del timer che eseguono all'ascolto di una Query. Non sopprime, tuttavia, l'elezione del querier o l'elaborazione normale "lato host" di una Query che un router potrebbe essere tenuto a eseguire come conseguenza dell'essere esso stesso un membro del gruppo.

4.1.6. QRV (Querier's Robustness Variable)

Se diverso da zero, il campo QRV contiene il valore [Robustness Variable] utilizzato dal querier, cioè il mittente della Query. Se la [Robustness Variable] del querier supera 7, il valore massimo del campo QRV, il QRV è impostato a zero. I router adottano il valore QRV dalla Query ricevuta più di recente come proprio valore [Robustness Variable], a meno che quel QRV ricevuto più di recente non fosse zero, nel qual caso i ricevitori utilizzano il valore [Robustness Variable] predefinito specificato nella sezione 8.1 o un valore configurato staticamente.

4.1.7. QQIC (Querier's Query Interval Code)

Il campo Querier's Query Interval Code specifica il [Query Interval] utilizzato dal querier. L'intervallo effettivo, chiamato Querier's Query Interval (QQI), è rappresentato in unità di secondi ed è derivato dal Querier's Query Interval Code come segue:

Se QQIC < 128, QQI = QQIC

Se QQIC >= 128, QQIC rappresenta un valore in virgola mobile come segue:

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

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

I router multicast che non sono il querier corrente adottano il valore QQI dalla Query ricevuta più di recente come proprio valore [Query Interval], a meno che quel QQI ricevuto più di recente non fosse zero, nel qual caso i router riceventi utilizzano il valore [Query Interval] predefinito specificato nella sezione 8.2.

4.1.8. Number of Sources (N)

Il campo Number of Sources (N) specifica quanti indirizzi sorgente sono presenti nella Query. Questo numero è zero in una General Query o una Group-Specific Query, e diverso da zero in una Group-and-Source-Specific Query. Questo numero è limitato dalla MTU della rete su cui viene trasmessa la Query. Ad esempio, su un Ethernet con una MTU di 1500 ottetti, l'header IP inclusa l'opzione Router Alert consuma 24 ottetti, e i campi IGMP fino al campo Number of Sources (N) incluso consumano 12 ottetti, lasciando 1464 ottetti per gli indirizzi sorgente, il che limita il numero di indirizzi sorgente a 366 (1464/4).

4.1.9. Source Address [i]

I campi Source Address [i] sono un vettore di n indirizzi unicast IP, dove n è il valore nel campo Number of Sources (N).

4.1.10. Additional Data

Se il campo Packet Length nell'header IP di una Query ricevuta indica che ci sono ottetti di dati aggiuntivi presenti, oltre ai campi descritti qui, le implementazioni IGMPv3 DEVONO includere quegli ottetti nel calcolo per verificare il Checksum IGMP ricevuto, ma DEVONO altrimenti ignorare quegli ottetti aggiuntivi. Quando si invia una Query, un'implementazione IGMPv3 NON DEVE includere ottetti aggiuntivi oltre ai campi descritti qui.

4.1.11. Varianti di Query

Ci sono tre varianti del messaggio Query:

  1. Una "General Query" è inviata da un router multicast per conoscere lo stato completo di ricezione multicast delle interfacce vicine (cioè, le interfacce collegate alla rete su cui viene trasmessa la Query). In una General Query, sia il campo Group Address che il campo Number of Sources (N) sono zero.

  2. Una "Group-Specific Query" è inviata da un router multicast per conoscere lo stato di ricezione, rispetto a un singolo indirizzo multicast, delle interfacce vicine. In una Group-Specific Query, il campo Group Address contiene l'indirizzo multicast di interesse, e il campo Number of Sources (N) contiene zero.

  3. Una "Group-and-Source-Specific Query" è inviata da un router multicast per sapere se un'interfaccia vicina desidera la ricezione di pacchetti inviati a un indirizzo multicast specificato, da una qualsiasi delle sorgenti di un elenco specificato. In una Group-and-Source-Specific Query, il campo Group Address contiene l'indirizzo multicast di interesse, e i campi Source Address [i] contengono gli indirizzi sorgente di interesse.

4.1.12. Indirizzi di destinazione IP per le Queries

In IGMPv3, le General Queries sono inviate con un indirizzo di destinazione IP di 224.0.0.1, l'indirizzo multicast all-systems. Le Group-Specific e Group-and-Source-Specific Queries sono inviate con un indirizzo di destinazione IP uguale all'indirizzo multicast di interesse. Tuttavia, un sistema DEVE accettare ed elaborare qualsiasi Query il cui campo IP Destination Address contenga uno qualsiasi degli indirizzi (unicast o multicast) assegnati all'interfaccia su cui arriva la Query.

4.2. Messaggio Version 3 Membership Report

I Version 3 Membership Reports sono inviati dai sistemi IP per segnalare (ai router vicini) lo stato corrente di ricezione multicast, o i cambiamenti nello stato di ricezione multicast, delle loro interfacce. I Reports hanno il seguente formato:

    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] .
. .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

dove ogni Group Record ha il seguente formato interno:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 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

I campi Reserved sono impostati a zero in trasmissione, e ignorati in ricezione.

4.2.2. Checksum

Il Checksum è il complemento a uno a 16 bit della somma in complemento a uno dell'intero messaggio IGMP (l'intero payload IP). Per calcolare il checksum, il campo Checksum è impostato a zero. Quando si ricevono pacchetti, il checksum DEVE essere verificato prima di elaborare un messaggio.

4.2.3. Number of Group Records (M)

Il campo Number of Group Records (M) specifica quanti Group Records sono presenti in questo Report.

4.2.4. Group Record

Ogni Group Record è un blocco di campi contenente informazioni relative all'appartenenza del mittente a un singolo gruppo multicast sull'interfaccia da cui viene inviato il Report.

4.2.5. Record Type

Vedi sezione 4.2.12, di seguito.

4.2.6. Aux Data Len

Il campo Aux Data Len contiene la lunghezza del campo Auxiliary Data in questo Group Record, in unità di parole a 32 bit. Può contenere zero, per indicare l'assenza di dati ausiliari.

4.2.7. Number of Sources (N)

Il campo Number of Sources (N) specifica quanti indirizzi sorgente sono presenti in questo Group Record.

4.2.8. Multicast Address

Il campo Multicast Address contiene l'indirizzo multicast IP a cui si riferisce questo Group Record.

4.2.9. Source Address [i]

I campi Source Address [i] sono un vettore di n indirizzi unicast IP, dove n è il valore nel campo Number of Sources (N) di questo record.

4.2.10. Auxiliary Data

Il campo Auxiliary Data, se presente, contiene informazioni aggiuntive relative a questo Group Record. Il protocollo specificato in questo documento, IGMPv3, non definisce alcun dato ausiliario. Pertanto, le implementazioni di IGMPv3 NON DEVONO includere alcun dato ausiliario (cioè, DEVONO impostare il campo Aux Data Len a zero) in qualsiasi Group Record trasmesso, e DEVONO ignorare qualsiasi dato ausiliario presente in qualsiasi Group Record ricevuto. La semantica e la codifica interna del campo Auxiliary Data devono essere definite da qualsiasi versione futura o estensione di IGMP che utilizza questo campo.

4.2.11. Additional Data

Se il campo Packet Length nell'header IP di un Report ricevuto indica che ci sono ottetti di dati aggiuntivi presenti, oltre all'ultimo Group Record, le implementazioni IGMPv3 DEVONO includere quegli ottetti nel calcolo per verificare il Checksum IGMP ricevuto, ma DEVONO altrimenti ignorare quegli ottetti aggiuntivi. Quando si invia un Report, un'implementazione IGMPv3 NON DEVE includere ottetti aggiuntivi oltre all'ultimo Group Record.

4.2.12. Tipi di Group Record

Ci sono diversi tipi di Group Records che possono essere inclusi in un messaggio Report:

  • Un "Current-State Record" è inviato da un sistema in risposta a una Query ricevuta su un'interfaccia. Segnala lo stato corrente di ricezione di quell'interfaccia, rispetto a un singolo indirizzo multicast. Il Record Type di un Current-State Record può essere uno dei seguenti due valori:

    ValueName and Meaning
    1MODE_IS_INCLUDE - indica che l'interfaccia ha una modalità di filtro INCLUDE per l'indirizzo multicast specificato. I campi Source Address [i] in questo Group Record contengono l'elenco sorgente dell'interfaccia per l'indirizzo multicast specificato, se non è vuoto.
    2MODE_IS_EXCLUDE - indica che l'interfaccia ha una modalità di filtro EXCLUDE per l'indirizzo multicast specificato. I campi Source Address [i] in questo Group Record contengono l'elenco sorgente dell'interfaccia per l'indirizzo multicast specificato, se non è vuoto.
  • Un "Filter-Mode-Change Record" è inviato da un sistema ogni volta che un'invocazione locale di IPMulticastListen causa un cambiamento della modalità di filtro (cioè, un cambiamento da INCLUDE a EXCLUDE, o da EXCLUDE a INCLUDE), della voce di stato a livello di interfaccia per un particolare indirizzo multicast. Il Record è incluso in un Report inviato dall'interfaccia su cui si è verificato il cambiamento. Il Record Type di un Filter-Mode-Change Record può essere uno dei seguenti due valori:

    ValueName and Meaning
    3CHANGE_TO_INCLUDE_MODE - indica che l'interfaccia è passata alla modalità di filtro INCLUDE per l'indirizzo multicast specificato. I campi Source Address [i] in questo Group Record contengono il nuovo elenco sorgente dell'interfaccia per l'indirizzo multicast specificato, se non è vuoto.
    4CHANGE_TO_EXCLUDE_MODE - indica che l'interfaccia è passata alla modalità di filtro EXCLUDE per l'indirizzo multicast specificato. I campi Source Address [i] in questo Group Record contengono il nuovo elenco sorgente dell'interfaccia per l'indirizzo multicast specificato, se non è vuoto.
  • Un "Source-List-Change Record" è inviato da un sistema ogni volta che un'invocazione locale di IPMulticastListen causa un cambiamento dell'elenco sorgente che non coincide con un cambiamento della modalità di filtro, della voce di stato a livello di interfaccia per un particolare indirizzo multicast. Il Record è incluso in un Report inviato dall'interfaccia su cui si è verificato il cambiamento. Il Record Type di un Source-List-Change Record può essere uno dei seguenti due valori:

    ValueName and Meaning
    5ALLOW_NEW_SOURCES - indica che i campi Source Address [i] in questo Group Record contengono un elenco delle sorgenti aggiuntive da cui il sistema desidera ricevere, per i pacchetti inviati all'indirizzo multicast specificato. Se il cambiamento riguardava un elenco sorgente INCLUDE, questi sono gli indirizzi aggiunti all'elenco; se il cambiamento riguardava un elenco sorgente EXCLUDE, questi sono gli indirizzi eliminati dall'elenco.
    6BLOCK_OLD_SOURCES - indica che i campi Source Address [i] in questo Group Record contengono un elenco delle sorgenti da cui il sistema non desidera più ricevere, per i pacchetti inviati all'indirizzo multicast specificato. Se il cambiamento riguardava un elenco sorgente INCLUDE, questi sono gli indirizzi eliminati dall'elenco; se il cambiamento riguardava un elenco sorgente EXCLUDE, questi sono gli indirizzi aggiunti all'elenco.

Se un cambiamento dell'elenco sorgente comporta sia l'autorizzazione di nuove sorgenti che il blocco di vecchie sorgenti, vengono inviati due Group Records per lo stesso indirizzo multicast, uno di tipo ALLOW_NEW_SOURCES e uno di tipo BLOCK_OLD_SOURCES.

Usiamo il termine "State-Change Record" per riferirci a un Filter-Mode-Change Record o a un Source-List-Change Record.

I valori di Record Type non riconosciuti DEVONO essere ignorati silenziosamente.

4.2.13. Indirizzi sorgente IP per i Reports

Un report IGMP è inviato con un indirizzo sorgente IP valido per la sottorete di destinazione. L'indirizzo sorgente 0.0.0.0 può essere utilizzato da un sistema che non ha ancora acquisito un indirizzo IP. Si noti che l'indirizzo sorgente 0.0.0.0 può essere utilizzato simultaneamente da più sistemi su una LAN. I router DEVONO accettare un report con un indirizzo sorgente di 0.0.0.0.

4.2.14. Indirizzi di destinazione IP per i Reports

I Version 3 Reports sono inviati con un indirizzo di destinazione IP di 224.0.0.22, a cui tutti i router multicast compatibili con IGMPv3 ascoltano. Un sistema che opera in modalità di compatibilità versione 1 o versione 2 invia Reports versione 1 o versione 2 al gruppo multicast specificato nel campo Group Address del Report. Inoltre, un sistema DEVE accettare ed elaborare qualsiasi Report versione 1 o versione 2 il cui campo IP Destination Address contenga uno qualsiasi degli indirizzi (unicast o multicast) assegnati all'interfaccia su cui arriva il Report.

4.2.15. Notazione per i Group Records

Nel resto di questo documento, utilizziamo la seguente notazione per descrivere il contenuto di un Group Record relativo a un particolare indirizzo multicast:

   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

dove x è:

  • una lettera maiuscola (ad esempio, "A") per rappresentare l'insieme degli indirizzi sorgente, oppure

  • un'espressione di insieme (ad esempio, "A+B"), dove "A+B" significa l'unione degli insiemi A e B, "A*B" significa l'intersezione degli insiemi A e B, e "A-B" significa la rimozione di tutti gli elementi dell'insieme B dall'insieme A.

4.2.16. Dimensione del Membership Report

Se l'insieme dei Group Records richiesti in un Report non rientra nel limite di dimensione di un singolo messaggio Report (come determinato dalla MTU della rete su cui verrà inviato), i Group Records sono inviati in tanti messaggi Report quanti necessari per segnalare l'intero insieme.

Se un singolo Group Record contiene così tanti indirizzi sorgente da non rientrare nel limite di dimensione di un singolo messaggio Report, se il suo Type non è MODE_IS_EXCLUDE o CHANGE_TO_EXCLUDE_MODE, viene diviso in più Group Records, ciascuno contenente un sottoinsieme diverso degli indirizzi sorgente e ciascuno inviato in un messaggio Report separato. Se il suo Type è MODE_IS_EXCLUDE o CHANGE_TO_EXCLUDE_MODE, viene inviato un singolo Group Record, contenente quanti più indirizzi sorgente possibile, e gli indirizzi sorgente rimanenti non vengono segnalati; sebbene la scelta di quali sorgenti segnalare sia arbitraria, è preferibile segnalare lo stesso insieme di sorgenti in ogni report successivo, piuttosto che segnalare sorgenti diverse ogni volta.