arp(7) Miscellaneous Information Manual arp(7)
NOM
arp - Module ARP du noyau Linux
DESCRIPTION
Ce module du noyau implemente le protocole de resolution d'adresse ARP
tel qu'il est decrit dans le document RFC 826. Il sert a la conversion
entre les adresses materielles de niveau 2 et les adresses du protocole
IPv4 sur les reseaux connectes 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 mecanisme pour gerer le
cache ARP dans l'espace utilisateur avec des sockets netlink(7). La
table ARP peut etre controlee par le biais d'un ioctl(2) sur n'importe
quel socket AF_INET.
Le module ARP maintient un cache des correspondances entre les adresses
materielles et les adresses logiques. Le cache a une taille limitee,
ainsi les entrees anciennes et utilisees moins frequemment sont
recuperees. Les entrees qui sont marquees comme permanentes ne sont
jamais effacees. Le cache peut etre manipule directement par
l'intermediaire des ioctls et son comportement peut etre ajuste a
l'aide des interfaces /proc decrites plus bas.
Lorsqu'il n'y a pas de retour positif pour une correspondance existante
apres un certain temps (voir les interfaces /proc ci-dessous), l'entree
est consideree comme gelee. Un retour positif peut etre obtenu d'un
niveau superieur, par exemple un ACK TCP reussi. D'autres protocoles
peuvent signaler des avancees en utilisant l'attribut MSG_CONFIRM de
sendmsg(2). Pour envoyer a nouveau des donnees a cette cible, l'ARP
essaye d'abord d'interroger un demon arp local au maximum app_solicit
fois, afin d'obtenir une adresse MAC a jour. Si cela echoue, et si une
ancienne adresse MAC est connue, une tentative unicast est envoyee
ucast_solicit fois. Si cela echoue encore, il enverra une requete ARP
en broadcast sur le reseau. Les requetes ne sont envoyees que s'il y a
des donnees en attente d'emission.
Linux ajoutera automatiquement une entree arp proxy non permanente
lorsqu'il recoit une requete pour une adresse a laquelle il envoie des
donnees, si le proxy arp est valide sur l'interface receptrice. Aucune
entree n'est ajoutee 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 parametre.
struct arpreq {
struct sockaddr arp_pa; /* adresse protocole */
struct sockaddr arp_ha; /* adresse materielle */
int arp_flags; /* attributs */
struct sockaddr arp_netmask; /* masque reseau du protocole */
char arp_dev[16];
};
SIOCSARP, SIOCDARP et SIOCGARP ajoutent, suppriment et consultent
respectivement une correspondance ARP. L'ajout et la suppression de
correspondance ARP sont des operations privilegiees ne pouvant etre
realisees que par un processus avec la capacite CAP_NET_ADMIN ou un UID
effectif nul.
arp_pa doit etre une adresse AF_INET et arp_ha doit etre du meme type
que le peripherique indique dans arp_dev. arp_dev est une chaine
terminee par un caractere nul, contenant le nom d'un peripherique.
+----------------------------------------------+
| arp_flags |
+----------------+-----------------------------+
|attribut | signification |
+----------------+-----------------------------+
|ATF_COM | Recherche complete |
+----------------+-----------------------------+
|ATF_PERM | Entree permanente |
+----------------+-----------------------------+
|ATF_PUBL | Entree publiee |
+----------------+-----------------------------+
|ATF_USETRAILERS | Demande de trailer |
+----------------+-----------------------------+
|ATF_NETMASK | Utiliser un masque reseau |
+----------------+-----------------------------+
|ATF_DONTPUB | Ne pas repondre |
+----------------+-----------------------------+
Si l'attribut ATF_NETMASK est active, alors le membre arp_netmask doit
etre valable. Linux 2.2 ne prend pas en charge les entrees ARP proxy
reseau. Ainsi, il doit etre configure avec 0xFFFFFFFF ou 0 pour
supprimer une entree arp proxy existante. ATF_USETRAILERS est obsolete
et ne doit pas etre utilise.
/proc interfaces
ARP prend en charge une serie d'interfaces /proc pour configurer les
parametres sur une base globale ou interface par interface. Les
interfaces sont accessibles en lisant ou en ecrivant dans les fichiers
/proc/sys/net/ipv4/neigh/*/*. Chaque interface dans le systeme a son
propre repertoire dans /proc/sys/net/ipv4/neigh/. La configuration dans
le repertoire << default >> sert pour tous les nouveaux peripheriques.
Sauf mention contraire, les durees sont en secondes.
anycast_delay (depuis Linux 2.2)
Le nombre maximal de jiffies a attendre avant de repondre a un
message de sollicitation IPv6 du voisinage. La prise en charge
anycast n'est pas encore implementee. Par defaut, le delai est
1 seconde.
app_solicit (depuis Linux 2.2)
Le nombre maximal d'essais d'envoi au demon ARP de l'espace
utilisateur par netlink avant de basculer en tentatives
multicast (consultez mcast_solicit). La valeur par defaut est 0.
base_reachable_time (depuis Linux 2.2)
Une fois qu'un voisin a ete trouve, l'entree est consideree
comme valable pendant, au moins, une duree aleatoire entre
base_reachable_time/2 et 3*base_reachable_time/2. La validite
d'une entree sera etendue si un retour positif est recu des
protocoles de plus haut niveau. La valeur par defaut est de
30 secondes. Ce fichier est maintenant obsolete et remplace par
base_reachable_time_ms.
base_reachable_time_ms (depuis Linux 2.6.12)
Comme pour base_reachable_time, mais le temps est mesure en
millisecondes. La valeur par defaut est de 30 000 millisecondes.
delay_first_probe_time (depuis Linux 2.2)
Delai avant la premiere tentative multicast apres avoir decide
qu'un voisin est gele. La valeur par defaut est de 5 secondes.
gc_interval (depuis Linux 2.2)
Frequence d'execution du ramasse-miettes des entrees de
voisinage. La valeur par defaut est de 30 secondes.
gc_stale_time (depuis Linux 2.2)
Frequence de verification d'une entree de voisinage gelee.
Lorsqu'une correspondance est consideree comme gelee, elle sera
a nouveau redeterminee avant d'y envoyer des donnees. La valeur
par defaut est de 60 secondes.
gc_thresh1 (depuis Linux 2.2)
Le nombre minimal d'entrees a conserver dans le cache ARP. Le
recuperateur ne sera pas declenche s'il y a moins d'entrees que
cette valeur. La valeur par defaut est 128.
gc_thresh2 (depuis Linux 2.2)
La limite maximale souple d'entrees a conserver dans le cache
ARP. Le recuperateur autorisera un depassement de cette valeur
pendant 5 secondes avant de lancer une veritable recuperation.
La valeur par defaut est de 512 entrees.
gc_thresh3 (depuis Linux 2.2)
La limite maximale d'entrees a conserver dans le cache ARP. Le
recuperateur sera immediatement declenche si cette valeur est
depassee. La valeur par defaut est 1024.
locktime (depuis Linux 2.2)
Le nombre minimal de jiffies pendant lesquels une entree ARP est
conservee dans le cache. Cela evite la degradation du cache s'il
y a plusieurs correspondances possibles (generalement a cause
d'une mauvaise configuration du reseau). La valeur par defaut
est de 1 seconde.
mcast_solicit (depuis Linux 2.2)
Le nombre maximal de tentatives de resolution d'une adresse par
le multicast et le broadcast avant de marquer l'entree comme
inaccessible. La valeur par defaut est 3.
proxy_delay (depuis Linux 2.2)
Lorsqu'une requete arrive pour une adresse proxy-ARP,
proxy_delay jiffies sont attendues avant de repondre. Cela
permet d'eviter des saturations du reseau dans certains cas. La
valeur par defaut est de 0,8 secondes.
proxy_qlen (depuis Linux 2.2)
Le nombre maximal de paquets qui peuvent etre gardes en file
d'attente pour des adresses proxy-ARP. La valeur par defaut
est 64.
retrans_time (depuis Linux 2.2)
Le nombre de jiffies a attendre avant de retransmettre une
requete. La valeur par defaut est de 1 seconde. Ce fichier est
maintenant obsolete et remplace par retrans_time_ms.
retrans_time_ms (depuis Linux 2.6.12)
Le nombre de millisecondes a attendre avant de retransmettre une
requete. La valeur par defaut est de 1000 millisecondes.
ucast_solicit (depuis Linux 2.2)
Le nombre maximal de tentatives d'envoi unicast avant
d'interroger le demon ARP (consultez app_solicit). La valeur par
defaut est 3.
unres_qlen (depuis Linux 2.2)
Le nombre maximal de paquets qui peuvent etre gardes en file
d'attente pour chaque adresse non resolue par les autres couches
reseau. La valeur par defaut est 3.
VERSIONS
La structure arpreq a change dans Linux 2.0 pour inclure le membre
arp_dev et les numeros d'ioctl ont change en meme temps. La prise en
charge pour les anciens ioctl a ete abandonnee dans Linux 2.2.
La prise en charge pour les entrees proxy ARP concernant des reseaux
(netmask different de 0xFFFFFFF) a ete supprimee de Linux 2.2. Elle est
remplacee par une configuration proxy ARP automatique dans le noyau
pour tous les hotes accessibles sur les autres interfaces (en faisant
du forwarding avec le proxy ARP active sur l'interface).
Les interfaces neigh/* n'existaient pas avant Linux 2.2.
BOGUES
Certaines temporisations sont exprimees en jiffies, qui dependent de
l'architecture et de la version du noyau ; consultez time(7).
Il n'y a pas de moyen d'envoyer une reponse positive de l'espace
utilisateur. Cela signifie que les protocoles orientes connexion
implementes dans l'espace utilisateur engendreront un trafic ARP
excessif, car ndisc reverifiera regulierement les adresses MAC. Le meme
probleme se pose pour certains protocoles du noyau (par exemple NFS sur
UDP).
Cette page de manuel melange les fonctionnalites specifiques a IPv4 et
les fonctionnalites communes a IPv4 et IPv6.
VOIR AUSSI
capabilities(7), ip(7), arpd(8)
RFC 826 pour une description d'ARP. RFC 2461 pour une description de
l'exploration du voisinage IPv6 et des algorithmes de base employes.
L'ARP IPv4 de Linux 2.2 et version ulterieures utilise l'algorithme
IPv6 lorsque c'est possible.
TRADUCTION
La traduction francaise de cette page de manuel a ete creee par
Christophe Blaess , Stephan Rafin
, Thierry Vignaud ,
Francois Micaux, Alain Portal , Jean-Philippe
Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas
Huriaux , Nicolas Francois
, Florentin Duneau
, Simon Paillard , Denis Barbier , David Prevot
et Jean-Pierre Giraud
Cette traduction est une documentation libre ; veuillez vous reporter a
la GNU General Public License version 3
concernant les conditions
de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE.
Si vous decouvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message a .
Pages du manuel de Linux 6.06 31 octobre 2023 arp(7)