Le Switch

Un switch (ou commutateur en français) est un boîtier sur lequel sont présentes plusieurs prises RJ45 femelles permettant de brancher dessus des machines à l'aide de câbles à paires torsadées. Des images valant mieux que des grands discours, voici, à la figure suivante, un switch.

Tous les switchs ne se valent pas en termes de caractéristiques, et ils se différencient principalement par :

  • le nombre de ports allant de 4 à 96, permettant d’y connecter autant de machines ;
  • le type de port : port RJ45 pour les câbles réseau standard, ou interface optique type SFP+ pour la fibre optique (SFP = Small Form-factor Pluggable). Ce sont les plus courants ;
  • le débit possible sur chaque port : de 10 Mbp à 100 Gbp ;
  • les fonctionnalités telles que l’interface de configuration, la compatibilité ou les modes de communication.

Si tout le monde est connecté ensemble, comment le switch sait à qui envoyer la trame ?

L'aiguillage des trames

Pour envoyer la trame vers la bonne machine, le switch se sert de l'adresse MAC destination contenue dans l'en-tête de la trame. Il contient en fait une table qui fait l'association entre un port du switch et une adresse MAC. Cette table est appelée la table CAM (Content Addressable Memory).

Prenons un exemple, avec le schéma de la figure suivante.

La table CAM de notre switch sera la suivante :

Quand la machine PC0 voudra envoyer une trame à la machine PC2, le switch lira l'adresse destination et saura alors vers quel port renvoyer la trame :

Trame envoyée de PC0 à PC2

Le switch va donc envoyer la trame sur le port 3, et elle arrivera bien à la machine PC2 qui est branchée sur ce port, et à elle seule !
Le switch aiguille donc les trames grâce à l'adresse MAC de destination située dans l'en-tête et à sa table CAM qui lui dit sur quel port renvoyer cette trame.

Comment cette table CAM est fabriquée ? Si je branche une nouvelle machine, comment le switch la connaît ?

Mise à jour de la table CAM

La table CAM du switch va être fabriquée de façon dynamique. Cela veut dire que le switch va apprendre, au fur et à mesure qu'il voit passer des trames, quelle machine est branchée à quel port.
Prenons l'exemple précédent, imaginons que la table CAM du switch est vide et que l'on vient de brancher les machines (voir la figure suivante).

Table CAM vide

Imaginons maintenant que la machine PC0 envoie une trame à la machine PC2.

Trame envoyée de PC0 à PC2

  • La trame arrive au switch.
  • Il lit l'adresse MAC source et voit l'adresse MAC de la machine PC0.
  • Vu que la trame vient du port 1, il met en relation le port 1 et l'adresse MAC de la machine PC0 dans sa table CAM.
  • Il met à jour sa table CAM.

Table CAM mise à jour

Par contre, l'adresse MAC destination n'est pas présente dans sa table CAM, il ne sait donc pas où envoyer la trame. Pour être sûr que la machine destination va recevoir la trame, il lui suffit de l'envoyer à tout le monde, donc de renvoyer la trame sur tous les ports actifs du switch !

Attention, ceci n'est pas un broadcast, car l'adresse de destination dans la trame est l'adresse MAC de la machine PC2. La trame est envoyée à tout le monde, mais pas en broadcast.

La machine PC2 va donc recevoir la trame et va pouvoir répondre à la machine PC0. Elle va donc envoyer une trame à la machine PC0.

Trame de réponse envoyée de PC2 à PC0

  • La trame arrive au switch.
  • Il lit l'adresse MAC source et voit l'adresse MAC de la machine PC2.
  • Vu que la trame vient du port 3, il met en relation le port 3 et l'adresse MAC de la machine PC2 dans sa table CAM.
  • Il met à jour sa table CAM.

Table CAM mise à jour

Et ainsi de suite à chaque fois qu'il voit passer une trame :

  • le switch met à jour sa table CAM quand il voit passer une trame ;
  • le switch envoie une trame à tout le monde s'il n'a pas l'adresse MAC de destination dans sa table CAM.

La table CAM ne va-t-elle jamais cesser de grandir vu que l'on y ajoute en permanence des informations ?

Le TTL de la table CAM

Le TTL veut dire Time To Live en anglais, soit Durée De Vie. Il représente donc une durée.

Le principe est de considérer qu'une donnée est valable pendant un certain temps, mais qu'au-delà de ce temps, elle ne l'est plus.
Pour une information dans la table CAM, on va considérer qu'elle est valable un certain temps, mais une fois ce temps dépassé, on enlèvera l'information de la table CAM. Ainsi la table CAM sera mise à jour régulièrement et les données les plus anciennes seront effacées.

Table CAM avec TTL

Maintenant, si la machine PC0 envoie une trame, le TTL va être remis à jour, car le switch sait que l'information "la machine PC0 est branchée sur le port 1" est une information récente.

Ainsi, la table CAM du switch se remplira ou se mettra à jour après chaque réception d'une trame, et elle se videra quand elle n'aura pas reçu de trame depuis longtemps.

Questions complémentaires

Le switch peut-il découvrir les adresses MAC des machines sur le réseau ?

Normalement non. Ce n'est pas son rôle, le switch est un élément passif. D'ailleurs, une machine qui est branchée sur un switch envoie la plupart du temps une trame au réseau quand elle voit que sa carte réseau est branchée, donc le switch la verra et mettra à jour sa table CAM.

Le switch a-t-il une adresse MAC ?

Là encore la réponse est non. Personne n'a besoin de parler avec le switch, donc il ne nécessite pas d'adresse MAC.
Cependant, certains switchs sont dits « administrables », ce qui veut dire que l'on peut se connecter dessus pour les configurer. Et dans ce cas, ils ont une adresse MAC pour être identifiés sur le réseau.

Exemple réel de table CAM

On peut remarquer une chose amusante : il y a au moins 5 machines branchées sur le port 4 de mon switch !
C'est possible, en fait je ne peux pas brancher plusieurs machines sur un même port. Par contre, je peux brancher un switch sur le port de mon switch. Et donc toutes les adresses MAC des machines connectées à ce switch seront susceptibles d'apparaître sur le port du premier switch.

Trucs et astuces (de vilains...)

Connaissant maintenant le fonctionnement d'un switch, comment pensez-vous qu'on puisse faire pour gêner son fonctionnement s'il nous en prend l'envie ? Il y a plusieurs façons de le faire.

Méthode 1, saturation par envoi massif intelligent.

Si l'on envoie des tonnes de trames vers des adresses MAC inexistantes, que se passe-t-il ?
Le switch ne sachant pas vers quel port les envoyer, il va les envoyer vers tous les ports actifs... et va donc vite saturer !

Méthode 2, saturation de la table CAM.

Si l'on envoie des tonnes de trames en utilisant à chaque fois une adresse MAC de source différente, que se passe-t-il ?
La table CAM du switch va se remplir progressivement. Plus elle sera remplie, plus sa lecture par le switch sera longue, et plus cela induira des temps de latence importants... jusqu'à provoquer l'écroulement du switch. Quand il sera saturé et n'aura plus le temps de lire sa table CAM, il enverra directement les trames sur tous les ports. Ceci permettrait à un pirate de voir tout le trafic du switch...
Cependant, nous verrons par la suite qu'il existe des méthodes bien plus puissantes pour voir le trafic circulant sur un switch.

La révolution du switch

Par rapport à un hub, un switch permet d'isoler les conversations.

Le switch a également mis fin au CSMA/CD, puisqu'il n'y a plus de collision. En effet, regardons les cas possibles de plus près.

Imaginons que les machines PC0 et PC2 se parlent en même temps : y a-t-il collision ? On peut se dire que, vu que les messages vont être envoyés en même temps, ils vont se superposer. Mais ce serait oublier la structure des câbles à paires torsadées !
En paire torsadée, nous utilisons des fils différents pour la transmission et la réception, donc les messages vont se croiser, mais sur des fils différents !

Un schéma plus réel d'un switch serait celui de la figure suivante.

On voit bien ici les paires de réception et de transmission différentes. Il n'y a donc pas de collision dans ce cas.

Observons un autre cas : imaginons avec le schéma précédent que les machines PC0 et PC2 parlent en même temps à la machine PC1.
Dans ce cas, les deux messages vont arriver en même temps sur la paire de réception de la machine 24, et badaboum, il y aura collision... ou pas. Ce cas a été prévu et les switchs imaginés en conséquence.

En fait, le switch possède une mémoire dans laquelle il peut stocker une ou plusieurs trames quand il les reçoit. Il ne renvoie cette trame que si la paire de transmission de la machine à qui elle est destinée est libre. Ainsi, quand il a deux trames à envoyer sur la même paire de réception, il envoie la première, puis la seconde. Il n'y a alors pas de collision.

Mais alors, il n'y a pas de collisions sur un switch ?

Non. Ou alors, c'est qu'on l'a configuré pour qu'il y en ait (nous le verrons par la suite).

Et donc s'il n'y a plus de collisions, il n'est plus la peine de faire du CSMA/CD : on dit que la carte réseau fonctionne maintenant en full duplex.
À l'inverse, quand on fait du CSMA/CD sur un hub ou un câble coaxial, la carte réseau fonctionne en half duplex.

Mais attention, nous allons voir comment le full duplex peut être aussi destructeur que performant.
Imaginez qu'on branche 10 machines sur un hub. Nous sommes sur un hub, donc sur une topologie en bus, donc les machines doivent être en half duplex et faire du CSMA/CD.
Que se passe-t-il si la carte réseau de l'une d'entre elles est configurée en full duplex ?

Eh bien cela est très, très gênant. Tout simplement, car les neuf autres machines attendent que le hub soit libre avant de pouvoir parler, et si jamais quelqu'un parle en même temps qu'elles, elles considèrent qu'il y a une collision. Alors que notre machine en full duplex ne se soucie de rien, parle quand elle veut, ne détecte aucune des collisions qui se produisent.
Pire encore, si cette machine est en train de télécharger un gros fichier, elle parle en permanence et empêche toutes les autres de parler. Le réseau est alors inutilisable pour nos neuf machines !

Nous voyons donc que toute machine connectée à un hub doit automatiquement avoir sa carte réseau configurée en half duplex. Si vous ne configurez jamais votre carte réseau c’est parce qu’elles sont intelligentes et capables de déterminer le duplex à utiliser. Ainsi, quand une carte réseau est branchée, elle est capable de déterminer si elle doit fonctionner en full duplex ou en half duplex. Branchée à un hub, elle se mettra en half duplex ; branchée à un switch, elle se mettra en full duplex.

Et si je branche un hub à un switch ? Le hub ne peut pas être configuré, il fait du half duplex. Donc il ne pourra de toute façon jamais faire autre chose, car il fonctionne comme une topologie en bus qui nécessite le CSMA/CD. Le switch va donc devoir s'adapter.

En fait, pas tout le switch, seulement le port du switch sur lequel est branché le hub. Ce port du switch fonctionnera en half duplex, et tous les autres ports en full duplex. Normalement le switch le détectera comme un grand, mais il est souvent possible de le modifier soi-même, à la main, sur les switchs administrables.

Il peut arriver que la négociation de duplex ne fonctionne pas et qu'une machine soit en half duplex sur le port d'un switch en full duplex. Dans ce cas cette machine se verra grandement pénalisée, car à chaque fois que quelqu'un lui parlera, elle ne pourra pas parler en même temps.

Maintenant que nous avons vu tous les bienfaits que le switch a apportés, nous allons voir une de ses fonctionnalités avancées qui a encore permis d'améliorer les réseaux : les VLANS.

Les VLANs

Au-delà de la commutation (le fait d'aiguiller une trame vers un port), les switchs ont acquis de nouvelles capacités au cours du temps pour améliorer le fonctionnement des réseaux. Une de ces fonctionnalités est très répandue et intéressante, il s'agit des VLANs.

Qu'est-ce qu'un VLAN ? Un VLAN est un LAN virtuel (ou virtual LAN en anglais) c’est-à-dire un réseau local virtuel.

Un VLAN est la capacité de séparer des ports d'un switch dans des réseaux différents. Cela revient à séparer certains ports d'un switch. Ils ne pourront donc plus communiquer ensemble, vraiment plus du tout.

Prenons un exemple, illustré en figure suivante.

Nous avons un switch de 10 ports sur lequel sont branchées six machines. Nous souhaitons que ces groupes de machines ne puissent pas parler entre eux. Les trois premières parlent ensemble, les trois autres aussi, mais pas d'un groupe à l'autre. Les VLANs peuvent nous aider à faire cela !
L'idée du VLAN est de couper notre switch en plusieurs morceaux, comme si l'on avait plusieurs switchs.
Dans notre cas, nous allons créer deux VLANs. Un VLAN pour les trois machines de gauche, et un autre pour les trois machines de droite.
Ainsi, nous aurons fait en sorte qu'elles ne puissent plus parler entre elles d'un groupe à l'autre.
Voici à la figure suivante ce que cela donne.

Nous voyons ici en vert et en rouge les deux VLANs. Ainsi, les machines connectées aux ports appartenant au VLAN vert ne peuvent communiquer qu'avec le VLAN vert. Et de même pour les machines connectées aux ports appartenant au VLAN rouge. Par contre, il est impossible pour une machine connectée au VLAN vert de communiquer avec une machine connectée au VLAN rouge. C'est comme si l'on avait séparé le switch en deux petits switchs, chacun ayant sa propre table CAM, comme sur la figure suivante.

Quel est l'intérêt des VLANs ?

Dans l'exemple que nous avons choisi, l'intérêt n'est pas flagrant, mais imaginons que nous ayons à gérer une école, avec une administration, 100 enseignants et 1000 élèves. Nous avons alors plusieurs switchs répartis dans l'école. Des gros switchs de 256 ports ! (on appelle cela des châssis.)
Il est intéressant de pouvoir segmenter ces switchs pour séparer les trois populations, pour que les élèves n'aient pas accès au réseau administratif ou à celui des enseignants, et que les enseignants n'aient pas accès au réseau administratif (pour changer leur fiche de paye par exemple). Plutôt que d'acheter 25 petits switchs de 48 ports, on en achète 5 gros de 256 ports.
En plus de la sécurité offerte par la séparation des réseaux, cela apporte de la facilité de configuration. Si je veux qu'un port passe d'un VLAN à un autre, il me suffit de le configurer sur le switch.
Je peux faire tout cela sans bouger de mon bureau d'administrateur réseau à travers une interface web d'administration du switch, comme vous pouvez le voir sur la figure suivante.

On voit ici que chaque port peut être positionné dans un VLAN donné.
Ici le port 1 est dans le VLAN 1 alors que le port 5 est dans le VLAN 2. Les machines connectées sur ces ports ne pourront pas communiquer ensemble.

Un VLAN permet donc d'isoler certains ports d'un switch par rapport aux autres, comme si l'on coupait le switch en deux.

Est-ce vraiment impossible de passer d'un VLAN à un autre ?

Ce n'est pas impossible, mais presque, cela a déjà été fait : ça s'appelle du VLAN hopping.
Malheureusement pour nous, les failles de conception qui le permettaient ont été corrigées et le VLAN hopping n'est plus d'actualité.

Cas pratique

Il y a trois switchs connectés entre eux, et quelques machines branchées sur chaque switch.
Problème : la semaine dernière, le switch 2, qui est au milieu, est tombé en panne et les machines des switch 1 et 3 ne pouvaient alors plus se parler !
On vous demande donc de trouver une solution pour que le réseau puisse continuer de fonctionner, même si l'un des switchs tombe en panne.
Ni une ni deux, vous vous dites qu'il faudrait relier les switchs 1 et 3, comme ça si n'importe lequel des switchs tombe en panne, les deux autres seront toujours reliés...
Et patatras...

Une heure à peine après que vous ayez relié les switchs, le réseau ne marche plus, plus personne n'a accès à Internet et on n'arrive même plus à communiquer avec les machines sur le réseau local.
Que se passe-t-il ?

Vous venez de créer ce que l'on appelle une boucle de commutation et ceci est très grave !
Cette boucle est grave, car elle offre deux chemins possibles pour atteindre une destination.
Dans le cas de l'envoi d'une trame vers une machine, le switch empruntera ces deux chemins et la trame arrivera à destination deux fois. Pas si grave, vous direz.
Néanmoins, cela devient très gênant dans le cas d'un broadcast !
En effet, notre broadcast va être envoyé sur les deux chemins puis, arrivé au prochain switch, il va être renvoyé par les deux chemins possibles puis, arrivé au prochain switch, renvoyé par les deux chemins possibles, etc.
Et ainsi de suite jusqu'à ce que les switchs aient trop de broadcasts à traiter en même temps et soient complètement saturés.

Ce phénomène s'appelle une tempête de broadcasts (ou broadcasts storm en anglais).

Il est extrêmement puissant et peut faire écrouler les plus grands réseaux. Un réseau de 15 000 machines peut s'écrouler pendant plusieurs jours à cause d'un problème de ce genre.
Et il suffit de créer une simple petite boucle... Il suffit de relier les deux extrémités d'un câble à un même switch...
OK, mais alors comment répondre au problème initial ?
Il n'y a pas de solution... Du moins pas dans l'état actuel de nos connaissances.
Pour ceux qui veulent aller plus loin, vous pourrez vous renseigner sur le web à propos des technologies de spanning tree, fast spanning tree et 802.1d.
Ce qu'il faut en retenir : ne jamais faire de boucles sur, ou entre, des switchs !

Dernière chose : Vous entendrez parfois parler de pont ou bridge en anglais. Un pont n'est rien d'autre qu'un switch avec seulement deux ports. Donc si vous connaissez le switch, vous connaissez le pont !

Références

"Apprenez le fonctionnement des réseaux TCP/IP" de Eric Lalitte - Collection OpenClassrooms
Concevez votre réseau TCP/IP - OpenClassrooms