Protocolo de resolucion de direcciones (ARP)
Dado que existen tanto direcciones de la capa de red (por ejemplo, direcciones IP de Internet) como direcciones de la capa de enlace (es decir, direcciones MAC), surge la necesidad de una traducción entre ellas. En internet, esta tarea la lleva a cabo el Protocolo de resolución de direcciones (ARP, Address Resolution Protocol) [RFC826].
Figura 1.- Cada nodo de una LAN tiene una dirección IP y cada adaptador de un nodo tiene un MAC.
Para comprender la necesidad de un protocolo como ARP, considere la red mostrada en la Figura 1. En este sencillo ejemplo, cada nodo tiene una dirección IP única y el adaptador de cada nodo tiene una dirección MAC única. Como siempre, las direcciones IP se muestran en notación decimal con punto y las direcciones MAC en notación hexadecimal. Supongamos ahora que el nodo con la dirección IP 222.222.222.220 desea enviar un datagrama IP al nodo 222.222.222.222. En este ejemplo, tanto el nodo de origen como el destino se encuentran en la misma red (LAN). Para enviar un datagrama, el nodo de origen tiene que proporcionar a su adaptador no sólo el datagrama IP sino también la dirección MAC del nodo de destino 222.222.222.222. El adaptador del nodo emisor construirá entonces una trama de la capa de enlace que contendrá la dirección MAC del nodo destino y enviará la trama a la red LAN.
La pregunta fundamental es: ¿Cómo determina el nodo de origen la dirección MAC del nodo de destino con la dirección IP 222.222.222.222? Como posiblemente ya haya adivinado, utiliza el protocolo ARP. Un módulo ARP en el nodo emisor toma como entrada cualquier dirección IP de la misma LAN y devuelve la dirección MAC correspondiente. En nuestro ejemplo, el nodo emisor 222.222.222.220 proporciona a su módulo ARP la dirección IP 222.222.222.222 y el módulo ARP devuelve la correspondiente dirección MAC 49-BD-D2-C7-56-2A.
Vemos por tanto que ARP resuelve una dirección IP en una dirección MAC. En muchos sentidos, esto es análogo a DNS, que resuelve nombres de host en direcciones IP. Sin embargo, una diferencia importante entre los dos resolvedores es que DNS resuelve nombres de host para hosts ubicados en cualquier lugar de Internet, mientras que ARP resuelve direcciones IP sólo para los nodos de una misma subred. Si un nodo situado en California intentara utilizar ARP para resolver la dirección IP de un nodo en Mississippi, ARP devolvería un error.
Figura 2.- Tabla ARP.
Ahora que hemos explicado lo que hace ARP, vamos a ver cómo lo hace. Cada nodo (host o router) tiene en su memoria una tabla ARP, que contiene las correspondencias entre las direcciones IP y las direcciones MAC. La Figura 2 muestra el aspecto que puede tener la tabla ARP del nodo 222.222.222.220. La tabla ARP también contiene un valor de tiempo de vida (TTL), que indica cuándo se eliminará cada correspondencia de la tabla. Observe que la tabla no necesariamente contiene una entrada para cada nodo de la subred; algunos nodos pueden haber tenido entradas que han caducado, mientras que otros puede que nunca hayan tenido una entrada en la tabla. El tiempo típico de caducidad de una entrada es de 20 minutos desde el momento que se incluye en la entrada en la tabla ARP.
Suponga ahora que el nodo 222.222.222.220 quiere enviar un datagrama con direccionamiento IP a otro nodo de dicha subred. El nodo emisor necesita obtener la dirección MAC del nodo de destino dada la dirección IP de dicho nodo. Esta tarea es fácil si la tabla ARP del nodo emisor tiene una entrada para nodo de destino. Pero, ¿qué ocurre si la tabla ARP no contiene actualmente una entrada para el nodo de destino? En particular, suponga que el nodo 222.222.222.220 desea enviar un datagrama al nodo 222.222.222.222. En este caso, el nodo emisor utiliza el protocolo ARP para resolver la dirección. En primer lugar, el nodo emisor construye un paquete especial denominado paquete ARP. Un paquete ARP contiene varios campos, incluyendo las direcciones MAC e IP del emisor y el receptor. Los paquetes de consulta y de respuesta ARP tienen el mismo formato. El propósito del paquete de consulta ARP es consultar a todos los demás nodos de la subred con el fin de determinar la dirección MAC correspondiente a la dirección IP que está resolviendo.
Volvamos a nuestro ejemplo. El nodo 222.222.222.220 pasa un paquete de consulta ARP al adaptador junto con una indicación de que el adaptador enviará el paquete a la dirección de difusión MAC, FF-FF-FF-FF-FF-FF. El adaptador encapsula el paquete ARP en una trama de la capa de enlace, utiliza la dirección de difusión para la dirección de destino de la trama y la transmite a la subred. Se puede usar la analogía del número de la seguridad social y la dirección postal: una consulta ARP es equivalente a una persona gritando en una sala abarrotada de cubículos de alguna empresa (por ejemplo, CualquierEmpresa): “¿Cuál es el número de la seguridad social de la persona cuya dirección postal es Cubículo 13, Sala 112, CualquierEmpresa, Palo Alto, California?” La trama que contiene la consulta ARP es recibida por todos los demás adaptadores existentes en la subred y (a causa de la dirección de difusión) cada adaptador pasa la consulta ARP contenida en la trama al módulo ARP de dicho nodo. Cada nodo realiza una comprobación para ver si su dirección IP se corresponde con la dirección IP de destino del paquete ARP. El único nodo en el que se produzca la coincidencia devolverá al nodo que ha realizado la consulta una respuesta ARP con la correspondencia deseada. El nodo que ha realizado la consulta 222.222.222.220 podrá entonces actualizar su tabla ARP y enviar su datagrama IP, encapsulado dentro de una trama de la capa de enlace cuya dirección de destino MAC es la del nodo que ha contestado a la anterior consulta ARP.
Hay un par de cosas interesantes que comentar acerca del protocolo ARP. En primer lugar, el mensaje ARP de consulta se envía dentro de una trama de difusión, mientras que el mensaje ARP de respuesta se envía dentro de una trama estándar. Antes de continuar leyendo debería parar a pensar por qué esto es así. En segundo lugar, ARP es un protocolo plug-and-play; es decir, la tabla ARP de un nodo se construye automáticamente (no tiene que ser configurada por el administrador del sistema). Y si un nodo está desconectado de la subred, su entrada finalmente se elimina de las tablas de los restantes nodos de la subred.
A menudo, los estudiantes se preguntan si ARP es un protocolo de la capa de enlace o un protocolo de la capa de red. Como hemos visto, un paquete ARP se encapsula dentro de una trama de la capa de enlace y así se sitúa, arquitectónicamente, encima de la capa de enlace. Sin embargo, un paquete ARP dispone de campos que contienen direcciones de la capa de enlace, por lo que se podría decir que es un protocolo de la capa enlace, pero también contiene direcciones de la capa de red y, por tanto, podría también argumentarse que es un protocolo de la capa de red. En último término, probablemente ARP sea considerado un protocolo que se encuentra a caballo entre las capas de enlace y de red.
Envío de un datagrama a un nodo fuera de la subred
Figura 3.- Esquema de red con 2 subredes.
Ahora debería tener claro cómo funciona ARP cuando un nodo desea enviar un datagrama a otro nodo que se encuentra en la misma subred. Pasemos entonces a una situación algo más complicada en la que un nodo de una subred desea enviar un datagrama de la capa de red a un nodo que está fuera de la subred (es decir, a través de un router a otra subred). Estudiemos esta situación en el contexto de la Figura 3, que muestra una red simple que consta de dos subredes interconectadas mediante un router.
Hay varias cuestiones interesantes que destacar en la Figura 3. En primer lugar, existen dos tipos de nodos: hosts y routers. Cada host tiene exactamente una dirección IP y un adaptador. Pero, un router tiene una dirección IP para cada una de sus interfaces. Para cada interfaz de router existe también un módulo ARP (en el router) y un adaptador. Dado que el router de la Figura 3 tiene dos interfaces, tendrá dos direcciones IP, dos módulos ARP y dos adaptadores. Por supuesto, cada adaptador de la red tiene su propia dirección MAC.
Fíjese también en que la subred 1 tiene la dirección de red 111.111.111/24 y que la subred 2 tiene la dirección de red 222.222.222/24. Así, todas las interfaces conectadas a la subred 1 tienen direcciones de la forma 111.111.111.xxx y todas las interfaces conectadas a la subred 2 tienen direcciones de la forma 222.222.222.xxx.
Examinemos ahora cómo un host de la subred 1 enviaría un datagrama a un host de la subred 2. Específicamente, suponga que el host 111.111.111.111 desea enviar un datagrama IP a un host 222.222.222.222. Como es habitual, el host emisor pasa el datagrama a su adaptador. Pero el host emisor también tiene que indicar a su adaptador una dirección MAC de destino apropiada, ¿Qué dirección MAC debería utilizar el adaptador? Una posibilidad sería probar si la dirección MAC apropiada es la del adaptador para el host 222.222.222.222, es decir, 49-BD-D2-C7-56-2A. Sin embargo, esta suposición resultaría errónea. Si el adaptador emisor utilizara dicha MAC, entonces ninguno de los adaptadores de la subred 1 se molestaría en pasar el datagrama IP a su capa de red, ya que la dirección de destino de la trama no coincidiría con la dirección MAC de ningún adaptador de la subred 1. El datagrama terminaría muriendo e iría al cielo de los datagramas.
Si nos fijamos en la Figura 3 vemos que para que un datagrama vaya desde 111.111.111.111 a un nodo de la subred 2, el datagrama tiene en primer lugar que ser enviado a la interfaz de router 111.111.111.110, que es la dirección MAC apropiada para la trama es la dirección del adaptador de la interfaz de router 111.111.111.110, es decir, E6-E9-00-17-BB-4B. ¿Cómo adquiere el host de emisor la dirección MAC para la dirección 111.111.111.110? ¡Por supuesto, utilizando ARP! Una vez que el adaptador del emisor tiene esta dirección MAC, crea una trama (que contiene el datagrama direccionado a 222.222.222.222) y envía la trama hacia la subred 1. El adaptador del router de la subred 1 ve que la trama de la capa de enlace se dirige hacia él, y, por tanto, pasa la trama a la capa de red del router. ¡Estupendo! El diagrama IP se ha transmitido con éxito desde el host de origen al router. Pero todavía no hemos termiando. Todavía nos queda llevar el datagrama desde el router al destino. Ahora el router tiene que determinar la interfaz correcta a la que el datagrama será reenviado. Esto se hace consultando la tabla de reenvío del router. La tabla de reenvío indica al router que el datagrama es reenviado a través de la interfaz de router 222.222.222.220. Esta interfaz entonces pasa el datagrama a su adaptador, que encapsula el datagrama en una nueva trama y la envía a la subred 2. Esta vez, la dirección MAC de destino de la trama es la dirección MAC del destino final. Pero, ¿cómo obtiene el router esta dirección MAC de destino? ¡Por supuesto, de ARP!
ARP para Ethernet está definido en el documento RFC826. En el tutorial de TCP/IP, RFC1180, se proporciona una introducción a ARP.