Provided by:
manpages-es_1.55-7_all 
NOMBRE
arp - Módulo ARP del núcleo de Linux.
DESCRIPCIÓN
Este módulo de protocolo del núcleo implementa el protocolo de
resolución de direcciones (Address Resolution Protocol, ARP) definido
en RFC 826. Se usa para convertir direcciones hardware de la Capa 2 a
direcciones del protocolo IPv4 y viceversa, en redes conectadas
directamente. El usuario normalmente no interactúa directamente con
este módulo salvo para configurarlo. En cambio, proporciona un servicio
para otros protocolos dentro del núcleo.
Un proceso de usuario puede recibir paquetes ARP usando conectores
packet(7). También existe un mecanismo para gestionar la cache ARP en
el espacio de usuario usando conectores netlink(7). La tabla ARP
también se puede controlar aplicando la llamada ioctl (2) a cualquier
conector PF_INET.
El módulo ARP mantiene una cache de asociaciones entre direcciones
hardware y direcciones de protocolo. La cache tiene un tamaño limitado
por lo que las entradas antiguas y menos frecuentemente usadas son
elminadas por un recolector de basura. Las entradas marcadas como
permanentes nunca son eliminadas por el recolector de basura. La caché
se puede manipular directamente mediante ioctls y su comportamiento se
puede ajustar mediante las sysctls definidas más abajo.
Una entrada de la cache de vecinos se considerará caduca cuando no
exista una retroalimentación positiva después de algún tiempo para una
asociación existente (vea las sysctls más abajo). La retroalimentación
positiva puede ser obtenida de una capa superior; por ejemplo de una
confirmación positiva (ACK) de TCP. Otros protocolos pueden señalizar
la progresión del reenvío usando la opción MSG_CONFIRM en sendmsg(2).
Cuando no hay progresión de reenvío ARP vuelve a intentarlo. Primero
intenta consultar a un demonio arp local app_solicit veces. Si esto
falla y se conoce la antigua dirección MAC, se envía un sondeo
unidestino durante ucast_solicit veces. Si esto también falla, se
realizará la difusión de una nueva petición ARP a la red. Las
peticiones sólo se envían cuando hay datos encolados para ser enviados.
Linux automáticamente añadirá una entrada proxy arp no permanente
cuando reciba una petición de una dirección a la que él reenvía y
cuando el proxy arp esté activo en la interfaz receptora. Cuando existe
una ruta de rechazo para un destino, no se añade ninguna entrada arp.
IOCTLS
Existen tres ioctls disponibles en todos los conectores PF_INET. Toman
un puntero a una estructura struct arpreq como argumento.
struct arpreq
{
struct sockaddr arp_pa; /* dirección del protocolo */
struct sockaddr arp_ha; /* dirección hardware */
int arp_flags; /* opciones */
struct sockaddr arp_netmask; /* máscara de red de la dirección
de protocolo */
char arp_dev[16];
};
SIOCSARP, SIOCDARP y SIOCGARP establecen, borran u obtienen una
asociación ARP, respectivamente. Establecer y borrar asociaciones ARP
son operaciones privilegiadas y sólo pueden ser realizadas por un
proceso con la capacidad CAP_NET_ADMIN o con un UID efectivo 0.
arp_pa debe ser un conector AF_INET y arp_ha debe tener el mismo tipo
que el dispositivo que se especifica en arp_dev. arp_dev es una cadena
terminada en cero que da el nombre de un dispositivo.
+----------------------------------------------+
| arp_flags |
+----------------+-----------------------------+
|Bandera | Significado |
+----------------+-----------------------------+
|ATF_COM | Búsqueda completa |
+----------------+-----------------------------+
|ATF_PERM | Entrada permanente |
+----------------+-----------------------------+
|ATF_PUBL | Publicar entrada |
+----------------+-----------------------------+
|ATF_USETRAILERS | Son necesarios terminadores |
+----------------+-----------------------------+
|ATF_NETMASK | Usar una máscara de red |
+----------------+-----------------------------+
|ATF_DONTPUB | No responder |
+----------------+-----------------------------+
Si se activa la bandera ATF_NETMASK, arp_netmask debe ser válida. La
versión 2.2 de Linux no soporta entradas de proxy arp de red, por lo
que debería asignar a arp_netmask el valor 0xffffffff o 0 para eliminar
una entrada proxy arp existente. La opción ATF_USETRAILERS está
obsoleta y no debería usarse.
SYSCTLS
El módulo ARP soporta una interfaz sysctl para configurar parámetros
globales o específicos de una interfaz. Se puede acceder a las sysctls
leyendo o escribiendo los ficheros /proc/sys/net/ipv4/neigh/*/* o con
la interfaz sysctl(2). Cada interfaz del sistema tiene su propio
directorio en /proc/sys/net/ipv4/neigh/. La configuración del
directorio ‘por defecto’ se usa para todos los dispositivos recién
creados. A menos que se indique otra cosa, las sysctls relacionadas con
el tiempo se especifican en segundos.
anycast_delay
Número máximo de unidades de tiempo (jiffies) a esperar antes de
contestar a un mensaje IPv6 de solicitud de vecinos. El soporte
"cualquier dirección" (anycast) todavía no está implementado.
El valor por defecto es de 1 segundo.
app_solicit
El número máximo de sondeos a enviar a un demonio ARP en el
espacio de usuario mediante netlink antes de recurrir a sondeos
multidestino (vea mcast_solicit). Por defecto es 0.
base_reachable_time
Una vez que se ha encontrado un vecino, la entrada se considera
válida durante, al menos, un valor aleatorio entre
base_reachable_time/2 y 3*base_reachable_time/2. La validez de
una entrada se ampliará si recibe retroalimentación positiva
desde los protocolos de los niveles más altos. El valor por
defecto es de 30 segundos.
delay_first_probe_time
Tiempo de espera antes del primer sondeo después de que se haya
decidido que un vecino está caduco. Por defecto es 5 segundos.
gc_interval
Periodo con el que el recolector de basura para las entradas de
vecinos debería intentar ejecutarse. Por defecto es de 30
segundos.
gc_stale_time
Determina la frecuencia con la que se comprueban las entradas en
busca de vecinos caducos. Cuando la entrada de un vecino se
considera caduca, se resuelve de nuevo antes de enviarle datos.
El valor por defecto es de 60 segundos.
gc_thresh1
Número mínimo de entradas a guardar en la cache ARP. El
recolector de basura no se ejecutará si hay menos entradas en la
cache que el número indicado. Por defecto vale 128.
gc_thresh2
Número máximo flexible de entradas a guardar en la cache ARP. El
recolector de basura permitirá que el número de entradas exceda
éste límite durante 5 segundos antes de realizar una
recolección. El valor por defecto es de 512 entradas.
gc_thresh3
Número máximo estricto de entradas a guardar en la cache ARP. El
recolector de basura se ejecutará siempre si hay más entradas en
la caché que el número indicado. Por defecto vale 1024.
locktime
Número mínimo de unidades de tiempo que debe permanecer una
entrada ARP en la cache. Esto evita la modificación continua de
la cache ARP si hay más de una asociación potencial (debido,
generalmente, a una mala configuración de la red). Por defecto
es 1 segundo.
mcast_solicit
Número máximo de intentos para resolver una dirección mediante
multidestino/difusión antes de marcar la entrada como
inalcanzable. El valor por defecto es 3.
proxy_delay
Cuando se recibe una solicitud ARP para una dirección proxy-ARP
conocida, esperar hasta proxy_delay unidades de tiempo antes de
responder. Esto se utiliza para evitar inundar la red en algunos
casos. Por defecto vale 0,8 segundos.
proxy_qlen
Número máximo de paquetes que se pueden encolar para direcciones
proxy-ARP. Por defecto vale 64.
retrans_time
Número de unidades de tiempo a esperar antes de retransmitir una
petición. El valor por defecto es 1 segundo.
ucast_solicit
Número máximo de intentos para enviar sondeos unidestino antes
de preguntar al demonio ARP (vea app_solicit). Por defecto es
3.
unres_qlen
Número máximo de paquetes que otras capas de red pueden encolar
para cada dirección sin resolver. Por defecto vale 3.
FALLOS
Algunos valores del cronómetro se especifican en unidades de tiempo
(jiffies), cuyo valor dependen de la arquitectura. En los Alpha una
unidad de tiempo es 1/1024 segundos y en la mayoría de arquitecturas es
1/100 segundos.
No hay forma de indicar una retroalimentación positiva desde el espacio
de usuario. Esto significa que los protocolos orientados a conexión
implementados en el espacio de usuario generarán un tráfico ARP
excesivo, debido a que ndisc volverá regularmente a sondear las
direcciones MAC. El mismo problema es aplicable a algunos protocolos
del núcleo (p.e. NFS sobre UDP).
Esta página de manual mezcla funcionalidad específica de IPv4 y
comportida entre IPv4 e IPv6.
VERSIONES
La estructura struct arpreq cambió en la versión 2.0 de Linux para
incluir el miembro arp_dev y los números de las ioctls cambiaron a la
misma vez. El soporte para las antiguas ioctls se eliminó en la
versión 2.2 de Linux.
El soporte para entradas proxy arp de red (máscara de red distinta de
0xffffffff) se eliminó en la versión 2.2 de Linux. Se reemplazó por una
configuración proxy arp automática realizada por el núcleo para todos
los anfitriones (hosts) alcanzables a través de otras interfaces
(cuando están activos el reenvío y el proxy arp en la interfaz).
Los sysctls del tipo neigh/* no existían en versiones de Linux
anteriores a la 2.2.
VÉASE TAMBIÉN
ip(7)
RFC826 para una descripción de ARP.
RFC2461 para una descripción del descubrimiento de vecinos de IPv6 y
los algoritmos base utilizados.
La implementación IPv4 ARP de Linux 2.2+ usa los algoritmos IPv6 cuando
éstos son aplicables.