Micro-architecture des switchs

Un switch est un matériel qui relie plusieurs composants électroniques ou informatiques entre eux, les interconnexions étant configurables. Il contient plusieurs ports d'entrées, sur lesquels on peut envoyer recevoir des paquets de données, et plusieurs ports de sorties, sur lesquels on peut envoyer des données. Dans certains cas, les ports d'entrée et de sortie sont confondus : un même port peut servir alternativement d'entrée et de sortie.

Switching

Le rôle du switch, c'est de faire en sorte que les informations en provenance d'un port soient envoyées sur un autre port, défini par la configuration du switch. Dans le cas le plus simple, on peut voir un Switch comme un ensemble de connections point à point configurables : le switch associe un port de sortie à chaque port d'entrée. Le composant qui relie ports d'entrée et ports de sortie est appelé la switch fabric.

Cette switch fabric peut s'implémenter de plusieurs manières, en utilisant :

  • un réseau d'interconnexions configurable selon les besoins ;
  • une mémoire ;
  • un bus.

Les techniques de broadcast ou de multicast permettent d'envoyer une donnée présentée sur un port d’entrée sur plusieurs sorties : on peut envoyer un message identique à plusieurs ordinateurs en même temps, sans devoir envoyer plusieurs copies. Certains switchs permettent de gérer cela directement dans le matériel, soit en dupliquant les paquets, soit en connectant une entrée sur plusieurs sorties.

Arbitrage

Il arrive d'envoyer plusieurs paquets en même temps sur le même port de sortie, les deux paquets provenant d'entrées différentes. Dans ce cas, le switch essaye d'envoyer les paquets les uns après les autres, certains étant mis en attente (il arrive cependant que certains paquets soient perdus). De même, il arrive que la switch fabric soit relativement lente comparé au temps d'envoi et de réception d'un paquet : ceux-ci doivent être mis en attente.

Dans les deux cas, qui dit mise en attente dit : utilisation de mémoires tampons pour stocker les paquets mis en attente. Dans le cas d'un switch/routeur, les mémoires tampons sont des mémoires FIFO, histoire de conserver l'ordre d'arrivée et d'envoi des paquets. Si les FIFO sont remplies, les paquets en trop sont perdus et n'arrivent pas à destination : on laisse la situation entre les mains du logiciel.

Output Buffering

Si on met plus de temps à envoyer des paquets sur le réseau qu'à les router via la switch fabric, on risque de perdre des paquets : certains paquets arriveront sur les ports de sortie alors que l'envoi du paquet précédent n'est pas terminé. On peut éviter cela en mettant les FIFO entre la switch fabric et les ports de sortie : on parle d'output buffering.

Output Buffering

Input Buffering

Il arrive que l'on se trouve face à la situation inverse : le temps de router un paquet, plusieurs paquets sont arrivés sur les ports d'entrée. Pour éviter cela, il faut mettre les FIFO sur les entrées : on parle d'input buffering. Avec cette organisation, on est obligé d'utiliser un algorithme d’ordonnancement pour décider quelle FIFO traiter en priorité. La taille optimale des FIFO dépend de la qualité de l'algorithme d'ordonnancement.

Input Buffering

Mais si une requête est en attente, elle va bloquer les requêtes suivantes sur le port d'entrée, même si celles-ci ont un port de sortie différent : on parle d'head of line blocking.

Head of line blocking

Pour éliminer l'head of line blocking, certains switchs utilisent une variante de l'input buffering : Virtual output queing. Avec cette méthode, chaque FIFO est découpée en sous-FIFO, chacune prenant en charge les paquets destinés à un port de sortie précis. Avec cette technique, on peut traiter les requêtes dans le désordre, afin de profiter au maximum des ports libres.

Input-output Buffering

Et enfin, dernière solution : mettre des FIFO aussi bien sur les ports d'entrée que sur les ports de sortie. Il est même possible d'utiliser le virtual output queuing. Dans tous les cas, les algorithmes d’ordonnancement de ces switchs sont particulièrement complexes.

Input-Output Buffering

Buffering interne à la switch fabric

Et enfin, certains swicths intègrent les FIFO dans la switch fabric.

Routage

Une switch fabric ne suffit pas à créer un switch ou un routeur. En effet, le switch ou le routeur doit déterminer le port de destination en fonction de l'adresse MAC ou IP du paquet. La switch fabric doit être secondée par deux circuits :

  • un circuit qui va détecter les headers IP ou ARP, et les interpréter : c'est l'interpréteur de paquet ;
  • et un circuit qui va déterminer le port de destination : le forwarding engine.

L'intérieur d'un switch ressemble donc à ceci (les FIFO d'arbitrage sont intégrées au réseau d'interconnexion) :

Micro-architecture complète d'un switch/routeur

Le switch est un matériel qui utilise des adresses MAC, qui servent à identifier des cartes/équipements réseau (et non des ordinateurs, comme les adresses IP) : chaque paquet indique l'adresse MAC du destinataire et de l'émetteur. Pour les routeurs, le routage utilise des adresses IP .

À l'intérieur du forwarding engine, on trouve des tables de correspondance qui associent chaque adresse à un port : la CAM table pour les adresses MAC, et la table de routage pour les IP. Cette table de correspondance peut être implémenté de deux manières :

  • avec un automate, une machine à états finie matérielle ;
  • avec une mémoire RAM ou associative.

La dernière solution est la plus utilisée, même si des solutions hybrides sont aussi relativement courantes (on peut notamment citer l’algorithme de routage nommé Logic-Based Distributed Routing).


Pour résumer, un switch ou routeur est composé de plusieurs circuits :

  • des circuits pour mettre en attente les paquets reçus et gérer l'arbitrage (FIFO et circuits de sérialisation/dé-sérialisation) ;
  • un circuit qui extrait les informations utiles des paquets à transmettre, et qui prend en charge l'extraction de l'adresse de destination ;
  • un circuit dédié au routage : le forwarding engine ;
  • une switch fabric.

Il faut noter que le switch peut être pipeliné, pour gagner en performance : il suffit d'insérer des mémoires tampons entre les différents circuits cités au-dessus.

Switch/routeur pipeliné