ARP
Section: Manuel de l'administrateur Linux (7) Updated: 25 juillet 2003 Index
NOM
DESCRIPTION
IOCTLS
SYSCTLS
BOGUES
VERSIONS
VOIR AUSSI
TRADUCTION
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, et si
l'arp proxy 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és 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é
SYSCTLS
ARP supporte une interface sysctl pour configurer les paramètres
sur une base globale ou interface par interface.
Les sysctls peuvent être accessibles en lisant ou en écrivant dans le fichier
/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é.
Par défaut 5 secondes.
- gc_interval
-
Fréquence avec laquelle on
vérifie les entrées valides. Par défaut
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.
Par défaut la durée est de 60 secondes.
- gc_thresh1
-
Le nombre minimal d'entrées à conserver dans le cache ARP. Le récupérateur
ne sera pas déclenché
si il y a moins d'entrées que cette valeur
(par défaut 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.
Par défaut 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
(par défaut 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 si il y a plusieurs
correspondances possibles (généralement à cause d'une mauvaise configuration
du réseau). Par défaut 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.
Par défaut 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 correspond à 0.8 secondes.
- proxy_qlen
-
Le nombre maximal de paquets qui peuvent être conservés pour des adresses
proxy-ARP. Par défaut 64.
- retrans_time
-
Le nombre de jiffies à attendre avant de retransmettre une requête. Par
défaut 1 seconde.
- ucast_solicit
-
Le nombre maximal de tentatives d'envoi unicast avant d'interroger le
démon ARP (voir
app_solicit).
Par défaut 3.
- unres_qlen
-
Le nombre maximal de paquets conservés pour chaque adresse non résolue
par les autres couches réseau.
Par défaut 3.
BOGUES
Certaines temporisations sont exprimées en jiffies qui dépendent de l'architecture.
Sur Alpha, un jiffy correspond à 1/1024 seconde, sur la plupart des autres
il correspond à 1/100 seconde.
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.
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.
VOIR AUSSI
ip(7)
RFC826 pour une description de l'ARP.
RFC2461 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 si possible.
TRADUCTION
Christophe Blaess, 2000-2003.
|