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 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.
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é.
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.
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.
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.
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.
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Pierre Giraud <
[email protected]>
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 à
[email protected]