Linux Embedded

Le blog des technologies libres et embarquées

Un petit historique du protocole Ethernet

Introduction 

De nos jours, lorsqu'on développe une application qui doit faire de la communication réseau, on ne se préoccupe pas trop des couches basses. Le développement consiste à manipuler des adresses IP et ouvrir des connexions TCP. 

Pourtant, et depuis l’origine des réseaux informatiques, c'est le même protocole qui sous-tend nos communications. Stable, fiable et décliné sous de nombreuses formes, le protocole Ethernet transporte fidèlement nos paquets IP, que ce soit sur fibre, sur nos paires torsadées ou même via le Wifi.

Cet article va vous présenter ce protocole mal connu et qui fonctionne de façon invisible sur nos machines.

Les trois premières couches du modèle ISO

Avant de décrire le fonctionnement du protocole Ethernet, commençons par définir son rôle. Pour cela, nous allons rapidement décrire les trois premières couches du modèle ISO (wikipedia)

  1. La couche physique (en dessous d’Ethernet)
  2. La couche liaison (Ethernet)
  3. La couche réseau (au dessus d’Ethernet, généralement IP)

La couche physique

Dans le modèle ISO la couche physique est chargée de transférer des bits. On va donc définir des moyens matériels de transmettre de l'information dans sa forme la plus basique. On va parler de moyens de communication (paire de cuivre, fibre optique, fréquence radio), de format de connecteurs, de fréquence d'horloge, de voltage à transmettre.

Nous n'irons pas dans les détails de la couche physique, mais voici quelques exemples de couches physiques supportant le protocole Ethernet (plus ou moins dans leur ordre historique d'apparition)

  • 10Base5 : Transmission sur câble coax à 10MBits/s
  • 10Base2 : Transmission sur câble coax à 10MBits/s, mais avec des câbles coax plus fins
  • 10BaseT : Transmission sur paires torsadées (les câbles Ethernet que nous connaissons)
  • 100BaseT : Sur paires torsadées mais à 100MBits/s
  • 1000BaseT : Sur paires torsadées, en Gb/s
  • 1000BaseF : en Gigabit, sur une fibre optique

Il existe de nombreuses autres couches physiques pouvant monter à 400Gb/s mais vous aurez compris le principe général.

Notre couche physique se charge donc de transmettre et recevoir des bits mais ne nous fournit aucune forme de contrôle d'erreur, de marqueur de début/fin de message, ou d'arbitrage d'accès au médium.

On transmet des bits sur le fil et tous ceux qui sont connectés sur le fil reçoivent les bits.

La couche liaison

Maintenant que nous sommes capables de transmettre des bits, nous allons vouloir les organiser. La deuxième couche du modèle ISO définit des protocoles qui se chargent de régler ces problèmes

  • Arbitrer l'accès au médium physique
  • Délimiter les messages (appelés trames) transmis sur le médium physique
  • Intégrer une notion d'adresse permettant aux interfaces connectées sur la couche physique de savoir si le paquet leur est destiné
  • (optionnellement) détecter des erreurs introduites par la couche physique et les corriger. 

Notons que le protocole de liaison ne garantit pas que le paquet arrive. Il est autorisé d'abandonner des paquets incorrects sans le signaler à l'expéditeur.

Il existe plusieurs protocoles répondant à ce besoin, mais nous n'allons étudier que le protocole Ethernet.

Ethernet va détecter les erreurs et abandonner les trames incorrectes sans le signaler à l'émetteur. D'autres protocoles (tels que les protocoles à commutation de circuits) pouvaient détecter ces erreurs. Dans le cas d'Ethernet cette responsabilité est laissée aux couches supérieures (généralement le protocole TCP que nous n'étudierons pas)

La couche réseau

Notre protocole Ethernet transmet donc des trames sur notre médium physique qui sont reçues par toutes les interfaces connectées. Nous pouvons donc parler avec toutes les machines avec lesquelles nous sommes directement connectées, mais uniquement celles-là. Nous sommes limités à notre réseau local. 

Pour parler aux machines au-delà de notre réseau local, il va nous falloir un protocole capable de gérer le routage, c'est-à-dire capable d'envoyer un message non pas à son destinataire mais à une machine intermédiaire qui renverra le message en direction du destinataire.

Ces "sauts" qui transmettent progressivement nos messages vers le destinataire sont ce que l'on appelle le routage. Chaque nœud reçoit de nombreux messages, et "sait" comment les retransmettre pour les rapprocher de leur destination. Le protocole (largement) le plus utilisé pour le routage est le protocole IP.

Nous n’étudierons pas ce protocole. Nous n'en parlons ici que pour bien comprendre les limites du protocole Ethernet : ce qui est et ce qui n'est pas de sa responsabilité.

La trame Ethernet

Notre protocole Ethernet va donc gérer toutes les fonctionnalités que nous venons de détailler plus haut. Les réseaux Ethernet modernes ont de nombreuses optimisations et améliorations qui compliquent la compréhension du fonctionnement du protocole, aussi je vous propose de revenir à la forme la plus simple des réseaux Ethernet, tels qu'on les trouvait dans les années 80 et 90.

Au commencement était le coax

BNC connector 50 ohm male.jpg
By Swift.Hg> - Own work, CC BY-SA 3.0, Link

 

Les premiers supports physiques du protocole Ethernet étaient des câbles dit coaxiaux. Pour simplifier, notre médium physique n'avait qu'un unique fil de donnée (en plus de la masse). Il n'y avait pas de TX, RX ou de fil d'horloge. Tout le monde était connecté sur le même fil et écoutait les variations de voltage sur ce fil. La topologie de notre réseau était donc particulièrement simple.

Bustopologie.png
By Tomateus at Luxembourgish Wikipedia, CC BY-SA 3.0, Link

Synchronisation des horloges

Nous n'avons donc qu'un fil pour transmettre nos données. Pour pouvoir correctement décoder la suite de 0 et de 1 sur le fil, il est nécessaire que toutes les interfaces connectées utilisent une horloge synchronisée afin de bien distinguer les bits. En particulier en cas de longue suite de 0 ou de 1, il y a un risque de drift.

La fréquence de l'horloge elle-même a été configurée par l'administrateur système (10Mbits/s ou 100Mbits/s selon le médium physique en coax). Il nous faut encore synchroniser nos fronts d'horloge.

Comme nous n'avons pas de fil d'horloge dédié, les interfaces se synchronisent en écoutant les bits qui circulent. Afin de garantir une bonne synchronisation, toutes les trames Ethernet commencent par un entête (une suite 56 bit alternant des 0 et 1) appelé préambule. Le préambule sert à la fois à synchroniser les horloges et à détecter le début des trames.

Collisions et CSMA/CD

Sur un réseau aussi simple et basé sur un unique fil, on voit tout de suite apparaître un problème : une seule personne peut transmettre. Si plusieurs personnes émettent simultanément, les bits seront incompréhensibles.

Afin de résoudre ce problème de collision, Ethernet utilise un automate de transmission appelé CSMA/CD.

Dans les grandes lignes, pour transmettre une trame, une interface réseau doit

  • Écouter sur le fil et attendre un blanc d'une certaine durée
  • Commencer à transmettre son message
  • Écouter sur le fil simultanément et vérifier qu'elle reçoit bien les bits qu'elle a transmis
  • Si ce n'est pas le cas, il y a collision
  • Il faut alors transmettre un signal de jamming pour que toutes les interfaces connectées réalisent qu'il y a collision
  • Les deux émetteurs attendent ensuite pour une durée aléatoire
  • On retente ensuite de transmettre.

Grâce à ce protocole simple nous détectons les erreurs de transmission et nous attendons poliment un créneau pour pouvoir émettre.

Les adresses MAC

MAC-48 Address.svg
By Inductiveload, modified/corrected by Kju; - SVG drawing based on PNG uploaded by User:Vtraveller. This can be found on Wikipedia here., CC BY-SA 2.5, Link

L'une des missions de notre protocole Ethernet est de permettre à chaque interface de savoir si un paquet lui est destiné. 

À cause des limitations de notre medium, toutes les trames sont reçues par toutes les interfaces, mais les interfaces peuvent ensuite choisir d'ignorer les paquets qui ne leurs sont pas destinées. Ce filtrage est généralement fait au niveau de votre carte réseau qui ne transmettra à votre CPU que les trames qui lui sont destinées et les trames multicast/broadcast. Il est cependant possible de mettre l'interface en mode dit promiscuous, celle-ci transmettra alors toutes les trames au CPU.

Pour gérer cet adressage, chaque interface dispose d'une adresse unique (fixée en usine, à la fabrication de l'interface) de 48bit appelée adresse MAC.

Le but des adresses MAC est que chaque interface qui se connecte sur le réseau Ethernet ait déjà, à la connexion, une adresse qui soit garantie unique sur le réseau. 

  • Pour les cartes réseau physiques, les adresses sont dites globally uniques. L'avant dernier bit du premier octet est positionné à 0, les trois premiers octets indiquent le fabriquant de l'interface et les autres bits sont attribués à l'interface par le fabricant en usine.
  • Pour les cartes virtuelles (VM, conteneurs etc..) ce même avant dernier bit du premier octet est positionné à 1. Les autres sont déterminés semi-aléatoirement mais doivent toujours garantir cette unicité.

Le format de la trame

Maintenant que nous avons vu ces quelques notions de base, nous pouvons voir le format de nos trames en détail.

Ethernet frame.svg
By Self-made - , Public Domain, Link

Notre trame a donc les champs suivants

  • Un préambule de 7 octets permettant de synchroniser les horloges
  • Un octet Start Frame Delimiter permettant de détecter le début de la trame
  • L'adresse MAC de destination (6 octets)
  • L'adresse MAC source (6 octets)
  • 2 octets indiquant la longueur de la trame ou le type du contenu
  • Le contenu de la trame (maximum de 1500 octets, )
  • Un Frame Check Sequence de 4 octets permettant de vérifier que la trame n'a pas été corrompue par le medium
  • Un espace minimum entre deux trames de 12 octets

Nous avons beaucoup simplifié les détails de la trame Ethernet, mais cela nous permet de comprendre le fonctionnement. Les trames ont donc toutes informations nécessaires pour être filtrées à l'arrivée et le destinataire peut enregistrer l'adresse MAC de la source pour pouvoir lui répondre.

Les limitations du protocole Ethernet et comment les contourner

Dans la forme simple que nous sommes en train d'étudier, le protocole Ethernet souffre d'un certain nombre de limitations.

Longueur de câble

Une première limitation du coax (techniquement toujours présente, mais rarement rencontrée sur les réseaux modernes) est la dégradation du signal avec la distance.

Si deux machines sont trop loin l'une de l'autre sur le fil, le signal reçu peut être trop faible et la machine distante ne peut pas recevoir les messages. Un cas encore plus critique peut arriver si deux machines trop éloignées tentent de communiquer simultanément. Dans ce cas, aucune des deux machines ne peut détecter la collision. 

Pour pallier cette difficulté, des composants réseaux spécifiques appelés répéteurs peuvent être insérés sur le fil coax. Ces dispositifs ne font rien d'autre qu'amplifier le signal électrique et n'ont aucune intelligence interne.

Nombre maximum de participant

Sur notre topologie simple, une seule personne peut transmettre à un moment donné. Tant que le nombre de participants est faible ce n'est pas un problème mais lorsque le nombre de participants augmente, le risque de collision augmente exponentiellement. Au-delà d'un certain nombre de participants, le risque de collision devient tellement élevé que le réseau est inutilisable. 

Pour pallier cette difficulté, il est possible d'insérer un composant, appelé bridge, sur notre câble. Le bridge est un composant intelligent qui écoute les paquets sur ses deux interfaces, note les adresses sources des paquets qui passent pour construire une liste des adresses connectées sur chacune des interfaces et ne transmet le paquet entre les interfaces que lorsque c'est nécessaire :

  • Lorsque la source et la destination sont connues et sont de part et d'autre du bridge
  • Lorsque la destination n'est pas connue
  • Lorsque la trame a pour destination une adresse broadcast/multicast.

Certains bridges peuvent également garder en mémoire quelques trames en attendant un créneau de transmission sur l'interface de destination afin d'éviter une collision.

Le bridge est transparent pour les utilisateurs et, si la topologie ne change pas trop, peut diminuer fortement le trafic en définissant deux domaines de collision séparés. Son utilisation n'est cependant pas gratuite.

  • Il introduit un délai dans la transmission des trames
  • Il n'est efficace que si la majorité des trames n'ont pas à traverser le bridge. Si votre connexion à internet est de l'autre côté du bridge, le bridge devra tout retransmettre et n'apportera pas grand chose.

Dans le contexte des machines de l'époque (ordinateurs fixes, pas encore d'accès à internet) les bridges étaient véritablement efficaces pour permettre au réseau de grandir.

Topologie, connexions.

La topologie des réseaux coax était simple : un fil faisait le tour de tous les ordinateurs connectés. Il est impossible de câbler un immeuble de cette façon, mais comme seuls les laboratoires de recherche étaient câblés, cette limitation était acceptable. 

Il existait des connecteurs en T permettant des bus légèrement plus complexes (topologie en étoile), mais les possibilités restaient très limitées.

Notons l'existence de connecteurs dit vampires qui venaient percer la gaine du câble coax pour connecter une machine au milieu du câble.

Autres limitations

  • Comme nous n'avons qu'un fil de donnée, nous ne pouvons pas transmettre et recevoir simultanément. Nous sommes donc forcés d'être en mode half-duplex
  • Tous les composants sont des composants simples et tout le monde est connecté sur le même fil. L'ensemble du réseau doit donc fonctionner à une vitesse commune, la vitesse du composant le plus lent du réseau.
  • Un personne qui termine la transmission d'un paquet peut enchaîner immédiatement avec un autre paquet (modulo les 12 bits d'inter-trame). Il y a donc un risque de famine réel sur les réseaux coax. 

La paire torsadée

Nous avons vu que les architectures basées sur le coax avaient un grand nombre de limitations. Pour pallier ces limitations, un nouveau médium de transmission a fait son apparition : la paire torsadée, c'est-à-dire le câble Ethernet que nous connaissons tous.

Un câble Ethernet contient un total de huit fils, mais seuls deux paires sont utilisés en 10BaseT et 100BaseT. Deux fils servent à la transmission et deux autres à la réception.

La présence de deux types de fils complique la topologie. 

  • Si nous connectons deux machines en direct, les connecteurs TX de l'une doivent être connectés aux bornes RX de l'autre et réciproquement. Notre câble doit donc croiser les paires.
  • Au contraire, si nous connectons une machine à un composant réseau, les câbles ne doivent pas être croisés
  • Si nous connectons trois machines (A, B et C) nous avons besoin des connexions suivantes
    • Les TX de A doivent être reliés aux RX de B et C
    • Les TX de B doivent être reliés aux RX de A et C
    • Les TX de C doivent être reliés aux RX de A et B

Électriquement, lorsque nous connectons nos trois machines A, B, C nous connectons toutes les fiches TX à toutes les fiches RX. Il est donc impossible de connecter plus de deux machines via des paires torsadées sans introduire des composants intelligents.

Topologie commutée et hubs

Nous ne pouvons pas connecter plus de deux machines. Nous allons donc avoir une topologie où tous les nœuds sont des composants réseaux capables d'un peu d'intelligence dans la redirection des signaux électriques.

Les premiers composants permettant de construire des réseaux de paires torsadées étaient les hubs. Un hub est un composant réseau simple qui, quand il reçoit un bit sur un de ses ports, le retransmet sur tous les ports sauf le port d'origine. Les hub étaient également capables de détecter des collisions et d'émettre un signal de jamming sur tous les ports. Certains hubs disposaient également de connecteurs coax pour permettre la compatibilité entre les réseaux paire torsadée et coax.

Notons que le hub reste un composant très simple qui travaille quasiment exclusivement au niveau physique. Il peut détecter les collisions, mais il ne sait pas différencier, vérifier ou bufferiser les trames. De plus son fonctionnement bas niveau fait qu'il impose à tous ses ports d'utiliser la même fréquence d'horloge et qu'il ne limite pas les collisions. 

Il est également impossible de travailler en Full-Duplex avec un hub. En effet, si deux personnes émettent simultanément (avec l'idée qu'elles reçoivent les paquets en même temps) une troisième personne sur le segment recevra simultanément les paquets des deux transmetteurs. Dans ce cas il y a donc collision.

Les switchs

Avec la généralisation des grands réseaux LAN en entreprise, les hubs ont rapidement atteint leurs limites et il est très rare d'en rencontrer de nos jours. Les hubs ont été remplacés par des composants plus intelligents et qui sont maintenant omniprésents sur nos réseaux : les switchs.

Tout comme le hub, le switch est un nœud intermédiaire dans un réseau Ethernet de plusieurs ports, mais contrairement au hub, le switch est un composant intelligent capable d'interpréter et de mémoriser les paquets qui lui parviennent avant de les retransmettre.

Sur le principe le switch est très proche du bridge que nous avons vu plus haut : il lit les paquets qu'il reçoit sur ses différents ports, mémorise les adresses sources et, lorsque c'est possible, n'envoie les paquets que vers le port où se trouve le destinataire.

Contrairement au bridge, le switch est capable de mémoriser un paquet. Cela veut dire que, si le port de destination est occupé, le switch ne va pas créer de collision. Il va simplement attendre un créneau d'émission et transmettre le paquet plus tard. 

Autre avantage de la mémorisation : Chaque port de notre switch peut utiliser une fréquence d'horloge différente. Les interfaces capable de fonctionner en 100Mb/s ne sont plus contraintes par les interfaces limitées à 10Mb/s.

Enfin, grâce aux switchs, on peut enfin travailler en full-duplex. Les liaisons étant purement point à point, rien n’empêche d'émettre sur les paires TX tout en recevant sur les paires RX. Les collisions sont une chose du passé qui n'arrivent plus avec les switchs.

Fonctionnalités avancées des switchs

Une fois que notre switch est devenu un composant intelligent incluant un processeur et des capacités réseau avancées, de nombreuses possibilités s'offrent à nous

  • Les switchs modernes ont généralement un ou deux ports plus rapides que les autres (souvent en fibre optique) pour connecter les switchs entre eux. Cela permet d’augmenter le débit sur les connexions qui verront passer le gros des communications
  • Des protocoles comme STP et SPB permettent aux switchs de discuter entre eux et de s'échanger des listes d'adresses MAC connues. Cela permet aux switchs d'apprendre la topologie réseau beaucoup plus rapidement et permet également des topologies formant des boucles. Les switchs seront capables de repérer ces boucles, de choisir le meilleur chemin et de basculer sur un chemin alternatif en cas de panne d'un nœud
  • Les switchs sont souvent également capable de faire de l'agrégation. Si deux switchs sont reliés par deux câbles, les paquets sont transmis alternativement sur les deux câbles, permettant d'effectivement doubler le débit entre les switchs
  • Les switchs modernes peuvent également gérer le partitionnement et gérer les VLAN. C'est-à-dire la possibilité d'avoir plusieurs réseaux Ethernet séparés sur le même switch. Chaque réseau ne pouvant envoyer de paquets sur le réseau voisin.
  • Des évolutions du protocole Ethernet ont permis l'implémentation de "Jumbo Frames" qui dépassent les 1500 octets et peuvent monter jusqu'à une charge de 9000 octets. Il faut que tous les éléments qui transmettent ces trames sachent les gérer mais c'est le cas de tous les équipements un peu récents
  • Il existe des trames ethernet spécifiques de signalisation que nous n'avons pas détaillé. Celles-ci permettent (entre autre) à un récepteur de signaler à un émetteur (typiquement en full-duplex) que le récepteur ne peut plus traiter les paquets et qu'il faut lui laisser un délai pour dépiler. Les swith utilisent ce mécanisme pour signaler que leur mémoire est pleine.

Conclusion

Ethernet fait partie de ces discrets compagnons qui nous accompagnent tous les jours sans que nous n'ayons besoin de nous en soucier. C'est un protocole qui marche et qui, avec toutes les améliorations qu'il a reçues depuis sa création, n'a plus à être configuré sur les machines de bureau.

Les administrateurs systèmes ont encore besoin de comprendre le protocole afin de configurer les switchs et les VLAN, mais ce protocole solide reste relativement simple à configurer lorsqu'on le compare aux protocoles de plus haut niveau comme le protocole IP.

Nous espérons que cette petite escapade dans l'histoire d'un protocole on ne peut plus d'actualité vous aidera à comprendre un peu mieux ce qui se passe derrière les voyants clignotants de votre port RJ45.

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.