NOM
arp - Module ARP du noyau Linux
Ce module du noyau implémente le protocole de résolution d’adresse ARP
tel qu’il est décrit dans le document RFC 826. Il sert à la conversion
entre les adresses matérielles de niveau 2 et les adresses du protocole
IPv4 sur les réseaux connectés en direct. L’utilisateur n’a normalement
pas d’interactions avec ce module sauf pour le configurer. En fait, ce
module fournit des services aux autres protocoles du noyau.
Un processus utilisateur peut recevoir les paquets ARP en utilisant les
sockets de type packet(7). Il y a aussi un mécanisme pour gérer le
cache ARP dans l’espace utilisateur avec des sockets netlink(7). La
table ARP peut être contrôlée par le biais d’un ioctl(2) sur n’importe
quelle socket AF_INET.
Le module ARP maintient un cache des correspondances entre les adresses
matérielles et les adresses logiques. Le cache a une taille limitée,
ainsi les entrées anciennes et utilisées moins fréquemment sont
récupérées. Les entrées qui sont marquées comme permanentes ne sont
jamais effacées. Le cache peut être manipulé directement par
l’intermédiaire des ioctls et son comportement peut être ajusté à
l’aide des interfaces /proc décrites plus bas.
Lorsqu’il n’y a pas de retour positif pour une correspondance existante
après un certain temps (voir les interfaces /proc ci-dessous), l’entrée
est considérée comme gelée. Un retour positif peut être obtenu d’un
niveau supérieur, par exemple un ACK TCP réussi. D’autres protocoles
peuvent signaler des avancées en utilisant l’attribut MSG_CONFIRM de
sendmsg(2). Pour envoyer à nouveau des données à cette cible, l’ARP
essaye d’abord d’interroger un démon arp local au maximum app_solicit
fois, afin d’obtenir une adresse MAC à jour. Si ceci échoue, et si une
ancienne adresse MAC est connue, une tentative unicast est envoyée
ucast_solicit fois. Si on échoue encore, il enverra une requête ARP en
broadcast sur le réseau. Les requêtes ne sont envoyées que s’il y a des
données en attente d’émission.
Linux ajoutera automatiquement une entrée arp proxy non permanente
lorsqu’il reçoit une requête pour une adresse à laquelle il envoie des
données, si le proxy arp est validé sur l’interface réceptrice. Aucune
entrée n’est ajoutée s’il y a une route de rejet pour la cible.
Ioctls
Trois ioctls sont disponibles pour les sockets AF_INET. Elles prennent
un pointeur sur une struct arpreq comme paramètre.
struct arpreq {
struct sockaddr arp_pa; /* adresse protocole */
struct sockaddr arp_ha; /* adresse matérielle */
int arp_flags; /* attributs */
struct sockaddr arp_netmask; /* masque réseau du protocole */
char arp_dev[16];
};
SIOCSARP, SIOCDARP et SIOCGARP ajoute, supprime, et consulte
respectivement une correspondance ARP. L’ajout et la suppression de
correspondance ARP sont des opérations privilégiées ne pouvant être
réalisées que par un processus avec la capacité CAP_NET_ADMIN ou un UID
effectif nul.
arp_pa doit être une socket AF_INET et arp_ha doit être du même type
que le périphérique indiqué dans arp_dev. arp_dev est une chaîne
terminée par un caractère nul, contenant le nom d’un périphérique.
+--------------------------------------------+
| arp_flags |
+----------------+---------------------------+
|attribut | signification |
+----------------+---------------------------+
|ATF_COM | Recherche complète |
+----------------+---------------------------+
|ATF_PERM | Entrée permanente |
+----------------+---------------------------+
|ATF_PUBL | Entrée publique |
+----------------+---------------------------+
|ATF_USETRAILERS | Demande trailer |
+----------------+---------------------------+
|ATF_NETMASK | Utiliser le masque réseau |
+----------------+---------------------------+
|ATF_DONTPUB | Ne pas répondre |
+----------------+---------------------------+
Si l’attribut ATF_NETMASK est activé, alors le membre arp_netmask doit
être valide. Linux 2.2 ne supporte pas les entrées ARP proxy réseau.
Ainsi, il doit être configuré avec 0xFFFFFFFF ou 0 pour supprimer une
entrée arp proxy existante. ATF_USETRAILERS est obsolète et ne doit pas
être utilisé.
Interfaces /proc
ARP supporte une série d’interface /proc pour configurer les paramètres
sur une base globale ou interface par interface. Les interfaces sont
accessibles en lisant ou en écrivant dans les fichiers
/proc/sys/net/ipv4/neigh/*/*. Chaque interface dans le système a son
propre répertoire dans /proc/sys/net/ipv4/neigh/. La configuration dans
le répertoire « default » sert pour tous les nouveaux périphériques.
Sauf mention contraire, les durées sont en secondes.
anycast_delay (depuis Linux 2.2)
Le nombre maximum de jiffies à attendre avant de répondre à un
message de sollicitation IPv6 du voisinage. Le support Anycast
n’est pas encore implémenté. Par défaut, le délai est 1 seconde.
app_solicit (depuis Linux 2.2)
Le nombre maximum d’essai d’envoi au démon ARP de l’espace
utilisateur par netlink avant de basculer en tentatives
multicast (voir mcast_solicit). La valeur par défaut est 0.
base_reachable_time (depuis Linux 2.2)
Une fois qu’un voisin a été trouvé, l’entrée est considérée
comme valide pendant, au moins, une durée aléatoire entre
base_reachable_time/2 et 3*base_reachable_time/2. La validité
d’une entrée sera étendue si on reçoit un retour positif des
protocoles de plus haut niveau. La valeur par défaut est 30
secondes. Ce fichier est maintenant obsolète et remplacé par
base_reachable_time_ms.
base_reachable_time_ms (depuis Linux 2.6.12)
Comme pour base_reachable_time, mais le temps est mesuré en
millisecondes. La valeur par défaut est 30000 millisecondes.
delay_first_probe_time (depuis Linux 2.2)
Délai avant la première tentative multicast après avoir décidé
qu’un voisin est gelé. La valeur par défaut est 5 secondes.
gc_interval (depuis Linux 2.2)
Fréquence avec laquelle on vérifie les entrées valides. La
valeur par défaut est 30 secondes.
gc_stale_time (depuis Linux 2.2)
Fréquence avec laquelle on vérifie une entrée de voisinage
gelée. Lorsqu’une correspondance est considérée comme gelée,
elle sera à nouveau redéterminée avant d’y envoyer des données.
La valeur par défaut est 60 secondes.
gc_thresh1 (depuis Linux 2.2)
Le nombre minimal d’entrées à conserver dans le cache ARP. Le
récupérateur ne sera pas déclenché s’il y a moins d’entrées que
cette valeur. La valeur par défaut est 128.
gc_thresh2 (depuis Linux 2.2)
La limite maximale souple d’entrées à conserver dans le cache
ARP. Le récupérateur autorisera un dépassement de cette valeur
pendant 5 secondes avant de lancer une véritable récupération.
La valeur par défaut est 512 entrées.
gc_thresh3 (depuis Linux 2.2)
La limite maximale d’entrées à conserver dans le cache ARP. Le
récupérateur sera immédiatement déclenché si cette valeur est
dépassée. La valeur par défaut est 1024.
locktime (depuis Linux 2.2)
Le nombre minimum de jiffies pendant lesquels on conserve une
entrée ARP dans le cache. Ceci évite la dégradation du cache
s’il y a plusieurs correspondances possibles (généralement à
cause d’une mauvaise configuration du réseau). La valeur par
défaut est 1 seconde.
mcast_solicit (depuis Linux 2.2)
Le nombre maximal de tentatives de résolution d’une adresse par
le multicast et le broadcast avant de marquer l’entrée comme
inaccessible. La valeur par défaut est 3.
proxy_delay (depuis Linux 2.2)
Lorsqu’une requête arrive pour une adresse proxy-ARP, on attend
proxy_delay jiffies avant de répondre. Ceci permet d’éviter des
saturations du réseau dans certains cas. La valeur par défaut
est 0,8 secondes.
proxy_qlen (depuis Linux 2.2)
Le nombre maximal de paquets qui peuvent être conservés pour des
adresses proxy-ARP. La valeur par défaut est 64.
retrans_time (depuis Linux 2.2)
Le nombre de jiffies à attendre avant de retransmettre une
requête. La valeur par défaut est 1 seconde. Ce fichier est
maintenant obsolète et remplacé par retrans_time_ms.
retrans_time_ms (depuis Linux 2.6.12)
Le nombre de millisecondes à attendre avant de retransmettre une
requête. La valeur par défaut est 1000 millisecondes.
ucast_solicit (depuis Linux 2.2)
Le nombre maximal de tentatives d’envoi unicast avant
d’interroger le démon ARP (voir app_solicit). La valeur par
défaut est 3.
unres_qlen (depuis Linux 2.2)
Le nombre maximal de paquets conservés pour chaque adresse non
résolue par les autres couches réseau. La valeur par défaut est
3.
VERSIONS
La structure arpreq a changé dans Linux 2.0 pour inclure le membre
arp_dev et les numéros d’ioctl ont changé en même temps. Le support
pour les anciens ioctl a été abandonné dans Linux 2.2.
Le support pour les entrées proxy ARP concernant des réseaux (netmask
différent de 0xFFFFFFF) a été supprimé de Linux 2.2. Il est remplacé
par une configuration proxy ARP automatique dans le noyau pour tous les
hôtes accessibles sur les autres interfaces (lorsque l’on fait du
forwarding et que le proxy ARP est activé sur l’interface).
Les interfaces neigh/* n’existaient pas avant Linux 2.2.
BOGUES
Certaines temporisations sont exprimées en jiffies, qui dépendent de
l’architecture et de la version du noyau ; voir time(7).
Il n’y a pas de moyen d’envoyer une réponse positive de l’espace
utilisateur. Ceci signifie que les protocoles orientés connexion
implémentés dans l’espace utilisateur engendreront un trafic ARP
excessif, car ndisc revérifiera régulièrement les adresses MAC. Le même
problème se pose pour certains protocoles du noyau (par exemple NFS sur
UDP).
Cette page de manuel mélange les spécificités IPv4 et les
fonctionnalités communes à IPv4 et IPv6.
VOIR AUSSI
capabilities(7), ip(7)
RFC 826 pour une description de l’ARP.
RFC 2461 pour une description de l’exploration du voisinage IPv6 et des
algorithmes de base employés.
L’ARP IPv4 de Linux 2.2 et ultérieurs emploie l’algorithme IPv6 lorsque
c’est possible.
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».