> For the complete documentation index, see [llms.txt](https://juan-martin-franco.gitbook.io/network-+/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://juan-martin-franco.gitbook.io/network-+/7.-enrutamiento/7.5-enrutamiento-multicast.md).

# 7.5 - Enrutamiento Multicast

## Enrutamiento Multicast

El enrutamiento multicast (multicast routing), ocurre cuando enviamos tráfico a una dirección IP de clase D, las cuales son conocidas como grupos multicast.

El objetivo de esto es enviar tráfico una sola vez y que varios dispositivos deseados reciban dicho tráfico.

Existen dos formas principales de hacer esto:

* <mark style="color:blue;">**IGMP (Internet Group Management Protocol)**</mark>
* <mark style="color:blue;">**PIM (Protocol Independient Multicast)**</mark>

### IGMP (Internet Group Management Protocol)

El <mark style="color:blue;">**protocolo de administración de grupos de internet**</mark>, conocido como <mark style="color:blue;">**IGMP**</mark>, es utilizado por clientes y routers para que los routers sepan que interfaces tienen receptores multicast en ellas.

Esto le permite a un cliente unirse a un grupo multicast y luego ser capaz de recibir mensajes que desea recibir a través de este grupo multicast.&#x20;

Existen 3 variantes de IGMP:

* <mark style="color:blue;">**IGMPv1**</mark>: En esta versión, los clientes podían pedir unirse al grupo multicast y, cada 60 segundos, el router preguntaba si el cliente quería seguir perteneciendo al grupo multicast. Esto generaba mucho tráfico innecesario.<br>
* <mark style="color:blue;">**IGMPv2**</mark>: En esta versión, los clientes tenían la capacidad de enviar mensajes de despedida cuando deseaban salir de un grupo multicast. Esencialmente, el router asumiría que se deseaba permanecer en el grupo multicast hasta que se indique lo contrario.<br>
* <mark style="color:blue;">**IGMPv3**</mark>: En esta versión, los clientes podían pedir multicast solo desde un servidor específico y luego elegir si querían recibir los mensajes desde un servidor y no desde otro. Además, esta versión permitió el multicast de una fuente específica (SSM - Source Specific Multicast). Esto permitió tener múltiples streams de video en un único stream multicast.

<mark style="background-color:green;">**¿Cómo funciona IGMP?**</mark>

En los siguientes diagramas se explica el funcionamiento de IGMP:

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FuiQr88ifv95kPpbtavPz%2Fimage.png?alt=media&amp;token=53e0c8c6-c80f-4c35-8e5a-c159666d207e" alt=""><figcaption></figcaption></figure>

Si tenemos un servidor que quiere enviar tráfico, lo enviará al router y la IP será la del grupo multicast. \
En este caso, la IP del grupo multicast es 239.2.1.3.

En este momento, el router no envía esta información ya que al momento de obtenerla nadie requirió dicha información.

Luego, PC2 envía un mensaje de petición al router:

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FsY6mDtyDNjk7CTgxCu0V%2Fimage.png?alt=media&amp;token=c5dee45c-2e95-4992-a046-729c08783586" alt=""><figcaption></figcaption></figure>

Después, el router recordará que PC2 quiere ser parte del grupo multicast, y cada cosa que sea para el grupo multicast será enviado a PC2 también.

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FnMEaeq7fG9lcdhVPf5lB%2Fimage.png?alt=media&amp;token=c1373a83-a7f4-4437-a3eb-011e9d66e92c" alt=""><figcaption></figcaption></figure>

Pero, este tráfico no se envía a PC1 y a PC3, ya que no solicitaron pertenecer al grupo multicast:

<figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FZiU2aochD7siBJjjUjtr%2Fimage.png?alt=media&amp;token=f304178e-82f0-4ce0-ab5d-23184de3bb26" alt=""><figcaption></figcaption></figure>

En caso de que PC1 y PC3 también soliciten ser parte del grupo multicast, toda información que sea para el grupo multicast será enviado a los 3 receptores: PC1, PC2 y PC3 con tan solo una única copia de dicho mensaje.

### PIM (Protocol Independient Multicast)

El <mark style="color:blue;">**protocolo multicast independiente**</mark>, conocido como <mark style="color:blue;">**PIM**</mark>, permite que el tráfico multicast sea ruteado entre routers con multicast habilitado.

El enrutamiento multicast forma un árbol de distribución multicast, y funciona entre todos estos diferentes routers juntos porque IGMP trata más sobre clientes y servidores juntos, mientras que PIM se concentra mucho más en la parte de enrutamiento de esto.

Existen 2 modos diferentes en PIM:

* <mark style="color:blue;">**PIN-DM (Modo denso):**</mark> En este modo, se utiliza un comportamiento periódico de inundación y poda para formar un árbol de distribución óptimo a través de estos routers. Esto puede causar un impacto negativo en el rendimiento de nuestra red, por lo que no se utiliza en nuestras redes modernas.\
  \ <mark style="background-color:green;">**Funcionamiento de PIM-DM**</mark>\
  \
  Cuando comienza PIN en modo PIN-DM, empieza con el procedimiento de inundado (flood), en donde todos los routers de la red obtienen toda la información. Esto resulta en mucho tráfico, pero se tiene el camino óptimo desde una fuente multicast a un destino multicast, ya que esto se conoce gracias a la inundación inicial.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FPO8eNopktxXHei8QfuLi%2Fimage.png?alt=media&amp;token=b91ebc66-ca2e-467e-93cd-4b24d02afc34" alt=""><figcaption></figcaption></figure>

  A medida que esto avanza, se "podarán" (prune) todos los caminos no óptimos del árbol inicial. En este caso, todos los routers de la derecha.\
  Se envía el mensaje de podado indicando que no se necesita ese tráfico.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FJbOd1FvLKfn8SVbLivCg%2Fimage.png?alt=media&amp;token=d74d73ad-fc52-40ae-abe0-27af7a183ee0" alt=""><figcaption></figcaption></figure>

  Luego de enviar los mensajes de podado, se obtiene el camino óptimo entre el router origen y el router del último salto, proveyendo el camino más rápido y más fácil.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FzEYqkrvvLnHnyiCwiwU6%2Fimage.png?alt=media&amp;token=3c8eb1a8-6a2e-43fb-9358-0f7b83683584" alt=""><figcaption></figcaption></figure>

  Este proceso se repite cada 3 minutos, tratando de encontrar una ruta más óptima.<br>
* <mark style="color:blue;">**PIN-SM (Modo disperso)**</mark>: En este modo, se utiliza inicialmente un árbol de distribución compartido y luego, pasado el tiempo, se busca el mejor árbol. Cuando comienza, el árbol de distribución no es óptimo pero, a medida que avanza el tiempo, se aprenderá cual es el mejor árbol, conmutando hacia el árbol con el camino más corto (SPT - Shortest Path Tree) una vez que se determina cual es.\
  \ <mark style="background-color:green;">**Funcionamiento de PIN-SM**</mark>\
  \
  Este modo, utiliza un árbol de distribución compartido.\
  Esencialmente, cuando el servidor envía el primer mensaje, el router lo enviará en cualquier forma posible para llegar desde el primer router hacia el router del último salto.<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2F7Lp9B5npQPDc7kxgskZ8%2Fimage.png?alt=media&amp;token=2da3f58f-1e11-414b-bc26-9b8f0e923824" alt=""><figcaption></figcaption></figure>

  En este caso, lo enviará primero hacia el punto de encuentro (rendezvous point) y luego hacia el router del último salto.\
  Este no es el camino óptimo, pero funciona.\
  \
  Como se puede ver en la imagen, 4 de los 6 routers obtienen la información, mientras que los 2 restantes no se preocupan por esto, guardando recursos.\
  \
  Con el tiempo, nos damos cuenta que es un "camino subóptimo", y será más rápido ir por el camino de la izquierda, por lo que se conmutará a ese camino, librándonos de las ramas inutilizadas, y mutando al árbol del camino más corto (SPT - Shortest Path Tree).<br>

  <figure><img src="https://1668154188-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKyoEXmY0jfChHS8PdGMX%2Fuploads%2FZGgxP6aVNnKq6GmpIzi6%2Fimage.png?alt=media&amp;token=b629a4d4-f28e-4400-9593-516efbdf1f9e" alt=""><figcaption></figcaption></figure>

  Como se puede apreciar, este modo utiliza muchos menos recursos que el modo denso, pero toma más tiempo para encontrar el camino óptimo.
