arp
Table des matières
Retour à l'index
NOM
arp - Module ARP du noyau Linux
DESCRIPTION
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 quel 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 cela échoue, et si une
ancienne adresse MAC est connue, une tentative unicast est envoyée
ucast_solicit fois. Si cela é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 ajoutent, suppriment et consultent
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 adresse 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 publiée
|
| ATF_USETRAILERS | Demande de trailer
|
| ATF_NETMASK | Utiliser un masque réseau
|
| ATF_DONTPUB | Ne pas répondre
|
Si l'attribut ATF_NETMASK est activé, alors le membre arp_netmask doit
être valable. Linux 2.2 ne prend pas en charge 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é.
/proc interfaces
ARP prend en charge une série d'interfaces /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 maximal de jiffies à attendre avant de répondre à un message de
sollicitation IPv6 du voisinage. La prise en charge anycast n'est pas encore
implémentée. Par défaut, le délai est 1 seconde.
- app_solicit (depuis Linux 2.2)
-
Le nombre maximal d'essais d'envoi au démon ARP de l'espace utilisateur par
netlink avant de basculer en tentatives multicast (consultez
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 valable
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 un
retour positif est reçu des protocoles de plus haut niveau. La valeur par
défaut est de 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 de 30 000 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 de 5 secondes.
- gc_interval (depuis Linux 2.2)
-
Fréquence d'exécution du ramasse-miettes des entrées de voisinage. La valeur
par défaut est de 30 secondes.
- gc_stale_time (depuis Linux 2.2)
-
Fréquence de vérification d’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 de 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 de 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 minimal de jiffies pendant lesquels une entrée ARP est conservée
dans le cache. Cela é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 de 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, proxy_delay jiffies
sont attendues avant de répondre. Cela permet d'éviter des saturations du
réseau dans certains cas. La valeur par défaut est de 0,8 secondes.
- proxy_qlen (depuis Linux 2.2)
-
Le nombre maximal de paquets qui peuvent être gardés en file d’attente 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 de 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 de 1000 millisecondes.
- ucast_solicit (depuis Linux 2.2)
-
Le nombre maximal de tentatives d'envoi unicast avant d'interroger le démon
ARP (consultez app_solicit). La valeur par défaut est 3.
- unres_qlen (depuis Linux 2.2)
-
Le nombre maximal de paquets qui peuvent être gardés en file d’attente 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. La prise en
charge pour les anciens ioctl a été abandonnée dans Linux 2.2.
La prise en charge pour les entrées proxy ARP concernant des réseaux
(netmask différent de 0xFFFFFFF) a été supprimée de Linux 2.2. Elle est
remplacée par une configuration proxy ARP automatique dans le noyau pour
tous les hôtes accessibles sur les autres interfaces (en faisant du
forwarding avec le proxy ARP 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 ; consultez time(7).
Il n'y a pas de moyen d'envoyer une réponse positive de l'espace
utilisateur. Cela 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 fonctionnalités spécifiques à IPv4 et les
fonctionnalités communes à 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 employés. L'ARP
IPv4 de Linux 2.2 et version ultérieures utilise l'algorithme IPv6 lorsque
c'est possible.
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- DESCRIPTION
-
- Ioctls
-
- /proc interfaces
-
- VERSIONS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:36 GMT, September 19, 2025