Todos hemos oído hablar de direcciones IP e incluso de direcciones MAC pero ¿porqué son necesarias las dos direcciones a la hora de comunicarse entre distintos host?

La razón es muy simple, cuando un equipo envía un paquete a una dirección IP el paquete pasa por distintos dispositivos (switch, routers, conmutadores...) y para hacerlo usa las direcciones MAC.

Un host al enviar un paquete pone como dirección IP de origen la suya y como IP destino la del host donde quiere enviar el paquete. También pone como dirección MAC de origen la suya y como dirección destino la del otro equipo si se encuentra en la misma red, si no se encuentra en la misma red pondrá como dirección MAC de destino la de la puerta de enlace.

La tabla ARP

Cuándo un equipo envía un paquete debe "rellenar" los campos de origen y destino de capa 2 (direcciones MAC). Para hacerlo dispone de una tabla llamada tabla ARP o caché ARP en la que se indica la dirección MAC y la IP que tiene asignada esa MAC, de esta forma cuándo el host envía un paquete consulta la tabla y pone la dirección MAC que corresponde a la dirección IP a la cuál quiere enviar el paquete.

Un ejemplo de tabla ARP es el siguiente:

Internet Address   Physical Address      Type
192.168.12.1        00:14:bf:03:3a:0c     dynamic
192.168.12.5        00:0e:53:ac:4e:02    dynamic
192.168.12.10      00:0f:6a:ee:02:b1     dynamic
192.168.12.12      00:14:6c:5b:65:a4    dynamic
192.168.12.13      00:14:6c:2c:56:e2    dynamic
192.168.12.25      00:22:d1:ac:dc:6b    dynamic

Consultar la tabla ARP

Para consultar la tabla ARP abrimos un terminal y usamos el comando arp. Dependiendo de la configuración de tu sistema quizás necesites privilegios de root para ejecutarlo.

En Linux

[usuario@equipo ~]$ arp -n

En Windows

c:\> arp -a

En MAC

[usuario@equipo ~]$ sudo arp -n

Entradas dinámicas o estáticas

Las direcciones que posee la tabla ARP pueden ser dinámicas o estáticas. Las direcciones estáticas las introduce el administrador de red directamente y permanecen en la tabla hasta que sean borradas por el administrador. Las direcciones dinámicas sin embargo son aprendidas automáticamente y pasado un tiempo se borran de la tabla.

Se plantea entonces la siguiente pregunta, si el administrador de red no introduce ninguna entrada en la tabla ARP y/o se necesita enviar un paquete a una dirección que no está en la tabla ¿cómo aprende el equipo esas direcciones automáticamente?.

El proceso ARP

Mediante el protocolo ARP el equipo obtiene la dirección MAC del equipo al cuál quiere enviar un paquete y almacenarla en su tabla ARP.

El procedimiento que se usa para ello es muy simple. (ver imagen) Supongamos que pinkie pie quiere hacer un ping a fluttershy. Pinkie pie sabe que su dirección IP es 10.10.10.16 pero no sabe cuál es la dirección MAC correspondiente a esa dirección IP y por tanto no puede crear la capa de enlace del paquete.

red_ponyville_arp

En ese momento pinkie pie envía un paquete ARP en forma de broadcast preguntando quién tiene la dirección IP 10.10.10.16. Este paquete lo reciben todos los equipos pero sólo contesta fluttershy por ser quién tiene la IP 10.10.10.16, en ese instante fluttershy crea un paquete ARP diciendo "yo tengo esa dirección y esta es mi MAC" y lo envía a pinkie pie. Ese paquete lo recibe pinkie pie y mira cuál es la dirección MAC, a continuación la guarda en su tabla ARP y ya puede mandar paquetes con la información de capa 2 completa.

Esa dirección MAC que ha aprendido no permanece en el equipo eternamente, si no se vuelve a usar es eliminada de la tabla pasado un tiempo y si se vuelve a necesitar tras ser eliminada se repetiría el proceso ARP nuevamente.