arp(7) Miscellaneous Information Manual arp(7) NOMBRE arp - Modulo ARP del nucleo de Linux. DESCRIPCION Este modulo de protocolo del nucleo implementa el protocolo de resolucion 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 interactua directamente con este modulo salvo para configurarlo. En cambio, proporciona un servicio para otros protocolos dentro del nucleo. Un proceso de usuario puede recibir paquetes ARP usando conectores packet(7). Tambien existe un mecanismo para gestionar la cache ARP en el espacio de usuario usando conectores netlink(7). La tabla ARP tambien se puede controlar aplicando la llamada ioctl(2) a cualquier conector AF_INET. El modulo ARP mantiene una cache de asociaciones entre direcciones hardware y direcciones de protocolo. La cache tiene un tamano limitado por lo que las entradas antiguas y menos frecuentemente usadas son eliminadas por una suerte de limpiador. Las entradas marcadas como permanentes nunca son eliminadas por dicho limpiador. La cache se puede manipular directamente mediante ioctls y su comportamiento se puede ajustar mediante la interfaz /proc definida mas adelante. Una entrada de la cache de equipos proximos se considerara caducada cuando no exista una retroalimentacion positiva despues de algun tiempo (consulte /proc mas adelante). Dicha retroalimentacion positiva puede ser obtenida de una capa superior; por ejemplo de una confirmacion positiva (ACK) de TCP. Otros protocolos pueden senalizar la progresion del reenvio usando la opcion MSG_CONFIRM en sendmsg(2). Cuando no hay progresion de reenvio ARP vuelve a intentarlo. Primero intenta consultar a un proceso arp local app_solicit veces. Si esto falla y se conoce la antigua direccion MAC, se envia un sondeo unidestino durante ucast_solicit veces. Si esto tambien falla, se realizara la difusion de una nueva peticion ARP a la red. Las peticiones solo se envian cuando hay datos en cola para ser enviados. Linux automaticamente anadira una entrada proxy arp no permanente cuando reciba una peticion de una direccion a la que el reenvia y cuando el proxy arp este activo en la interfaz receptora. Cuando existe una ruta de rechazo para un destino, no se anade ninguna entrada arp. Ioctls Existen tres ioctls disponibles en todos los conectores AF_INET. Toman un puntero a una estructura struct arpreq como argumento. struct arpreq { struct sockaddr arp_pa; /* direccion del protocolo */ struct sockaddr arp_ha; /* dieccion de hardware */ int arp_flags; /* opciones */ struct sockaddr arp_netmask; /* mascara de red o dir. de protocolo */ char arp_dev[16]; }; SIOCSARP, SIOCDARP y SIOCGARP establecen, borran u obtienen una asociacion ARP, respectivamente.Establecer y borrar asociaciones ARP son operaciones privilegiadas y solo 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 define en arp_dev. arp_dev es una cadena terminada en cero que da nombre a un dispositivo. +----------------------------------------------+ | arp_flags | +----------------+-----------------------------+ |flag | Significado | +----------------+-----------------------------+ |ATF_COM | Busqueda completa | +----------------+-----------------------------+ |ATF_PERM | Entrada permanente | +----------------+-----------------------------+ |ATF_PUBL | Publicar entrada | +----------------+-----------------------------+ |ATF_USETRAILERS | Son necesarios terminadores | +----------------+-----------------------------+ |ATF_NETMASK | Usar una mascara de red | +----------------+-----------------------------+ |ATF_DONTPUB | No responder | +----------------+-----------------------------+ Si se activa la bandera ATF_NETMASK, arp_netmask debe ser valida. La version 2.2 de Linux no soporta entradas de proxy arp de red, por lo que deberia asignar a arp_netmask el valor 0xffffffff o 0 para eliminar una entrada proxy arp existente. La opcion ATF_USETRAILERS esta obsoleta y no deberia usarse. Interfaces /proc El modulo ARP implementa un intervalo de interfaces /proc configurar parametros globales o especificos de una interfaz. Se puede acceder a esto leyendo o escribiendo los ficheros /proc/sys/net/ipv4/neigh/*/*. Cada interfaz del sistema tiene su propio directorio en /proc/sys/net/ipv4/neigh/. La configuracion del directorio 'por defecto' se usa para todos los dispositivos recien creados. A menos que se indique otra cosa, las interfaces relacionadas con el tiempo se especifican en segundos. anycast_delay (desde Linux 2.2) Numero maximo de unidades de tiempo (jiffies) a esperar antes de contestar a un mensaje IPv6 de solicitud de equipos proximos. El soporte "cualquier direccion" (anycast) todavia no esta implementado. El valor por defecto es de 1 segundo. app_solicit (desde Linux 2.2) El numero maximo 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 (desde Linux 2.2) Una vez que se ha encontrado un equipo proximo, la entrada se considera valida durante, al menos, un valor aleatorio entre base_reachable_time/2 y 3*base_reachable_time/2. La validez de una entrada se ampliara si recibe retroalimentacion positiva desde los protocolos de los niveles mas altos. El valor por defecto es de 30 segundos. Este archivo esta obsoleto, actualmente se usa base_reachable_time_ms. base_reachable_time_ms (desde Linux 2.6.12) Igual que para base_reachable_time, pero midiendo el tiempo en milisegundos. Por defecto toma 30000 milisegundos. delay_first_probe_time (desde Linux 2.2) Tiempo de espera antes del primer sondeo despues de que se haya decidido que un equipo ya no esta activo en la red. Por defecto es 5 segundos. gc_interval (desde Linux 2.2) Periodo con el que el limpiador para las entradas de equipos proximos deberia intentar ejecutarse. Por defecto es de 30 segundos. gc_stale_time (desde Linux 2.2) Determina la frecuencia con la que se comprueban las entradas en busca de equipos proximos que ya no estan. Cuando se considera que un equipo vecino ya no esta en la red, se resuelve de nuevo antes de enviarle datos. El valor por defecto es de 60 segundos. gc_thresh1 (desde Linux 2.2) Numero minimo de entradas a guardar en la cache ARP. El recolector de basura no se ejecutara si hay menos entradas en la cache que el numero indicado. Por defecto vale 128. gc_thresh2 (desde Linux 2.2) Numero maximo flexible de entradas a guardar en la cache ARP. El recolector de basura permitira que el numero de entradas exceda este limite durante 5 segundos antes de realizar una recoleccion. El valor por defecto es de 512 entradas. gc_thresh3 (desde Linux 2.2) Numero maximo estricto de entradas a guardar en la cache ARP. El recolector de basura se ejecutara siempre si hay mas entradas en la cache que el numero indicado. Por defecto vale 1024. locktime (desde Linux 2.2) Numero minimo de unidades de tiempo que debe permanecer una entrada ARP en la cache. Esto evita la modificacion continua de la cache ARP si hay mas de una asociacion potencial (debido, generalmente, a una mala configuracion de la red). Por defecto es 1 segundo. mcast_solicit (desde Linux 2.2) Numero maximo de intentos para resolver una direccion mediante multidestino/difusion antes de marcar la entrada como inalcanzable. El valor por defecto es 3. proxy_delay (desde Linux 2.2) Cuando se recibe una solicitud ARP para una direccion 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 (desde Linux 2.2) Numero maximo de paquetes que se pueden encolar para direcciones proxy-ARP. Por defecto vale 64. retrans_time (desde Linux 2.2) Numero de unidades de tiempo a esperar antes de retransmitir una peticion. El valor por defecto es 1 segundo. Este archivo esta obsoleto, actualmentes se usa retrans_time_ms. retrans_time_ms (desde Linux 2.6.12) Numero de unidades de milisegundos a esperar antes de retransmitir una peticion. El valor por defecto es 1 segundo. ucast_solicit (desde Linux 2.2) Numero maximo de intentos para enviar sondeos unidestino antes de preguntar al demonio ARP (vea app_solicit). Por defecto es 3. unres_qlen (desde Linux 2.2) Numero maximo de paquetes que otras capas de red pueden encolar para cada direccion sin resolver. Por defecto vale 3. VERSIONES La estructura struct arpreq cambio en la version 2.0 de Linux para incluir el miembro arp_dev y los numeros de las ioctls cambiaron a la misma vez. El soporte para las antiguas ioctls se elimino en la version 2.2 de Linux. El soporte para entradas proxy arp de red (mascara de red distinta de 0xffffffff) se elimino en la version 2.2 de Linux. Se reemplazo por una configuracion proxy arp automatica realizada por el nucleo para todos los anfitriones (hosts) alcanzables a traves de otras interfaces (cuando estan activos el reenvio y el proxy arp en la interfaz). Las interfaces del tipo neigh/* no existian en versiones de Linux anteriores a la 2.2. ERRORES Algunos valores del cronometro se especifican en unidades de tiempo (jiffies), cuyo valor dependen de la arquitectura y de la version del nucleo. Consulte time(7). No hay forma de indicar una retroalimentacion positiva desde el espacio de usuario. Esto significa que los protocolos orientados a conexion implementados en el espacio de usuario generaran un trafico ARP excesivo, debido a que ndisc volvera regularmente a sondear las direcciones MAC. El mismo problema es aplicable a algunos protocolos del nucleo (p.e. NFS sobre UDP). Esta pagina de manual mezcla funcionalidad especifica de IPv4 y compartida entre IPv4 e IPv6. VEASE TAMBIEN capabilities(7), ip(7), arpd(8) RFC 826 para una descripcion de ARP. RFC 2461 para una descripcion del descubrimiento de equipos de IPv6 y los algoritmos base utilizados. La implementacion IPv4 ARP de Linux 2.2+ usa los algoritmos IPv6 cuando estos son aplicables. TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Juan Piernas y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 arp(7)