# Distance Vector Multicast Routing Protocol

Distance Vector Multicast Routing Protocol, abreviado comúnmente por sus siglas DVMRP, es un protocolo de ruteo multicast.

## Introducción

El DVMRP es un protocolo IP multicast de tráfico de enrutamiento en los entornos de multidifusión. Multidifusión es el envío de la información en una red a múltiples destinos simultáneamente. Para llevar a cabo un correcto envío de estos mensajes hay que definir una serie de pautas y reglamentos. Hay cuatro formas de gestionar el tráfico de enrutamiento:
* Unicast.
* Broadcast.
* Multicast.
* Anycast.

## Características

Todos los routers deben de incorporar un protocolo de la familia “distance vector” como RIP.
Este tipo de protocolo de enrutamiento de tráfico Multicast utiliza la técnica de broadcast RPF (Reverse Past Forward) con poda. Esta técnica consiste en dos pasos:
* Primero, se forma el árbol con los caminos más cortos en el sentido (RECEPTOR->FUENTE).
* Cuando un router DR que no tiene conectado ningún miembro del grupo multicast, recibe un paquete broadcast del grupo, envía un mensaje de poda al enrutador del que ha recibido el paquete. Así indica que no está interesado en ese tráfico específico.
Estos pasos se repiten periódicamente. Normalmente cada 3 minutos.
Como todos los protocolos, posee algunas desventajas:
* Los routers necesitan guardar el estado de los mismos para saber si hay poda o no.
* Cómputos asociados que lleva el protocolo en cada uno de los routers.
* En el caso de que haya un número elevado de grupos multicast o que la propia red sea de gran tamaño, el broadcast periódico de los paquetes multicast puede empeorar el rendimiento de la red.
* Cada enrutador debe gestionar todas las parejas (grupo, fuente) ya que puede haber varias. Así si el número de grupos y de fuentes es grande, el rendimiento de la red puede empeorar.
* Se puede dar el caso de que algún enrutador que esté ubicado en una posición central del árbol pudiese manejar un número grande de grupos multicast.

## Estructura

El protocolo DVMRP usa IGMP para cambiar los datagramas en el proceso de enrutamiento. Estos datagramas están compuestos por dos partes bien distinguidas:
* Una cabecera IGMP.
* Un stream para datos.
Como vemos en esta imagen, así es como se compone un datagrama DVMRP. Para ver en detalle cada elemento:
* Versión - Por defecto es la 1.
* Tipo - DVMRP tipo es el 3.
* Subtipo - El subtipo puede ser:
* Response: el mensaje viene de un enrutador hacia un destino o varios.
* Request: el mensaje responde a un enrutador desde un destino o varios.
* Non-membership report: mensaje de liberación de grupo multicast.
* Non-membership cancellation: mensajo previo a liberación de grupo multicast.
* CRC - es un elemento para certificar el contenido del paquete. El CRC del 'DVMRP debe ser calculado con el campo iniciado a cero.

## Funcionamiento

Resumidamente el protocolo funciona de la siguiente manera:
Cuando un enrutador recibe un paquete multicast, anota la identificación del camino por el que ha llegado: Si es el camino que se usaría para alcanzar al emisor de ese paquete entonces lo difunde por todos los caminos activos. En caso contrario, elimina este paquete. Es un protocolo más de enrutamiento que ayuda a la capa de red a realizar su funcionamiento, es un complemento de este (capa de red).
Para una mejor visión del funcionamiento, ver este vídeo:
Vídeo de funcionamiento del protocolo DVMRP

## MBone

Alrededor de los años 90 se probó un experimento denominado Redes Mbone que consistía en crear una red multicast por medio de Internet utilizando formas de enrutamiento de tipo túnel. El término Mbone hace referencia al acrónimo formado por estas dos palabras:Multicast Backbone. Hoy en día, el protocolo de encaminamiento multicast usado por los routers de las Redes Mbone es DVMRP.

## Software Multicast para DVMRP

* Media Tools Repository - colección de herramientas para Redes Mbone.
* VideoLAN - Aplicación de Software libre para realizar streaming de vídeo usando multicast.
* Xorp - Enrutador por software que tiene soporte para multicast (IGMP, PIM).
* Smcroute - utilidad simple para manipular rutas multicast en el núcleo Linux.
* SSM-ping - herramienta para comprobar la conectividad multicast.