Optimisation du cache ARP
Le protocole ARP (Address Resolution Protocol) permet de mapper des adresses IPv4 32 bits vers une adresse d'adaptateur hôte 48 bits requise par le protocole de liaison de données.
Le protocole ARP est géré de façon transparente par le système. Cependant, le système gère un cache ARP, qui est une table contenant les adresses IP 32 bits associées et son adresse hôte 48 bits. Il peut être nécessaire de modifier la taille du cache ARP dans les environnements où de nombreuses machines (clients) sont connectées. Pour ce faire, utilisez les commandes no et netstat.
La commande no configure les paramètres d'optimisation réseau et ses paramètres réglables liés à ARP sont les suivants :
- arpqsize = 12
- arpt_killc = 20
- arptab_bsiz = 7
- arptab_nb = 149
La taille de table ARP est composée d'un nombre de compartiments, défini par le paramètre arptab_nb. Chaque compartiment contient le nombre d'entrées définies dans le paramètre arptab_bsiz. Les valeurs par défaut sont de 149 compartiments, chacun comportant 7 entrées, de sorte que la table peut contenir 1043 adresses hôte (149 x 7). Ce paramètre par défaut fonctionne pour les systèmes qui communiquent simultanément avec au maximum 1043 autres machines sur le réseau IP. Si un serveur se connecte simultanément à plus de 1043 machines sur le réseau, la table ARP sera trop petite, ce qui provoque l'emballement de la table ARP et entraîne des performances médiocres. Le système d'exploitation doit alors purger une entrée dans le cache et la remplacer par une nouvelle adresse. Pour cela, les paquets TCP ou UDP doivent être mis en file d'attente alors que le protocole ARP échange ces informations. Le paramètre arpqsize détermine le nombre de ces paquets en attente qui peuvent être placés en file d'attente par la couche ARP jusqu'à ce qu'une réponse ARP soit reçue d'une demande ARP. Si la file d'attente ARP est surchargée, les paquets TCP ou UDP sortants sont supprimés.
L'emballement de cache ARP peut avoir un impact négatif sur les performances pour les raisons suivantes :
- Le paquet sortant en cours doit attendre la recherche du protocole ARP sur le réseau.
- Une autre entrée ARP doit être supprimée du cache ARP. Si toutes les adresses sont nécessaires, une autre adresse est requise lorsque l'adresse hôte supprimée contient des paquets qui lui sont envoyés.
- La file d'attente de sortie ARP peut être surchargée, ce qui peut donner lieu à des paquets supprimés.
Les paramètres arpqsize, arptab_bsiz et arptab_nb sont tous des paramètres de réamorçage, ce qui signifie que le système doit être réamorcé si leurs valeurs changent car elles modifient les tables générées lors de l'amorçage ou lors du chargement TCP/IP.
Le paramètre arpt_killc représente le délai, en minutes, avant la suppression d'une entrée ARP. La valeur par défaut du paramètre arpt_killc est de 20 minutes. Les entrées ARP sont supprimées de la table à la fréquence, en minutes, définie dans le paramètre arpt_killc pour couvrir le cas où un système hôte peut modifier son adresse 48 bits, ce qui peut se produire lorsque son adaptateur réseau est remplacé. Cela garantit la suppression de toutes les entrées périmées du cache, dans la mesure où elles empêchent la communication avec un tel hôte tant que son ancienne adresse n'est pas supprimée. L'augmentation de ce délai permet de réduire les recherches ARP par le système, mais peut entraîner une plus longue durée de conservation des adresses d'hôte périmées. Le paramètre arpt_killc est un paramètre dynamique ; il peut donc être modifié sans que le système soit redémarré.
# netstat -p arp
arp:
6 packets sent
0 packets purged
? (10.3.6.1) at 0:6:29:dc:28:71 [ethernet] stored
bucket: 0 contains: 0 entries
bucket: 1 contains: 0 entries
bucket: 2 contains: 0 entries
bucket: 3 contains: 0 entries
bucket: 4 contains: 0 entries
bucket: 5 contains: 0 entries
bucket: 6 contains: 0 entries
bucket: 7 contains: 0 entries
bucket: 8 contains: 0 entries
bucket: 9 contains: 0 entries
bucket: 10 contains: 0 entries
bucket: 11 contains: 0 entries
bucket: 12 contains: 0 entries
bucket: 13 contains: 0 entries
bucket: 14 contains: 1 entries
bucket: 15 contains: 0 entries
...lines omitted...
There are 1 entries in the arp table.