Con il grande successo dei servizi di streaming come Netflix o Spotify, l'IP mul­ti­ca­sting è diventato un metodo di tra­smis­sio­ne in­di­spen­sa­bi­le per Internet e le reti do­me­sti­che. Questa procedura tecnica consente al mittente di inviare flussi di dati spe­ci­fi­ca­men­te a interi gruppi di de­sti­na­ta­ri, con­sen­ten­do loro di uti­liz­za­re al meglio le capacità di trasporto e di in­stra­da­men­to. Senza questo metodo di tra­smis­sio­ne, il mittente sarebbe costretto a inviare pacchetti di dati separati ad ogni di­spo­si­ti­vo de­sti­na­ta­rio, il che ri­chie­de­reb­be una larghezza di banda notevole e por­te­reb­be ra­pi­da­men­te a una con­ge­stio­ne, rendendo pra­ti­ca­men­te im­pos­si­bi­le offrire il servizio senza in­ter­ru­zio­ni.

L'In­ter­net Group Ma­na­ge­ment Protocol (IGMP) è un pro­to­col­lo che gioca un ruolo im­por­tan­te nell'or­ga­niz­za­zio­ne dei gruppi di de­sti­na­ta­ri multicast nelle reti IPv4.

Che cos'è l'In­ter­net Group Ma­na­ge­ment Protocol?

L'In­ter­net Group Ma­na­ge­ment Protocol è un pro­to­col­lo di co­mu­ni­ca­zio­ne della famiglia TCP/IP, svi­lup­pa­to presso la Stanford Uni­ver­si­ty e definito per la prima volta nel 1989 nell'RFC 1112. Questa prima versione del pro­to­col­lo IGMPv1 è stata seguita dalle revisioni IGMPv2 (RFC 2236) e IGMPv3 (RFC 3376; RFC 4604). Le versioni sono sempre re­tro­com­pa­ti­bi­li, per cui un di­spo­si­ti­vo IGMPv3 supporta au­to­ma­ti­ca­men­te anche le versioni 1 e 2. L'In­ter­net Group Ma­na­ge­ment Protocol è uni­ca­men­te re­spon­sa­bi­le delle reti IPv4, mentre per le reti IPv6 viene uti­liz­za­to il Multicast Listener Discovery (MLD).

Il compito fon­da­men­ta­le dell'IGMP è quello di gestire gruppi dinamici per tra­smis­sio­ni IP multicast, dove questa gestione non avviene tramite il di­spo­si­ti­vo tra­smit­ten­te stesso, ma at­tra­ver­so i router coinvolti. Questi router ricevono, da un lato, richieste dai di­spo­si­ti­vi riceventi (o anche dai ri­spet­ti­vi router secondari) per l'adesione a un gruppo multicast specifico. Dal­l'al­tro inoltrano i messaggi IGMP ai ri­spet­ti­vi router primari se ricevono adeguati pacchetti di dati multicast. La stazione mittente non riceve alcuna in­for­ma­zio­ne su quali e quante stazioni finali un pacchetto inviato raggiunge, poiché inoltra un singolo pacchetto di dati al suo router primario.

De­fi­ni­zio­ne

L'IGMP (Internet Group Ma­na­ge­ment Protocol) è un pro­to­col­lo di co­mu­ni­ca­zio­ne della famiglia di pro­to­col­li Internet (TCP/IP). È stato definito per la prima volta nell'RFC 1112 nel 1989 ed è attivo sul livello di rete del modello OSI. L'IGMP è re­spon­sa­bi­le del­l'or­ga­niz­za­zio­ne di gruppi multicast, che con­sen­to­no l'invio di flussi di dati IP a più de­sti­na­ta­ri. Questo significa che l'In­ter­net Group Ma­na­ge­ment Protocol è im­ple­men­ta­to au­to­ma­ti­ca­men­te su tutti gli host che sup­por­ta­no l'IP mul­ti­ca­sting.

Come funziona l'IGMP?

Come accennato, la gestione di un gruppo tramite IGMP non è di re­spon­sa­bi­li­tà del mittente del pacchetto. Questo host di uscita deve, tuttavia, sup­por­ta­re le con­nes­sio­ni multicast, come d'al­tron­de tutte le altre stazioni coinvolte nella rete (compreso il de­sti­na­ta­rio). L'ac­cet­ta­zio­ne delle richieste dei client per l'a­de­sio­ne a un gruppo multicast specifico e la notifica ai client in caso di flussi di dati multicast in entrata vengono gestite dai singoli router di rete, che si trovano tra il mittente e il de­sti­na­ta­rio.

A questo scopo l'In­ter­net Group Ma­na­ge­ment Protocol offre, da una parte, funzioni che con­sen­to­no a una stazione di informare il router assegnato che deve essere incluso in un gruppo multicast. D'altra parte, il pro­to­col­lo consente ai router di ricordare le in­ter­fac­ce in uscita di quei di­spo­si­ti­vi de­sti­na­ta­ri che devono ricevere de­ter­mi­na­ti flussi di dati IP multicast, in modo che possano inviare notifiche mirate (report) non appena i dati cor­ri­spon­den­ti vengono ricevuti.

I gruppi multicast sono ca­rat­te­riz­za­ti da indirizzi specifici nel­l'in­ter­val­lo 224.0.0.x. Nella maggior parte dei casi un di­spo­si­ti­vo contatta in­nan­zi­tut­to il router Internet domestico che riceve la richiesta di adesione e la inoltra al nodo di rete più vicino, in genere il router dell'ISP. Questa catena di co­mu­ni­ca­zio­ne termina al router del tra­smet­ti­to­re del flusso di dati che duplica il pacchetto IP se deve servire diverse in­ter­fac­ce in uscita.

N.B.

Se un secondo o ulteriore terminale deve essere aggiunto in una rete privata dello stesso gruppo multicast, il router Internet può concedere subito l'a­de­sio­ne e i flussi di dati già ricevuti vengono inoltrati di­ret­ta­men­te. La tra­smis­sio­ne dei dati termina soltanto quando tutti i di­spo­si­ti­vi avranno ab­ban­do­na­to il gruppo.

In cosa dif­fe­ri­sco­no le diverse versioni dell'IGMP?

Le tre versioni pub­bli­ca­te del­l'In­ter­net Group Ma­na­ge­ment Protocol hanno molto in comune. L'IGMPv2 e l'IGMPv3 offrono prin­ci­pal­men­te più funzioni rispetto al pre­de­ces­so­re, ma le ca­rat­te­ri­sti­che di base, come l'in­di­riz­zo di gruppo per le richieste generali (0.0.0.0), rimangono invariate. Ma come si pre­sen­ta­no nel dettaglio le ri­spet­ti­ve esten­sio­ni?

IGMPv1: la base del­l'In­ter­net Group Ma­na­ge­ment Protocol

L'IGMPv1 è la prima versione pub­bli­ca­ta del pro­to­col­lo di co­mu­ni­ca­zio­ne che presenta alcune ca­rat­te­ri­sti­che di base, molte delle quali si possono trovare anche nelle versioni più recenti. Nel­l'IGM­Pv1, l'in­di­riz­zo di gruppo e di de­sti­na­zio­ne sono già definiti ri­spet­ti­va­men­te come 0.0.0.0 e 224.0.0.1 per le richieste IGMP generali. L'in­ter­val­lo standard per queste richieste au­to­ma­ti­che tramite il router è di 60 secondi.

L'IGMPv1 permette a tutti gli host di aderire ai specifici gruppi multicast e le richieste di adesione sono inviate sotto forma di report ai ri­spet­ti­vi indirizzi IP multicast. A dif­fe­ren­za dei pro­to­col­li suc­ces­si­vi, all'IGMPv1 manca ancora una funzione che permetta agli host di ab­ban­do­na­re au­to­no­ma­men­te i gruppi. Solo un timeout può rimuovere il ri­spet­ti­vo host dai gruppi cui ha aderito.

Tutti i messaggi IGMP vengono tra­spor­ta­ti in semplici pacchetti IP con il numero di pro­to­col­lo IP 2 (Hex: 0x02). L'in­te­sta­zio­ne IGMP della prima versione del pro­to­col­lo si presenta come segue:

L'in­te­sta­zio­ne dell'IGMP ha quindi una lunghezza totale di 64 bit. I primi 8 bit indicano sempre la versione del pro­to­col­lo IGMPv1 e il tipo di messaggio. Per questo campo (Type) ci sono le due pos­si­bi­li­tà "1" (per le richieste di adesione) e "2" (per le notifiche di flussi di dati multicast). Seguono i bit da 8 a 15, che non hanno alcuna funzione e con­si­sto­no solo di zeri. Una somma di controllo conclude il primo blocco a 32 bit. Se si tratta di un pacchetto di notifica IGMP, segue l'in­di­riz­zo di gruppo composto da 32 bit. Alle richieste di adesione è allegata una sezione con­te­nen­te solo zeri (indirizzo di gruppo 0.0.0.0).

La versione originale della linea di pro­to­col­lo non specifica di per sé quale router deve essere usato per le richieste multicast (che viene de­ter­mi­na­to dal Multicast Routing Protocol).

IGMPv2: in­tro­du­zio­ne del leave message e di un tipo di messaggio specifico del gruppo

La versione IGMPv2 risale al 1997, quando è stata pub­bli­ca­ta la prima revisione dello standard, circa 8 anni dopo la prima pub­bli­ca­zio­ne del pro­to­col­lo. Mentre gli indirizzi di gruppo (0.0.0.0) e di de­sti­na­zio­ne (224.0.0.1) sono rimasti invariati per le richieste au­to­ma­ti­che, la durata del­l'in­ter­val­lo pre­de­fi­ni­to è stata aumentata a 125 secondi. La novità più im­por­tan­te del­l'IGM­Pv2, tuttavia, è l'ac­ce­le­ra­zio­ne del processo di di­scon­nes­sio­ne: il timeout pre­de­fi­ni­to nella prima versione del pro­to­col­lo viene so­sti­tui­to da un processo di di­scon­nes­sio­ne avviato dall'host tramite il "leave" message. L'in­di­riz­zo di de­sti­na­zio­ne per questo tipo di messaggio è definito come 224.0.0.2.

Un'altra novità della seconda versione del pro­to­col­lo di co­mu­ni­ca­zio­ne è la pos­si­bi­li­tà di de­ter­mi­na­re lo stato di ricezione di un par­ti­co­la­re indirizzo multicast tramite messaggi specifici di gruppo.

Anche i messaggi IGMPv2sono inviati in­cap­su­la­ti in semplici pacchetti IP con il pro­to­col­lo IP numero 2. Tuttavia, l'in­te­sta­zio­ne IGMP è stata leg­ger­men­te mo­di­fi­ca­ta:

La riga di in­te­sta­zio­ne somiglia alla prima versione del pro­to­col­lo, ma non specifica il numero della versione. I codici possibili del tipo sono "0x11" (per le richieste), "0x16" (per le notifiche) e "0x17" (per i leave message). Nel­l'am­bi­to della re­tro­com­pa­ti­bi­li­tà, c'è anche il codice "0x12" per le notifiche IGMPv1. I bit da 8 a 15 ottengono una funzione concreta in IGMPv2, almeno per quanto riguarda le richieste di adesione, e de­fi­ni­sco­no il tempo di risposta massimo con­sen­ti­to. Seguono un checksum (16 bit) e l'in­di­riz­zo di gruppo (32 bit), che assumono la tipica forma di pro­to­col­lo 0.0.0.0. per le richieste generali.

L'IGMPv2 specifica la regola secondo cui il router con l'in­di­riz­zo IP più basso nella sottorete viene usato per le richieste multicast.

IGMPv3: maggiore sicurezza grazie alla selezione mirata delle sorgenti multicast

L'IGMPv3, la terza versione del­l'In­ter­net Group Ma­na­ge­ment Protocol, è di­spo­ni­bi­le da ottobre 2002. Anche in questa versione del pro­to­col­lo 0.0.0.0 iden­ti­fi­ca gli indirizzi di gruppo e 224.0.0.1 quelli di de­sti­na­zio­ne per le richieste generali. Per quanto riguarda l'in­ter­val­lo standard, questa versione del pro­to­col­lo si allinea a quella pre­ce­den­te, con 125 secondi. La novità è l'opzione per se­le­zio­na­re in modo mirato la sorgente del flusso multicast. Questo co­sid­det­to source-specific mul­ti­ca­sting riduce enor­me­men­te i requisiti di rete e fornisce anche maggiore sicurezza durante la tra­smis­sio­ne, poiché non vengono sem­pli­ce­men­te uti­liz­za­te fonti ar­bi­tra­rie e/o sco­no­sciu­te.

Anche per l'IGMPv3, l'in­te­sta­zio­ne IGMP è inclusa nei pacchetti IP (pro­to­col­lo numero 2), ma è molto più complessa rispetto ai due pro­to­col­li pre­ce­den­ti, per via della pos­si­bi­li­tà di spe­ci­fi­ca­re l'in­di­riz­zo sorgente. Esistono anche dif­fe­ren­ze concrete tra le richieste e le notifiche. L'in­te­sta­zio­ne per le richieste di gruppo IGMPv3 ha questo aspetto:

Le prime due sequenze a 32 bit sono identiche a quelle del­l'in­te­sta­zio­ne IGMPv2: type, tempo massimo di risposta, somma di verifica e indirizzo di gruppo. Anche l'IGMPv3 è re­tro­com­pa­ti­bi­le con le vecchie versioni del pro­to­col­lo: a tale scopo gli host hanno a di­spo­si­zio­ne i codici "0x12" per la versione 1 e "0x16" per la versione 2. Dopo l'in­di­riz­zo di gruppo inizia la parte di in­te­sta­zio­ne specifica della richiesta IGMPv3, i cui primi 32 bit sono composti come segue:

  • Res.: campo riservato a 4 bit che non ha funzioni e contiene solo zeri.
  • S (Suppress Router-Side Pro­ces­sing): il flag S imposta i router al valore "1" se­gna­lan­do che do­vreb­be­ro sop­pri­me­re i normali ag­gior­na­men­ti quando ricevono una richiesta. Se il valore è "0", il campo è inattivo.
  • QRV (Querier’s Ro­bust­ness Variable): 3 bit che possono contenere il valore della "variabile di ro­bu­stez­za", uti­liz­za­ta dagli host ri­chie­den­ti.
  • QQIC (Querier’s Query Interval Code): campo a 8 bit per spe­ci­fi­ca­re l'in­ter­val­lo per le richieste IGMPv3.
  • Numero di indirizzi sorgente: numero di indirizzi sorgente, elencati suc­ces­si­va­men­te.

Questi dati molto specifici sono seguiti dall'indirizzo sorgente o da un elenco dei singoli indirizzi sorgente (32 bit ciascuno) se devono essere definite più fonti.

Consiglio

Per ap­pro­fon­di­re in che misura l'in­te­sta­zio­ne del secondo tipo di messaggio (notifiche IGMPv3) dif­fe­ri­sce dal­l'in­te­sta­zio­ne delle richieste IGMPv3 qui pre­sen­ta­te, potete con­sul­ta­re il capitolo 4.2 dell'RFC 3376.

A dif­fe­ren­za del suo pre­de­ces­so­re, che richiede due messaggi separati per farlo, l'IGMPv3 permette a un host di ab­ban­do­na­re un gruppo e aderire a un altro in una singola tran­sa­zio­ne.

Dove viene uti­liz­za­to l'In­ter­net Group Ma­na­ge­ment Protocol?

Il ruolo dell'IGMP è chia­ra­men­te definito: il pro­to­col­lo di co­mu­ni­ca­zio­ne viene sempre uti­liz­za­to dove sono richieste tra­smis­sio­ni multicast in reti IPv4, come Internet. Lo scenario classico di utilizzo sono le ap­pli­ca­zio­ni in tempo reale che eseguono con­nes­sio­ni mul­ti­pun­to, come gli strumenti per con­fe­ren­ze web o servizi di live streaming. Evitare di fornire a ogni client in­di­vi­dual­men­te il flusso di dati richiesto è im­por­tan­te per evitare il so­vrac­ca­ri­co del server di uscita e dei nodi di rete in­te­res­sa­ti.

N.B.

Molti switch e router Internet offrono la pos­si­bi­li­tà di filtrare il traffico multicast per ot­ti­miz­za­re le pre­sta­zio­ni della rete. A tale scopo i di­spo­si­ti­vi uti­liz­za­no il co­sid­det­to IGMP Snooping, anch'esso offerto dal­l'In­ter­net Group Ma­na­ge­ment Protocol.

Vai al menu prin­ci­pa­le