TRILL : Un remplaçant pour le Spanning Tree en DataCenter

avril 14, 2014  |   Actualités,Blog   |     |   0 commentaire

Spanning Tree

Dans un réseau Ethernet, il faut faire face à deux problèmes qui s’opposent :

  • Eviter les boucles, qui provoquent des tempêtes de broadcast
  • Offrir une résiliance avec des chemins redondants (et donc des boucles)

Pour résoudre ce dilemme, on utilise un protocole bien connu : le Spanning Tree Protocol (STP).
Il est en charge de bloquer les chemins redondants pour éviter les boucles dans la topologie, et de réactiver dynamiquement certains liens en cas de défaillance.

Ce protocole rempli bien son rôle depuis des années, mais avec l’évolution des réseaux en Datacenter (fortes densités, augmentation des débit, niveau 2 étendu sur plusieurs DC …), un certains nombres d’inconvénients sont apparus :

  • Sous-utilisation de la bande passante à cause des liens inactifs
  • Chemin entre deux hôtes non optimal
  • Convergence lente et source de coupures
  • Problème de mise à l’échelle (à cause notamment de la taille des tables MAC)

Au fil du temps plusieurs évolutions ont été apportées au STP pour tenter de combler ces lacunes : le RSTP qui améliore la convergence, le PVST ou MST qui permettent de répartir les VLAN sur tous les liens, ou encore les technologies de Multi Chassis EtherChannel (MCEC) comme le vPC Cisco qui permettent de mieux utiliser les liens redondants

TRILL (TRansparent Interconnection of Lot of Link)

Plutôt que de continuer d’essayer d’améliorer STP, Radia Perlman (l’ingénieur à l’origine de STP) à décidé de proposer une solution nouvelle pour le remplacer complètement. Cela a donné naissance à TRILL, défini dans plusieurs standards ratifiés par l’IETF, notamment le RFC 6325.

Pour éviter les défauts de STP, l’idée de TRILL est d’utiliser les techniques habituelles des protocoles de routage (Shortest path, Equal Cost Multipath, TTL …) tout en gardant la facilité d’utilisation des réseaux de niveau 2.

Fonctionnement

Les switches mettant en oeuvre TRILL sont apppelés RBriges ( pour Routing Bridges ), et chaque RBridge fait tourner IS-IS (un protocole de routage à état de lien) pour découvrir la topologie réseau et calculer les routes vers tous les autres RBridges. Chaque RBridge possède un identifiant ( assigné automatiquement ou non) appelé « nickname » dans le standard IETF et les éventuels conflits de nickname sont réglés via les annonces IS-IS.

Grâce à l’utilisation de IS-IS, chaque RBrige construit une table de routage qui fait correspondre une interface à chaque RBrige joignable

Le partage de charge sur les chemin de même coût (ECMP), comme ici pour joindre RB6, peut aller jusqu’à 16 liens distincts.

Ce réseau TRILL doit communiquer avec des équipements qui fonctionnent en Ethernet « classique » pour les hôtes finaux ou même des switches. Pour cela certains RBriges font donc le lien entre les deux mondes. Lorsqu’une trame ethernet classique arrive sur un RBridge, il regarde sa table d’adresse MAC, qui contient non seulement des couples @MAC/Interface, mais également des couples @MAC/ID_RBridge pour les destination qui sont connues sur le réseau TRILL.

Dans ce dernier cas, le RBridge encapsule la trame Ethernet classique avec un entête TRILL. Cet entête est composé de deux parties, un nouvel entête Ethernet classique et un entête spécifique TRILL. Un nouveau FCS est calculé pour cette trame et remplace celui de la trame originale

Trame TRILL

L’entête Ethernet est composé de l’adresses MAC source du RBridge qui envoie la trame, l’adresse destination du RBridge sélectionné comme le prochain saut et le champs « ethertype » contenant la valeur 0x22F3 qui indique que le paquet à l’interieur est un paquet TRILL. Cet entête est donc modifié à chaque saut.

L’entête TRILL, contient les nicknames des RBridge d’entrée et de sortie du réseau TRILL, ainsi qu’un certain nombre de champs supplémentaires :

  • Version (2 bits) : la version actuelle est 0
  • Reserved (2 bits) :Réservé pour un usage futur
  • Multi-destination (1 bit) : 0 pour les paquets unicast et 1 pour les paquets multicast
  • Options Length (5 bits) : longueur du champs « Options »
  • Hop Count (6 bit) : TTL
  • Options : Options supplémentaire si « Options Length » est différent de 0

Cet entête lui reste inchangé sur tout le chemin. On peut donc comparer l’entête TRILL à un entête d’un protocole de niveau 3 comme IP, les nickname jouant le rôle des adresses IP. C’est pour cela que TRILL est souvent décrit comme du « routage de niveau 2 ».

Les RBriges qui sont sur le chemin ne se soucient donc pas des adresses MAC des hôtes finaux, ils se contentent de regarder l’entête TRILL pour connaitre le saut suivant (et donc il n’ont pas à ajouter d’entrée dans leur table d’adresse MAC pour ce flux).

Pour découvrir les adresses MAC non connues sur TRILL, le mécanisme est assez semblable à celui de l’Ethernet classique : Le switch diffuse la trame sur tous les RBridges grâce à un arbre de multidiffusion calculé par IS-IS. Les RBriges qui ont des interfaces ethernet classique utilise le mécanisme standard (broadcast) sur celles-ci. Lorsque qu’une réponse est renvoyé par un RBridge (RB6 dans notre schéma), le switch à l’origine de la trame TRILL (RB1 dans notre exemple) va inscrire dans sa table l’identifiant de ce RBridge dans l’entrée correspondante à l’adresse MAC.

Implémentation

Quelques grands constructeurs réseau utilisent cette technologie dans leurs équipements. Mais ce sont pour l’instant des versions remaniées de TRILL, renommé et avec quelques spécificités propriétaires qui en font des solutions non-interopérables.

C’est le cas de FabricPath pour les switches Cisco Nexus ou VCS chez Brocade pour ses switches VDX.

Exemple de configuration de FabricPath sur un Cisco Nexus :

RB1(config)# feature-set fabricpath   ! activation de la fonctionnalité FP
RB1(config)# fabricpath switch-id 1   ! switch-id fiixé manuellement
RB1(config)# vlan 100
RB1(config-vlan)# mode fabricpath   ! le vlan 100 participe au FabricPath
RB1(config-vlan)# interface ethernet 1/1
RB1(config-if-range)# switchport mode fabricpath   ! Interface 1 relié au réseau FabricPath
RB1(config-if-range)# no shutdown

Bibliographie

Introdution to TRILL par Radia Perlman et Donald Eastlake
RFC6325
RFC6326