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
AF_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 eliminadas
por una suerte de limpiador. Las entradas marcadas como permanentes nunca son
eliminadas por dicho limpiador. La caché se puede manipular
directamente mediante ioctls y su comportamiento se puede ajustar mediante la
interfaz
/proc definida más adelante.
Una entrada de la cache de equipos próximos se considerará
caducada cuando no exista una retroalimentación positiva después
de algún tiempo (consulte
/proc más adelante). Dicha
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 proceso 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 en cola 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
AF_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; /* diección de hardware */
int arp_flags; /* opciones */
struct sockaddr arp_netmask; /* máscara de red o dir. 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 define en
arp_dev.
arp_dev
es una cadena terminada en cero que da nombre a un dispositivo.
arp_flags |
|
flag |
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 implementa un intervalo de interfaces
/proc
configurar parámetros globales o específicos 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 configuración del
directorio 'por defecto' se usa para todos los dispositivos recién
creados. A menos que se indique otra cosa, las interfaces relacionadas con el
tiempo se especifican en segundos.
-
anycast_delay (desde Linux 2.2)
- Número máximo de unidades de tiempo (jiffies)
a esperar antes de contestar a un mensaje IPv6 de solicitud de equipos
próximos. El soporte "cualquier dirección"
(anycast) todavía no está implementado. El valor por defecto
es de 1 segundo.
-
app_solicit (desde Linux 2.2)
- 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 (desde Linux 2.2)
- Una vez que se ha encontrado un equipo próximo, 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. Este archivo
está 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 después de
que se haya decidido que un equipo ya no está 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 próximos debería 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 próximos que ya no están.
Cuando se considera que un equipo vecino ya no está 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)
- 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 (desde Linux 2.2)
- 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 (desde Linux 2.2)
- 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 (desde Linux 2.2)
- 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 (desde Linux 2.2)
- 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 (desde Linux 2.2)
- 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 (desde Linux 2.2)
- Número máximo de paquetes que se pueden
encolar para direcciones proxy-ARP. Por defecto vale 64.
-
retrans_time (desde Linux 2.2)
- Número de unidades de tiempo a esperar antes de
retransmitir una petición. El valor por defecto es 1 segundo. Este
archivo está obsoleto, actualmentes se usa
retrans_time_ms.
-
retrans_time_ms (desde Linux 2.6.12)
- Número de unidades de milisegundos a esperar antes
de retransmitir una petición. El valor por defecto es 1
segundo.
-
ucast_solicit (desde Linux 2.2)
- 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 (desde Linux 2.2)
- Número máximo de paquetes que otras capas de
red pueden encolar para cada dirección sin resolver. Por defecto
vale 3.
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).
Las interfaces del tipo
neigh/* no existían en versiones de Linux
anteriores a la 2.2.
Algunos valores del cronómetro se especifican en unidades de tiempo
(jiffies), cuyo valor dependen de la arquitectura y de la versión del
núcleo. Consulte
time(7).
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
compartida entre IPv4 e IPv6.
capabilities(7),
ip(7),
arpd(8)
RFC 826 para una descripción de ARP. RFC 2461 para una
descripción del descubrimiento de equipos de IPv6 y los algoritmos base
utilizados. La implementación IPv4 ARP de Linux 2.2+ usa los algoritmos
IPv6 cuando éstos son aplicables.
La traducción al español de esta página del manual fue
creada por Juan Piernas <
[email protected]> y Marcos Fouces
<
[email protected]>
Esta traducción es documentación libre; lea la
GNU
General Public License Version 3 o posterior con respecto a las
condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página
del manual, envíe un correo electrónico a
[email protected]