Arp

ARP
Información sobre la plantilla
5 01.gif
Concepto:Protocolo de Internet.

Arp. Son las siglas en inglés de Address Resolution Protocol (Protocolo de resolución de direcciones). Es un protocolo de nivel de enlace responsable de encontrar la dirección hardware (Ethernet MAC) que corresponde a una determinada dirección IP.


Especificación

ARP está documentado en el RFC (Request For Comments) 826.

Uso

ARP se utiliza en 4 casos referentes a la comunicación entre 2 hosts:

  • Cuando 2 hosts están en la misma red y uno quiere enviar un paquete a otro.
  • Cuando 2 host están sobre redes diferentes y deben usar un gateway/router para alcanzar otro host.
  • Cuando un router necesita enviar un paquete a un host a través de otro router.
  • Cuando un router necesita enviar un paquete a un host de la misma red.

Tablas ARP

La filosofía es la misma que tendríamos para localizar al señor "X" entre 150 personas: preguntar por su nombre a todo el mundo, y el señor "X" nos responderá. Así, cuando a "A" le llegue un mensaje con dirección origen IP y no tenga esa dirección en su tabla ARP, enviará su trama ARP a la dirección broadcast (física), con la IP de la que quiere conocer su dirección física. Entonces, el equipo cuya dirección IP coincida con la preguntada, responderá a "A" enviándole su dirección física. En este momento "A" ya puede agregar la entrada de esa IP a su tabla ARP. Las entradas de la tabla se borran cada cierto tiempo, ya que las direcciones físicas de la red pueden cambiar (Ej: si se estropea una tarjeta de red y hay que sustituirla, o simplemente algún usuario de la red cambia de dirección IP).

Funcionamiento I

Si A quiere enviar una trama a la dirección IP de B (misma red), mirará su tabla ARP para poner en la trama la dirección de destino física correspondiente a la IP de B. De esta forma, cuando les llegue a todos la trama, no tendrán que deshacerla para comprobar si el mensaje es para ellos, sino que se hace con la dirección física.

Funcionamiento II

Si A quiere enviar un mensaje a C (un nodo que no esté en la misma red), el mensaje deberá salir de la red. Así, A envía la trama a la dirección física de salida del router. Esta dirección física la obtendrá a partir de la IP del router, utilizando la tabla ARP. Si esta entrada no está en la tabla, mandará un mensaje ARP a esa IP (llegará a todos), para que le conteste indicándole su dirección física.

Una vez en el router, éste consultará su tabla de encaminamiento, obteniendo el próximo nodo (salto) para llegar al destino, y saca el mensaje por la interfaz correspondiente. Esto se repite por todos los nodos, hasta llegar al último router, que es el que comparte el medio con el host destino. Aquí el proceso cambia: la interfaz del router tendrá que averiguar la dirección física de la IP destino que le ha llegado. Lo hace mirando su tabla ARP, y en caso de no existir la entrada correspondiente a la IP, la obtiene realizando una multidifusión.

Procedimientos

Visualizar el cache ARP actual.

arp -a

Debe devolver algo similar a lo siguiente, en el caso de tratarse de un solo sistema:

m254.alcancelibre.org (192.168.1.254) at 00:14:95:97:27:E9 [ether] on eth0

Cuando se trata de un servidor intermediario (proxy), la tabla puede verse de este modo:

m051.redlocal.net (10.1.1.51) at 00:13:20:D0:09:1E [ether] on eth1
m046.redlocal.net (10.1.1.46) at 00:0F:1F:B1:71:14 [ether] on eth1
m073.redlocal.net (10.1.1.73) at 00:11:25:F6:93:F1 [ether] on eth1
m070.redlocal.net (10.1.1.70) at 00:11:25:F6:A2:52 [ether] on eth1
m040.redlocal.net (10.1.1.40) at 00:0D:60:6E:27:34 [ether] on eth1
m036.redlocal.net (10.1.1.36) at 00:0D:60:6E:25:FB [ether] on eth1
m011.redlocal.net (10.1.1.11) at 00:11:2F:C7:D0:D7 [ether] on eth1

El mandato arp acepta varias opciones más. Si se desea visualizar la información en estilo Linux, se utiliza el parámetro -e. ejemplo:

arp -e

Lo anterior debe devolver una salida similar a la siguiente:

Address                  HWtype  HWaddress           Flags Mask            Iface
m051.redlocal.net        ether   00:13:20:D0:09:1E   C                     eth1
m046.redlocal.net        ether   00:0F:1F:B1:71:14   C                     eth1
m073.redlocal.net        ether   00:11:25:F6:A2:52   C                     eth1
m070.redlocal.net        ether   00:11:25:F6:95:8E   C                     eth1
m040.redlocal.net        ether   00:0D:60:6E:26:6F   C                     eth1
m036.redlocal.net        ether   00:11:25:F6:5F:81   C                     eth1

Si se desea observar lo anterior en formato numérico, se utiliza el parámetro -n. ejemplo:

arp -n

Lo anterior debe devolver algo similar a lo siguiente:

Address                  HWtype  HWaddress           Flags Mask            Iface
10.1.1.46                ether   00:0F:1F:B1:71:14   C                     eth1
10.1.1.70                ether   00:11:25:F6:A2:52   C                     eth1
10.1.1.73                ether   00:11:25:F6:93:F1   C                     eth1
10.1.1.40                ether   00:0D:60:6E:27:34   C                     eth1
10.1.1.34                ether   00:0D:60:6E:26:6F   C                     eth1

Si se desea especificar una interfaz en particular, se utiliza el parámetro -i seguido del nombre de la interfaz. Ejemplo:

arp -i eth0

Lo anterior debe regresar algo similar a lo siguiente, en el caso de tratarse de un solo sistema:

Address                  HWtype  HWaddress           Flags Mask            Iface
m254.alcancelibre.org    ether   00:14:95:97:27:E9   C                     eth0

Si se desea añadir un registro manualmente, se puede hacer utilizando el parámetro -s seguido del nombre de un anfitrión y la dirección MAC correspondiente. Ejemplo:

arp -s m200.redlocal.net 00:08:A1:84:18:AD

Si se quiere eliminar un registro de la tabla, solo se utiliza el parámetro -d seguido del nombre del anfitrión a eliminar. Ejemplo:

arp -d m200.redlocal.net

Para limpiar todo el cache, se puede utilizar un bucle como el siguiente:

for i in `arp -n | awk '{print $1}' | grep -v Address`
do
arp -d $i
done

En el guión anterior se pide crear la variable i a partir de arp con la opción -n para devolver las direcciones numéricas, mostrando a través de awk solo la primera columna de la tabla generada, y eliminando la cadena de caracteres Address. Esto genera una lista de direcciones IP que se asignan como valores de la variable i en el bucle, donde se elimina cada una de estas direcciones IP utilizando arp -d.

El objeto de limpiar el cache de ARP es permitir corregir los registros de la tabla en ciertos escenarios donde, por ejemplo, un servidor o estación de trabajo fue encendido con una dirección IP que ya está uso.

Fuentes