3. Protocol Description (Descrizione del protocollo)
3. Protocol Description (Descrizione del protocollo)
Si noti che i valori predefiniti per i timer sono descritti più avanti in questo documento. I nomi di timer e contatori appaiono tra parentesi quadre.
Il termine "interface" (interfaccia) è talvolta usato in questo documento per significare "l'interfaccia primaria su una rete collegata"; se un router ha più interfacce fisiche su una singola rete, questo protocollo deve essere eseguito solo su una di esse. Gli host, d'altra parte, devono eseguire le loro azioni su tutte le interfacce che hanno appartenenze associate a esse.
I router multicast utilizzano IGMP per sapere quali gruppi hanno membri su ciascuna delle loro reti fisiche collegate. Un router multicast mantiene un elenco di appartenenze ai gruppi multicast per ciascuna rete collegata e un timer per ciascuna appartenenza. "Appartenenze ai gruppi multicast" significa la presenza di almeno un membro di un gruppo multicast su una determinata rete collegata, non un elenco di tutti i membri. Rispetto a ciascuna delle sue reti collegate, un router multicast può assumere uno dei due ruoli: Querier (Interrogante) o Non-Querier (Non Interrogante). Normalmente c'è un solo Querier per rete fisica. Tutti i router multicast si avviano come Querier su ciascuna rete collegata. Se un router multicast sente un messaggio Query da un router con un indirizzo IP inferiore, DEVE diventare un Non-Querier su quella rete. Se un router non ha sentito un messaggio Query da un altro router per [Other Querier Present Interval] (Intervallo di presenza di altro interrogante), riprende il ruolo di Querier. I router inviano periodicamente [Query Interval] (Intervallo di query) una General Query (Query generale) su ciascuna rete collegata per la quale questo router è il Querier, per sollecitare informazioni sull'appartenenza. All'avvio, un router DOVREBBE inviare [Startup Query Count] (Conteggio query di avvio) General Queries distanziate strettamente [Startup Query Interval] (Intervallo query di avvio) al fine di determinare rapidamente e in modo affidabile le informazioni sull'appartenenza. Una General Query è indirizzata al gruppo multicast di tutti i sistemi (224.0.0.1), ha un campo Group Address (Indirizzo di gruppo) pari a 0 e ha un Max Response Time (Tempo di risposta massimo) di [Query Response Interval] (Intervallo di risposta alla query).
Quando un host riceve una General Query, imposta timer di ritardo per ciascun gruppo (escluso il gruppo di tutti i sistemi) di cui è membro sull'interfaccia da cui ha ricevuto la query. Ogni timer è impostato su un valore casuale diverso, utilizzando la massima granularità di clock disponibile sull'host, selezionato dall'intervallo (0, Max Response Time], con Max Response Time come specificato nel pacchetto Query. Quando un host riceve una Group-Specific Query (Query specifica del gruppo), imposta un timer di ritardo su un valore casuale selezionato dall'intervallo (0, Max Response Time] come sopra per il gruppo interrogato se è membro sull'interfaccia da cui ha ricevuto la query. Se un timer per il gruppo è già in esecuzione, viene reimpostato al valore casuale solo se il Max Response Time richiesto è inferiore al valore rimanente del timer in esecuzione. Quando il timer di un gruppo scade, l'host invia in multicast un Version 2 Membership Report (Rapporto di appartenenza versione 2) al gruppo, con IP TTL di 1. Se l'host riceve il Report di un altro host (versione 1 o 2) mentre ha un timer in esecuzione, ferma il suo timer per il gruppo specificato e non invia un Report, al fine di sopprimere i Reports duplicati.
Quando un router riceve un Report, aggiunge il gruppo segnalato all'elenco delle appartenenze ai gruppi multicast sulla rete su cui ha ricevuto il Report e imposta il timer per l'appartenenza al [Group Membership Interval] (Intervallo di appartenenza al gruppo). I Reports ripetuti aggiornano il timer. Se non vengono ricevuti Reports per un particolare gruppo prima che questo timer sia scaduto, il router assume che il gruppo non abbia membri locali e che non debba inoltrare multicast originati da remoto per quel gruppo sulla rete collegata.
Quando un host si unisce a un gruppo multicast, dovrebbe trasmettere immediatamente un Version 2 Membership Report non richiesto per quel gruppo, nel caso in cui sia il primo membro di quel gruppo sulla rete. Per coprire la possibilità che il Membership Report iniziale venga perso o danneggiato, si raccomanda che venga ripetuto una o due volte dopo brevi ritardi [Unsolicited Report Interval] (Intervallo di rapporto non richiesto). (Un modo semplice per ottenere questo è inviare il Version 2 Membership Report iniziale e poi agire come se fosse stata ricevuta una Group-Specific Query per quel gruppo, e impostare un timer in modo appropriato).
Quando un host lascia un gruppo multicast, se era l'ultimo host a rispondere a una Query con un Membership Report per quel gruppo, DOVREBBE inviare un messaggio Leave Group (Lascia gruppo) al gruppo multicast di tutti i router (224.0.0.2). Se non era l'ultimo host a rispondere a una Query, PUÒ non inviare nulla poiché deve esserci un altro membro sulla sottorete. Questa è un'ottimizzazione per ridurre il traffico; un host senza memoria sufficiente per ricordare se era o meno l'ultimo host a rispondere PUÒ sempre inviare un messaggio Leave Group quando lascia un gruppo. I router DOVREBBERO accettare un messaggio Leave Group indirizzato al gruppo che viene lasciato, al fine di accogliere le implementazioni di una versione precedente di questo standard. I messaggi Leave Group sono indirizzati al gruppo di tutti i router perché gli altri membri del gruppo non hanno bisogno di sapere che un host ha lasciato il gruppo, ma non fa male indirizzare il messaggio al gruppo.
Quando un Querier riceve un messaggio Leave Group per un gruppo che ha membri del gruppo sull'interfaccia di ricezione, invia [Last Member Query Count] (Conteggio query ultimo membro) Group-Specific Queries ogni [Last Member Query Interval] (Intervallo query ultimo membro) al gruppo che viene lasciato. Queste Group-Specific Queries hanno il loro Max Response time impostato su [Last Member Query Interval]. Se non vengono ricevuti Reports dopo la scadenza del tempo di risposta dell'ultima query, i router assumono che il gruppo non abbia membri locali, come sopra. Qualsiasi transizione da Querier a non-Querier viene ignorata durante questo periodo; lo stesso router continua a inviare le Group-Specific Queries.
I Non-Queriers DEVONO ignorare i messaggi Leave Group, e i Queriers DOVREBBERO ignorare i messaggi Leave Group per i quali non ci sono membri del gruppo sull'interfaccia di ricezione.
Quando un non-Querier riceve un messaggio Group-Specific Query, se il suo timer di appartenenza al gruppo esistente è maggiore di [Last Member Query Count] volte il Max Response Time specificato nel messaggio, imposta il suo timer di appartenenza al gruppo a quel valore.