# B.A.T.M.A.N.

El Better Approach To Mobile Adhoc Networking, o B.A.T.M.A.N. es un protocolo de enrutamiento que actualmente se encuentra en fase de desarrollo por la Comunidad "Freifunk" y destinadas a reemplazar el Optimized Link State Routing (OLSR).
B.A.T.M.A.N. tiene su punto crucial en los conocimientos sobre la descentralización de la mejor ruta a través de la red, no permitiendo que un solo nodo tenga todos los datos. Esta técnica elimina la necesidad de difundir información relativa a los cambios de red a todos los nodos de la misma. El nodo individual solo guarda información sobre la "dirección" si hubo recibido datos de ésta, y envía sus datos en consecuencia. Por este medio los datos se transmiten de un nodo a otro y obtiene paquetes de rutas individuales, creados de forma dinámica. Así se crea una red de inteligencia colectiva.
A principios de 2007, los desarrolladores de B.A.T.M.A.N. comenzaron a experimentar con la idea de enrutamiento en la capa 2 (capa Ethernet) en lugar de la capa 3. Para diferenciarse de la capa 3 de enrutamiento daemon fue elegido el sufijo "adv" (de advanced, avanzado). En lugar de enviar paquetes UDP y la manipulación de las tablas de encaminamiento, que proporciona una interfaz de red virtual y transparente transporta paquetes por sí mismo. El módulo del núcleo batman-adv es parte oficial del núcleo Linux desde la versión 2.6.38.

## Funcionamiento

B.A.T.M.A.N. cuenta con elementos clásicos de los protocolos de enrutamiento: Detecta otros nodos B.A.T.M.A.N. y encuentra el mejor camino (ruta) a los mismos. También se realiza un seguimiento de los nuevos nodos e informa a sus vecinos sobre su existencia.
En las redes estáticas, los administradores de red o técnicos deben decidir con cual equipo se llega a través de qué manera o por medio de un cable. Como las redes de radio sufren cambios constantes y bajos umbrales de participación son una parte vital de la fundación de redes "Freifunk" ya que "esta tarea tiene que ser automatizada en la medida de lo posible".
De manera regular, cada nodo envía la llamada "emisión" (un mensaje general para todos) de esa manera informa a todos sus vecinos acerca de su existencia. Los vecinos entonces retransmiten este mensaje para sus vecinos y así sucesivamente. Esto conduce la información a cada nodo en la red. Con el fin de encontrar la mejor ruta para un cierto nodo, B.A.T.M.A.N. cuenta los mensajes de origen que fueron recibidos y los registros de dónde provino dicho mensaje.
Al igual que los protocolos de vector distancia, pero a diferencia de los protocolos de estado de enlace, B.A.T.M.A.N. no trata de determinar la forma general, sino que, mediante el uso de los mensajes de origen, solo utiliza el primer paquete en la dirección correcta. Los datos se entregan a la vecina en esa dirección, que a su vez utiliza el mismo mecanismo. Este proceso se repite hasta que los datos lleguen a su destino.
Además para redes de radio, B.A.T.M.A.N. también se puede utilizar con conexiones de cable comunes, tales como Ethernet.

## Historia

La tarea consistía en crear un protocolo que fuera tan fácil, tan pequeño y tan rápido como sea posible. Parece por tanto razonable dividir el desarrollo en varias fases e implementar funciones complejas mediante un proceso iterativo:

### Versión uno

En la primera fase, el algoritmo de enrutamiento fue implementado y probado por su practicidad e idoneidad para la tarea en cuestión. Para el envío y recepción de mensajes de origen (información acerca de la existencia) fue escogido el puerto UDP 1966.

### Versión dos

En esta versión se realiza en el algoritmo una suposición importante: tan pronto como un nodo recibe datos existencia de otro nodo, se supone que también puede enviar datos de regreso. En las redes de radio, sin embargo, puede muy bien ser factible que la comunicación se realice en un solo sentido. Un mecanismo fue incorporado en el protocolo para permitir esto y para resolver los problemas planteados. El mecanismo permite que el nodo determine si un nodo vecino proporciona una comunicación bidireccional, solo los nodos bidireccionales se consideran parte de la red, los nodos de una vía no son completamente incluidos.

### Versión tres

La mayor innovación de esta versión es el soporte B.A.T.M.A.N. de los dispositivos de red múltiples. Ahora, un ordenador o un router ejecutando B.A.T.M.A.N. puede implementar un punto central, así como lo sería una iglesia u otro edificio alto, y tiene varias interfaces de red por cable o inalámbrica que pueden ser atribuidas. Cuando se encuentra desplegado, B.A.T.M.A.N. puede transmitir datos de red en más de una dirección sin ningún retardo de retransmisión.
Ciertos fenómenos inusuales y circunstancias especiales podría aparecer durante la determinación de la mejor ruta a través de la red. Estos han sido abordados y se contrarresta evitando la circulación por esa vía de enrutamiento (que puede impedir que los datos llegan a su destino).
En esta versión, un nodo puede brindar informes a la red que proporciona acceso a Internet. Otros nodos utilizarán esa información para evaluar si existe una conexión a Internet cercana a ellos y cual es el ancho de banda disponible. Se puede utilizar una puerta de enlace específica o permitir que B.A.T.M.A.N. determine qué puerta de entrada deberá utilizar en función de criterios tales como la velocidad de conexión.
Es en esta versión también que anuncia los dispositivos que no ejecutan B.A.T.M.A.N. por sí mismos. Por lo general, este método se utiliza para conectar redes de caseras a redes encadenadas. Por ejemplo, una instalación en el techo mediante una antena se conectará a la red inalámbrica a través de B.A.T.M.A.N. y el resto de la casa simplemente se dará a conocer, por lo tanto también estará accesible a la conexión.
Esta versión de B.A.T.M.A.N. ha demostrado que presentan altos niveles de estabilidad pero con los tiempos de convergencia ligeramente lentos en condiciones del mundo real, esto es confirmado por los análisis teóricos.