# Internet Group Management Protocol

El protocolo de red IGMP se utiliza para intercambiar información acerca del estado de pertenencia entre enrutadores IP que admiten la multidifusión y miembros de grupos de multidifusión. Los hosts miembros individuales informan acerca de la pertenencia de hosts al grupo de multidifusión y los enrutadores de multidifusión sondean periódicamente el estado de la pertenencia.
La última versión disponible de este protocolo es la IGMPv3 descrita en el [RFC 3376]
Todos los mensajes IGMP se transmiten en datagramas IP y tienen el formato mostrado en la figura adjunta. Los campos son los siguientes:
El snooping de Internet Group Management Protocol (IGMP) es una actividad realizada por conmutadores para realizar el seguimiento del intercambio de paquetes relacionados con las comunicaciones IGMP y adaptarse al filtrado de paquetes de multidifusión.

## Objetivo

El objetivo que tiene es describir las principales funcionalidades de gestión de grupos en Internet, así como el formato de sus mensajes. Es usado principalmente para optimizar el rendimiento de la red y en los que sea necesaria las transmisiones de multidifusión en redes IPv4.
No se tiene como objetivo servir a cada cliente de forma individual, ya que esto supondría conducir a una sobrecarga del servidor de origen y de los nodos de red que estén implicados

## Arquitectura de IGMP

+ Diseño de una red LAN con el uso del protocolo IGMP

### Versiones de IGMP

* IGMPv1 (RFC1112):
Primera versión del protocolo, de la que se caracteriza por tener funciones básicas.
Los Host pueden unirse a grupos de Multicast. No hay mensajes de abandono del grupo. Los routers procesan las bajas del grupo usando el mecanismo Time-out para descubrir los host que ya no están interesados en ser miembros.
* IGMPv2 (RFC2236):
Aparece en 1997, siendo la primera modificación desde su creación.Añade la capacidad de abandonar un grupo al protocolo, permitiendo a los miembros del grupo abandonar activamente un grupo Multicast. Esto permite grupos Multicast de gran ancho de banda.
* IGMPv3 (RFC3376):
Aparece en 2002 e introduce la seguridad gracias a las fuentes de multidifusión seleccionables.
Una revisión mayor del protocolo, que permite a los host especificar el origen deseado de tráfico Multicast. El tráfico que viene de otros host es bloqueado. Esto permite a los host bloquear paquetes que viene desde fuentes que envían tráfico indeseado.

### Tipo

Hay tres tipos establecidos, y se detallan a continuación:
* Consulta de asociación: enviada por un encaminador de multidifusión. Hay dos subtipos: una consulta general, utilizada para aprender qué grupos tienen miembros en una red conectada; y una consulta específica de grupo, utilizada para aprender si un grupo particular tiene algún miembro en una red conectada.
* Informes de asociación: enviado por un host para declarar sus miembros asociados a un grupo.
* Abandono de grupo: enviado por un host para declarar que abandona el grupo.

## Estructura del Protocolo

Hay 5 tipos de mensajes básicos que deben ser implementados para IGMPv3 para funcionar de manera correcta y ser compatible con las versiones anteriores:
* 0x11: ser miembro
* 0x22: reportar la versión 3 de la membresía
* 0x12: reportar la versión 1 de la membresía
* 0x16: reportar la versión 2 de la membresía
* 0x17: dejar el grupo de la versión 2

### Tiempo máximo de respuesta

Solamente significativo en un mensaje de consulta de asociación, y especifica el máximo tiempo permitido antes de enviar un informe de respuesta en unidades de 1/10 segundos.

### Suma de comprobación

Un código de detección de errores, calculado como el complemento a 1 de 16 bits más cuatro palabras de 16 bits del mensaje. Para propósitos de computación, el campo "Suma de Comprobación" se inicia a valor 0.

### Dirección de grupo

Cero en un mensaje de respuesta, y una dirección de grupo multidifusión IP válida en un informe de asociación o en un mensaje de abandono.

### Resv

Este campo está a 0 en la transmisión e ignorado en la recepción.

### S

(Suspender procesamiento en el lado del router)

### QRV

(Robustez de la variable del consultor)

### QQIC

(Código del intervalo de consulta del consultor)