http://www.bortzmeyer.org/7586.html
----------------------------
Auteur(s) du RFC: Youval Nachum (Ixia), Linda Dunbar (Huawei), Ilan Yerushalmi,
Tal Mizrahi (Marvell)
----------------------------
Le problème de passage à l'échelle de protocoles de recherche d'adresse
MAC des voisins, les protocoles comme ARP, sont connus depuis un
certain temps, et documentés dans le RFC 6820. Résumé en deux mots,
dans un grand centre de données non partitionné en sous-réseaux IP, le
trafic ARP peut représenter une partie significative du travail à
effectuer par les machines. Ce nouveau RFC expose une des solutions
pour faire face à ce problème : SARP ("Scaling the Address Resolution
Protocol") fait appel à des relais ARP qui peuvent générer localement
la plupart des réponses.
Si le centre de données est rigoureusement découpé en sous-résaux IP
(par exemple un sous-réseau, et donc un routeur par baie), il n'y a pas
de problème ARP : le trafic ARP reste local. Mais si on veut profiter
de la souplesse que permet la virtualisation, par exemple en déplaçat
des machines virtuelles d'un bout à l'autre du centre de données en
gardant leur adresse IP, on doit alors propager les requêtes ARP sur
une bien plus grande distance et les problèmes de passage à l'échelle
apparaissent (RFC 6820). La mémoire consommée par la FDB ("Filtering
Data Base", la table des adresses MAC connues) augmente, ainsi que le
temps de traitement de tous ces paquets ARP diffusés.
Les premières versions des brouillons ayant mené à ce RFC ne
mentionnaient qu'ARP (RFC 826), protocole de résolution IP->MAC pour
IPv4. Mais la version finale considère que le protocole marche aussi
bien pour ND (RFC 4861), son équivalent pour IPv6. Seul le nom de la
solution garde trace de cette préférence pour ARP. Dans le reste de cet
article, je parlerais de ARP/ND.
L'idée de base de SARP est que chaque domaine d'accès (un groupe de
machines proches, par exemple dans la même baie ou dans la même rangée)
ait un relais ("SARP proxy") qui connaisse les adresses MAC de tout le
domaine, et réponde aux requêtes ARP/ND pour les autres domaines avec
sa propre adresse MAC. Ainsi, la taille de la table ARP des machines du
domaine reste proportionnelle à la taille du domaine d'accès, pas au
nombre total de machines (comme ce serait le cas avec un réseau
« plat » classique, entièrement en couche 2, et sans SARP).
Le relais SARP peut être l'hyperviseur d'un groupe de machines
virtuelles (commutateur virtuel) ou bien il peut être dans un
commutateur physique, ToR ("Top of Rack") ou bien EoR ("End of Row").
En gros, le relais SARP est là où un domaine d'accès se connecte au
cœur du réseau interne du centre de données. Ce doit être une grosse
machine car elle va devoir stocker les adresses MAC de toutes les
machines qui communiquent avec une machine d'un autre domaine d'accès.
Et il peut aussi faire l'objet d'attaques délibérées (cf. section 4).
La section 3 de notre RFC décrit plus en détail le fonctionnement de
SARP. Si la machine source et la destination sont dans le même domaine
d'accès (même baie, ou même rangée, selon l'endroit où se trouve le
commutateur), ARP/ND fonctionne comme d'habitude et SARP n'intervient
pas. Si la machine de destination est dans un autre sous-réseau IP, on
passe alors par le routeur, selon le mécanisme normal de la couche 3.
Mais si la destination est dans le même sous-réseau IP, mais dans un
domaine d'accès différent ? Le relais SARP voit alors passer la requête
ARP/ND. Si la réponse est dans son cache (qui associe des adresses IP à
des adresses MAC), il répond avec sa propre adresse MAC (ainsi, les
machines du domaine d'accès local ne sont pas noyées par des milliers
d'adresses MAC de tout le centre de données). Sinon, il transmet à tous
les domaines d'accès qui peuvent avoir cette adresse IP puis relaie la
réponse. Seuls les relais SARP ont un cache qui contient des adresses
MAC de tout le centre de données. Les machines ordinaires n'ont que les
adresses MAC de leur propre domaine d'accès.
Et pour transmettre un paquet de données ? La machine source, ayant
reçu l'adresse MAC du relais SARP en réponse à sa requête ARP/ND va
donc mettre sur le câble un paquet ayant pour adresse Ethernet de
destination le relais SARP. Le relais SARP, utilisant son propre cache
(qui, lui, est complet), remplace l'adresse MAC de destination par la
« vraie », et l'adresse MAC source par la sienne (pour qu'une réponse
puisse revenir), et remet le paquet sur le câble.
Un tel mécanisme fait que des opérations comme la migration d'une VM
d'un bout à l'autre du centre de données sont complètement invisibles.
Les mécanismes normaux de résolution feront tout le travail. Cela
suppose toutefois que la machine qui se déplace (ou plutôt son
hyperviseur qui, contrairement à la VM, est conscient du déplacement)
émette tout de suite un paquet ARP gratuit ou un paquet ND non
sollicité, pour que les caches soient mis à jour (autrement, la machine
migrée restera injoignable le temps que l'entrée dans le cache expire).
Une conséquence de cette technique est que le relais SARP est
absolument vital : s'il est en panne, plus rien ne marche, à part les
communications locales à un domaine d'accès. Il vaut donc mieux en
avoir plusieurs, pour chaque domaine d'accès.
Ce RFC n'a que le statut « Expérimental » car l'IESG n'est pas
convaincue que ce soit la seule méthode. Le RFC 7342 liste un certain
nombre d'autres techniques (pas forcément directement comparables à
SARP). À noter que les approches de type "overlay" (RFC 7364) résolvent
une partie du problème mais pas la question de la taille de la table
des adresses MAC. Mais il y a les RFC 4664, RFC 925, RFC 4389 (ces deux
derniers sont, à mon avis, proches de SARP), RFC 4541 et RFC 6575...
---------------------------
Liste de diffusion du FRnOG
http://www.frnog.org/