ARP
Section : Manuel de l'administrateur Linux (
7)
Mise à jour de la version anglaise : 27 juillet 2007
Index
Menu principal
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 quelle socket
PF_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
sysctls
décrits plus bas.
Lorsqu'il n'y a pas de retour positif pour une correspondance existante
après un certain temps (voir les sysctls 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.
Ioctls
Trois ioctls sont disponibles pour les sockets
PF_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 octet 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é.
Sysctls
ARP supporte une interface
sysctl pour configurer les paramètres
sur une base globale ou interface par interface.
Les sysctls sont accessibles en lisant
ou en écrivant dans les fichiers
/proc/sys/net/ipv4/neigh/*/*
ou en utilisant l'interface
sysctl(2).
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
-
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
-
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
-
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.
- delay_first_probe_time
-
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
-
Fréquence avec laquelle on vérifie les entrées valides.
La valeur par défaut est 30 secondes.
- gc_stale_time
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
Le nombre maximal de paquets qui peuvent être conservés pour des adresses
proxy-ARP.
La valeur par défaut est 64.
- retrans_time
-
Le nombre de jiffies à attendre avant de retransmettre une requête.
La valeur par défaut est 1 seconde.
- ucast_solicit
-
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
-
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 requêtes sysctl
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.
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 4 janvier 2000
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 arp ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- DESCRIPTION
-
- Ioctls
-
- Sysctls
-
- VERSIONS
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008