Vxlan contre Spanning-Tree

Au fil des années, j’ai pu assister à un certain nombre de querelles entre les partisans d’une technologie X et ceux d’une technologie Y. Pour ma part, cela a commencé avec les match Atari-Amiga où les protagonistes exprimaient tous leur mépris les uns envers les autres. Si ces conflits en général étaient plutôt bon enfant, ils étaient mûq plus par passion que par raison. Même si le temps a généralement raison de n’importe quelle technologie, en définitive, il n’y avait réellement pas de vainqueur. Par la suite, d’autres querelles ont éclaté, que ce soit entre Unix et Novel, OS2 et Windows, Linux contre Windows, etc. La liste est assez longue.

Les technologies réseau ne sont pas exemptes de ce type de querelle, et récemment, j’ai pu constater la même chose entre ce bon vieux spanning-tree, incompréhensible pour 95% des ingénieurs réseau et son gros challenger, le mystérieux Vxlan, véritable institution dans les Data Centers mais pas seulement.

L’idée de cette réflexion n’est pas de prendre parti mais surtout d’y voir plus clair et d’éviter de tomber dans des jugement tout faits, du style « tout le monde va vers Vxlan » ou pire « spanning-tree est mort ». Les deux me semble incongrues et plus que jamais, il n’y a jamais de direction entièrement noire ou entièrement blanche, surtout en matière de technologies matures.

Qu’est ce que Vxlan ?

Le Virtual eXtensible Local Area Network (Vxlan) permet de créer des réseaux de niveau 2 (ethernet) à grande échelle que l’on appellera des overlay. Le transport de ces overlays se fera par dessus une infrastructure IP que l’on appellera l’underlay.
Pour simplifier, il permet de transporter des informations de niveau 2 (ethernet) dans du niveau 3 (IP). Il permet également la création de 16 millions de segments contre 4096 pour le Vlan, ce qui offre des possibilités jusqu’à alors impossible. Pour ce faire, il remplace le Vlan ID par un identifiant de 24 bits, le VNI (Vxlan Network identifier).
Le VTEP (Vxlan tunnel endpoint) est la porte d’entrée et de sortie du Vxlan. Son rôle est d’encapsuler le niveau 2 puis de le transmettre à sa destination dans de l’UDP.

Le VXLAN fonctionne par encapsulation MAC-in-UDP. La trame Ethernet d’origine est conservée telle quelle, puis complétée par :

  • Un en-tête VXLAN sur 8 octets contenant le VNI sur 24 bits
  • L’en-tête UDP sur 8 octets qui utilise le port de destination destination 4789
  • L’en-tête IP externe sur 20 octets qui contient les adresses IP source et destination des VTEP.

L’ensemble ajoute un overhead de 50 octets (voire plus si un tag 802.1Q est conservé). Il est donc indispensable d’augmenter le MTU de l’underlay à 9216 octets pour éviter la fragmentation des paquets.

Afin de trouver le meilleur chemin, l’underlay utilise des protocoles de routage dynamique tels que OSPF, IS-IS et BGP. De plus, il fait de la répartition de charge au moyen du mécanisme ECMP (Equal-cost multi-path) afin de faire transiter les paquets par plusieurs chemins physiques en parallele dans le but de maximiser l’utilisation de la bande passante.

Qu’est ce que Spanning-Tree ?

Spanning-tree est un protocole qui empêche l’apparition de boucle dans un réseau ethernet. Il désactive automatiquement certains liens et conserve un seul chemin entre deux équipements. Pour résumer, spanning-tree connecte tous les équipements d’un réseau sans créer de boucle.
Lors de son activation, les switch vont se parler régulièrement entre eux au moyen de BPDU (Bridge Protocol Data Unit). Ces derniers contiennent l’adresse MAC cible ainsi que sa priorité. Les BPDU communiquent via l’adresse multicast 0180.C200.0000 et sont décomposés en deux types:

  • Le CPBDU qui est la configuration utilisée pour calculer le spanning-tree
  • Le TCN qui annonce les changements dans la topologie.

On restreint le passage des BPDU en utilisant le mécanisme BPDU guard, ce qui revient à interdire toute connexion d’un switch sur le port concerné, ce dernier se faisant désactiver à la moindre présence de BPDU.
On peut aussi choisir de filtrer ou de supprimer les BPDU grâce au BPDU filter: le port ne participe pas aux échanges BPDU mais n’est pas désactivé; ce qui peut empêcher spanning-tree de detecter des boucles.
Sur les ports spanning-tree, il existe 5 états:

  • Blocking/discarding: le trafic est bloqué
  • Listening: Calcul de la topologie
  • Learning: Apprend les adresses MAC
  • Forwarding: Transmet le trafic
  • Disabled: Le port est désactivé.

Pour gagner du temps, on peut forcer les ports dans le mode Forwarding, en utilisant la fonctionnalité Portfast chez Cisco ou admin-edge-port chez Aruba

Le root bridge est le switch principal d’une topologie spanning-tree. Tous les autres switch calculent le chemin le plus court pour y accéder. Ils utilisent le path cost pour déterminer le meilleur chemin vers le root bridge. Plus le path cost est faible et meilleur est le chemin. Le switch qui possède la priorité la plus faible devient le root bridge. En cas d’égalité, c’est celui qui possède la plus petite adresse MAC qui devient root bridge. Les ports STP ont trois rôles:

  • Root port: le port qui offre le meilleur chemin (Path cost le plus faible) vers le root bridge. Il n’en existe qu’un seul par switch, sauf sur le root bridge qui n’en possède aucun, et se trouve toujours en etat forwarding
  • Designated port: celui qui est autorisé à transmettre. Tous les ports du Root Bridge sont toujours des designated, tout comme les ports des switch d’accès
  • Alternate: port de secours vers le Root Bridge, et placé en état Blocking/Discarding.

Vxlan : Avantages et Inconvénients

L’une des grosses forces du Vxlan est la possibilité de pouvoir utiliser plus de 4096 Vlans. Théoriquement, Vxlan supporte jusqu’à 16 millions de réseaux. Il débride également la topologie physique. La mise en place d’un underlay a comme conséquence que l’infrastructure physique n’a plus besoin de connaitre les adresses ou les sous-réseaux de l’overlay. C’est ce qui est mis en place dans les architectures Spine-Leaf.
L’extension de la couche 2 à travers plusieurs sites permet de conserver le même sous-réseau IP entre des équipements séparés par des routeurs. Le Vxlan autorise la conservation des sessions et maintient le domaine de broadcast.
Grâce à son plan de contrôle moderne (EVPN), les requêtes ARP sont supprimées du routage, puisque tout se fait au plus près de la machine qui est complètement isolée que ce soit en niveau 2 (VNI) comme en niveau 3 (VRF). Dans un gros réseau de type Spine-Leaf, EVPN répond directement au niveau du Leaf local grâce à sa table de correspondance BGP.

Mais Vxlan a aussi ses inconvénients. D’abord, il est gourmand en ressources: l’encapsulation et la dés-encapsulation au niveau des VTEP nécessitent des ASIC récents. Ce qui peut également impliquer une surconsommation CPU sur les machines terminales, typiquement les hyperviseurs et toute la chaîne d’équipements (switch, routeur, firewall) qui doivent gérer la surcharge de transport, qu’elle soit MTU/MSS ou overhead (entête Vxlan qui rajoute 50 octets). Ensuite, son exploitation est complexe puisqu’il s’appuie sur trois couches distinctes: l’underlay (OSPF/BGP), l’overlay (Vxlan) et le plan de contrôle (EVPN). Par ailleurs, le fait d’avoir le même niveau 2 sur des endroits géographiquement différents peut être source de confusion et amener des problèmes de sécurité. Finalement, son implémentation nécessite un niveau d’expertise élevé et des licences logicielles onéreuses.

Spanning-tree : Avantages et Inconvénients

Le spanning-tree est très simple et ne présente aucune difficulté lors de sa mise en place. Sa configuration se borne généralement à quelques ajustements de priorité ainsi que quelques paramètres à mettre sur les ports d’accès ou d’uplink (portfast, bpduguard, etc.).
Il est toujours fourni en standard et ne demande aucune licence supplémentaire. Transparent pour les utilisateurs et tolérant aux pannes, il détecte les boucles et effectue des bascules sans l’intervention des personnes en charge du réseau.
Grâce à son mécanisme de détection des boucles, il s’assure qu’il n’existe qu’un seul chemin entre deux switch. Cela permet d’éviter les tempêtes de broadcast, la duplication des trames ainsi que l’instabilité des tables d’adresses MAC.

Mais sa grande simplicité n’efface pas des inconvénients notoires:
Tout d’abord, il n’offre pas une utilisation optimale de la bande passante: par le blocage choisi de certains ports, il peut condamner des liens qui ne sont jamais utilisés; il ne présente aucune possibilité de répartition de charge. Par ailleurs, sa dépendance au root bridge fait que les trajets ne sont pas toujours optimaux (effet trombone). De plus, un problème de spanning-tree peut entrainer un effet domino à l’ensemble du réseau. En cas de disfonctionnement, c’est l’ensemble de l’arbre qui doit être recalculé, avec le risque de propager des pannes en cascade.

Les problèmes de topologie

Lorsque l’on a une problématique réseau, il faut toujours penser les différents niveaux dans leur ensemble. Le niveau 1 a une incidence sur ce que l’on va faire au niveau 2, qui lui même a une incidence sur le niveau 3, etc.
La confrontation spanning-tree Vxlan va dans le même sens: le problème est généralement lié à la topologie du réseau, et ne pas en tenir compte n’est pas recommandable.
Considérer le très simple réseau ci-dessous, en arbre, que l’on voit très souvent sur les LAN utilisateurs des sociétés. Tout en haut, vous observez la présence d’un cœur actif/passif, deux équipements consolidés en un seul, typiquement un Cisco 9500 muni du dispositif Stackwise: deux unités distantes sont raccordées via fibre optique ou câble DAC et réunis, formant un seul switch virtuel en tolérance de panne; si l’une des unités vient à planter, alors l’autre prend le relais. On peut aussi monter en gamme en utilisant par exemple du Nexus avec un VPC: dans ce cas, on a affaire à deux unités distantes, mais autonomes contrairement au Stackwise. Dans le cas du VPC, nous fonctionnerons en actif/actif.
Le palier suivant correspond au switch de distribution; par exemple des Cisco 9300, mais autonomes les uns par rapport au autre. Le dernier palier est celui des switch d’accès sur lesquels sont branchés les équipements terminaux, PC, imprimantes, etc.
Ces switchs d’accès, par exemple des Cisco 9200, sont connectés en double attachement aux deux distributions autonomes, créant ainsi un mécanisme de tolérance de panne.


C’est sur ce genre de topologie que le spanning-tree prend toute sa signification. Pour se rendre sur le switch 1, il existe une boucle qu’il faut gérer. La flèche verte indique un premier chemin autorisé; la flèche rouge condamne le chemin en plaçant les ports en mode blocking: en conséquence toutes les paquets du vlan passeront par le chemin indiqué par la flèche verte, sauf si ce chemin venait à être détruit. Il y aurait alors un recalcul du spanning-tree et une nouvelle topologie L2 serait construite.

Voici une autre topologie, qui à premiere vue semble très proche de la précédente, mais dans la réalité est très différente.
Le coeur est identique, en Stackwise ou en VPC, mais la connexion vers les distributions se fait via un agrégat de niveau 2, typiquement un LACP. Les distributions ont été consolidées en une pile de switch, formant ainsi un seul équipement.
Et ce qui est vrai en niveau 1 s’avère identique en niveau 2: dans un agrégat LAG, spanning-tree ne voit qu’un seul lien. Les ports ont cessé d’exister individuellement, et le spanning-tree traite l’agrégat comme une seule interface individuelle.

En définitive, le risque de boucle est pratiquement inexistante dans ce genre de topologie. Le spanning-tree est essentiellement implémenté pour les problèmes sur les terminaisons, typiquement si l’on branche un nouveau switch derrière les accès ou pire, si quelqu’un qui branche un câble sur deux ports d’un même switch.

Voici un autre exemple de réseau que l’on peut parfois rencontrer dans des sociétés petites moyennes et même importantes. Cette topologie est typique d’un réseau qui a évolué au fil des évènements et des prestataires, sans reflexion globale. C’est une construction de type « lego » pensée sans l’aide d’un architecte réseau au fait des problématiques que peuvent engendrer les ajouts irréflechis de switch.

Ici, le risque de boucle est très important et le re-calcul du spanning-tree peut grandement ralentir la convergence, engendrant des lenteurs sur l’ensemble du réseau. Si la cohérence de la topologie L1 a été superbement ignorée, alors il est fort probable que la topologie L2 ait subi le même sort. La difficulté avec ce genre de réseau est que comme les couches inférieures, les L1 et L2, ne sont pas saines, alors toute évolution ou nouvelle extension sur les couches supérieures L3+ peut être discutable voir même carrément préjudiciable au bon fonctionnement du réseau.

Vxlan ou spanning-tree pour résoudre les problèmes de topologie ?

Au global, voici les possibilités qui nous sont offertes afin de résoudre les problèmes liés à une topologie défaillante:

  • Refaire une topologie L1 cohérente et casser le méchage du réseau, qui provoque des boucles. Mais ceci peut supposer de lourds travaux de génie civil.
  • Assainir la partie spanning-tree en s’appuyant sur des agrégats LACP ou VPC et en créant une véritable organisation avec les bonnes priorités, cost et root
  • Passer en mode routé pour cloisonner au mieux les différentes parties du réseau.

Les possibilités 2 et 3 mettent en avant le dilemme Vxlan contre spanning-tree.

En supposant que le niveau 1 a été reconstruit correctement et que les SPOF ont été éradiqués en mettant en place des agrégats alors le choix du spanning-tree peut s’imposer. Ici, nous considérons que ce réseau s’orchestre autour d’un simple niveau 2. Comme il n’existe aucune boucle physique sur le réseau et que chaque interconnexion est un unique port logique, aucun de ces derniers port ne sera bloqué par le spanning-tree. Toutes les connexions logiques seront exploitées à 100 % de leur capacité. La répartition du trafic sur les membres physiques de chaque LAG est gérée par un hash. Le petit point négatif est la présence permanente d’un bruit de fond dans le domaine de broadcast: requêtes ARP, diffusion, etc.

Passer en mode routé peut également être envisagé pour les raisons suivantes: d’abord, il n’est pas toujours possible de réorganiser le L1, parce que les travaux à faire sont trop importants ou compliqués. Dans ce cas, le L2 va certes protéger le réseau mais au détriment de l’utilisation de certains liens qui sont condamnés par le spanning-tree, ceux qui ne sont pas dans un agrégat. Ensuite, la taille du réseau peut être un véritable frein à son exploitation: on ne peut manifestement pas laisser un réseau de trop grande taille être organisé uniquement sur base d’un gigantesque L2. Si votre réseau dispose de plusieurs centaines de switch, le choix du spanning-tree est une hérésie: il faut obligatoirement segmenter et créer des environnements routables plus petits. A ce sujet, avoir un réseau terminal supérieur à un /23 est très discutable. Ce sont d’ailleurs des recommandations de Cisco.

Mais c’est par ce choix qu’il y a souvent une petite confusion qu’il faut lever: ce n’est pas l’implémentation du Vxlan qui va remplacer le spanning-tree mais celle de son underlay, et plus particulièrement ECMP, la méthode de routage qui permet d’acheminer des informations par plusieurs chemins. Pour clarifier, vous n’avez pas à choisir entre Vxlan et le spanning-tree, mais plutôt entre un réseau L2 à base d’agrégats LAG/VPC et un réseau L3 organisé par ECMP. C’est ici le véritable choix à faire, en fonction de la topologie et surtout de la taille de votre réseau. Le Vxlan est implémenté s »il y a besoin d’étendre le L2 au delà des routeurs, comme c’est souvent le cas en environnement Data Center/ Spine-Leaf où la notion de proximité ne signifie plus grand chose.

En guise de conclusion

L’opposition Vxlan/Spanning-tree est un faux dilemme architectural car les deux solutions ne jouent pas au même niveau.

Spanning-tree (Avec VPC/LAG) demeure la solution la plus pragmatique pour les petites et moyennes topologies L2. Grâce à un design propre et une agrégation de liens, les boucles physiques sont éliminées et l’exploitation du réseau reste très simple. Vxlan est une réponse aux problématiques liées aux Data Centers ainsi qu’aux grands campus. Mais il ne remplace pas le spanning-tree, il le supprime en basculant le cœur du réseau en routage L3 pur. Il offre la possibilité d’étendre le L2 uniquement là où c’est nécessaire.

Vouloir imposer du VXLAN sur un petit réseau n’est certainement pas une bonne solution, tout comme conserver un gigantesque domaine Spanning-Tree sur un grand Data Center relève du risque opérationnel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *