Section: Manual del Programador de Linux (7)
Updated: 3 junio 1999
Index Return to Main
Contents
arp - Módulo ARP del núcleo de Linux.
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). Para enviar datos de nuevo al destino, el módulo ARP primero intenta pedir a un demonio arp local una dirección MAC actualizada durante 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.
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.
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.
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 la implementación NFS del núcleo.
Esta página de manual mezcla funcionalidad específica de IPv4 y comportida entre IPv4 e IPv6.
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).
(7)
RFC826 para una descripción de ARP.
RFC2461 para una descripción del descubrimiento de vecinos de IPv6
y los algoritmos base utilizados.
This document was created by man2html, using
the manual pages.
Time: 06:16:28 GMT, January 22, 2005