Protocolo arp
El protocolo ARP¶
Introducción¶
ARP (Address Resolution Protocol) es un protocolo de nivel de enlace/red que permite averiguar qué dirección MAC corresponde a una dirección IP dentro de una misma red local (LAN). Funciona mapeando IP → MAC, necesario porque una red Ethernet necesita direcciones MAC para enviar tramas.
Los equipos para comunicarse a nivel de red utilizan direcciones lógicas, las direcciones IP.
Para que un paquete IP llegue a su destinatario, en la capa de enlace al encapsular el paquete en una trama hemos de saber la dirección MAC a la que tenemos que enviar la trama para añadirla al encabezado de la misa. Es hay donde entra en juego el protocolo ARP.
El Protocolo de Resolución de Dirección (en inglés ARP significa Address Resolution Protocol) o protocolo ARP permite averiguar la dirección MAC asociada a una determinada dirección IP.
Funcionamiento.¶
El sistema operativo de los equipos guarda en memoria cache un tabla llamada tabla de búsqueda en la que en cada entrada hay correspondencias entre direcciones IP y direcciones MAC.
Cada una de estas entradas se guarda durante un periodo de tiempo corto ya que los equipos puede cambiar tanto sus direcciones IP como sus direcciones físicas (MAC)
Supongamos que el el host A (IP 192.168.1.10) quiere enviar algo a B (IP 192.168.1.20) e inicialmente el contenido de su tabla de búsqueda es el siguiente:
arp -n
Dirección TipoHW DirecciónHW Indic Máscara Interfaz
192.168.1.1 ether 60:ce:86:bf:d8:d6 C eno1
192.168.1.14 ether dc:62:79:87:df:fe C eno1
No sabe la dirección MAC que tiene el equipo con IP 192.168.1.20. Para descubrirla utiliza ARP.
El proceso es el siguiente
-
A envía un ARP Request (difusión / broadcast):
-
MAC destino:
FF:FF:FF:FF:FF:FF -
Pregunta: “¿Quién tiene la IP 192.168.1.20?”
-
B recibe el broadcast (porque llega a todos los equipos en la LAN).
-
B responde con un ARP Reply (unicast):
-
“El equipo con IP 192.168.1.20 soy yo, mi MAC es AA:BB:CC:11:22:33”.
-
A actualiza su tabla ARP con esa correspondencia. Si ahora consultamos su contenido es el siguiente:
arp -n
Dirección TipoHW DirecciónHW Indic Máscara Interfaz
192.168.1.1 ether 60:ce:86:bf:d8:d6 C eno1
192.168.1.14 ether dc:62:79:87:df:fe C eno1
192.168.1.20 ether aa:bb:cc:11:22:33 C eno1
Y A ya puede construir la trama para comunicarse con B
De forma resumida, el esquema de funcionamiento del protocolo sería el siguiente:
Esquema y campos de un paquete ARP**¶
ARP Request / ARP Reply contienen:
| Campo | Descripción |
|---|---|
| Hardware Type | 1 para Ethernet |
| Protocol Type | 0x0800 para IPv4 |
| Hardware Size | 6 (bytes MAC) |
| Protocol Size | 4 (bytes IP) |
| Opcode | 1 = Request, 2 = Reply |
| Sender MAC Address | MAC del emisor |
| Sender IP Address | IP del emisor |
| Target MAC Address | En Request: 00:00:00:00:00:00 |
| Target IP Address | IP del destino |
Los campos del paquete que nos interesan son:
- Sender MAC Address
- Sender IP Address
- Target MAC Address
- IP del destino
Ejemplo ARP Request¶
Para el ejemplo anterior, los campos del ARP request serían:
- Sender MAC:
10:AB:22:33:44:55 - Sender IP:
192.168.1.10 - Target MAC:
00:00:00:00:00:00 - Target IP:
192.168.1.20
Target MAC es la MAC que queremos a averiguar, que como no la sabemos en la petición tienen todos sus bits a 0.
Este paquete se encapsula en una trama de difusión y se envía a la red.
Ejemplo de ARP Reply¶
Al ser una trama de difusión, todos los equipos de la red reciben la trama y la desencapsulan. Miran el campo Target IP del paquete y si la IP coincide con la del equipo este construye un paquete ARP Reply de respuesta con los valores:
- Sender MAC:
AA:BB:CC:11:22:33- La MAC del equipo que responde qué es el valor a averiguar - Sender IP:
192.168.1.20 - Target MAC:
10:AB:22:33:44:55 - Target IP:
192.168.1.10
En el Reply simplemente se invierte el par Sender/Target, incluyendo en el Sender MAC la MAC que quiere averiguar el equipo A.
Este paquete es encapsulado en una trama unicast de respuesta y enviada por la red.
Funcionamiento del protocolo ARP cuando la IP de destino está en otra red¶
ARP solo se usa dentro de la misma red local.
Si A quiere llegar, por ejemplo, a la IP 1.1.1.1, aplica su máscara a la dirección y determina que dicha IP NO está en su red.
Entonces:
- A no puede enviar directamente la trama al destinatario, sino que se la envía al gateway (router) para que este se encargue de encaminarla a la siguiente red. Por lo tanto, necesita la MAC del router, no la de
1.1.1.1 - Si no la conoce, realiza un ARP Request para la IP del router.
- El router responde con su MAC.
- A envía la trama al router, y este ya se encarga del resto.
Tabla direccionamiento MAC de los switches al reciben tramas ARP¶
Como vimos en el apartado de conmutación de tramas, los switches aprenden direcciones MAC observando la MAC de origen de cualquier trama que les llega, incluidas las ARP. Por tanto:
- Cuando un switch recibe una trama ARP Request, aprende que la MAC del emisor está en el puerto por el que entró y actualiza su tabla con dicha información.
- Como el ARP Request va por broadcast, el switch lo reenvía por todos los demás puertos.
-
El ARP Reply es unicast, y cuando el switch lo recibe:
- Aprende la MAC del host que responde.
- Lo reenvía solo por el puerto correcto, que sabe cual es puesto que lo aprendió en el ARP Request.
Comandos arp en Linux¶
Para ver el contenido de la tabla ARP ejecutamos
Si queremos ver los equipos incluidos por su IP en lugar de por su nombre utilizamos:
Si queremos eliminar una determinada entrada de la tabla arp lo podemos hacer ejecutando:
- Donde direccion-ip es la dirección IP de la entrada en la tabla que queremos eliminar
Si lo que quisieramos es limpiar todas las direcciones MAC de la tabla arp lo podemos hacer ejecutando:
Para averiguar el tiempo de vida de las entradas en la tabla arp lo podemos hacer ejecutando: