Aller au contenu

Ethernet, trames et commutation locale

Ethernet a gagné. Né au début des années 1970 chez Xerox, normalisé par l’IEEE (Institute of Electrical and Electronics Engineers) sous la référence 802.3, il a successivement éliminé Token Ring, FDDI et ATM des réseaux locaux, avant de s’installer dans les centres de données et chez les opérateurs. Cette fiche décrit la trame Ethernet champ par champ, explique comment un commutateur décide où envoyer chaque trame, montre les limites d’un réseau local plat et ce qu’un attaquant branché sur une prise peut en tirer.

→ Lire l’explication complète de la marmotte

La norme IEEE 802.3 a été approuvée en 1983 pour un Ethernet à 10 Mbit/s sur câble coaxial partagé. Elle n’a cessé depuis de s’enrichir d’amendements qui conservent le format de trame et changent tout le reste :

GénérationAmendementAnnéeExemple de support
Fast Ethernet, 100 Mbit/s802.3u1995100BASE-TX, paire torsadée
Gigabit Ethernet802.3z, 802.3ab1998, 19991000BASE-SX (fibre), 1000BASE-T (cuivre)
10 Gigabit Ethernet802.3ae200210GBASE-SR (fibre)
40 et 100 Gbit/s802.3ba2010interfaces QSFP en centre de données
200 et 400 Gbit/s802.3bs2017liens entre commutateurs de cœur
800 Gbit/s802.3df2024interconnexions de centres de données

Cette continuité est la vraie force d’Ethernet : un analyseur écrit pour les trames de 1983 lit sans difficulté celles d’un lien à 400 Gbit/s. Les supports et leurs portées sont traités dans Médias, câbles et fibres.

Une trame Ethernet II, la forme utilisée pour IP, se présente ainsi :

Trame Ethernet II, dans l'ordre : préambule de 7 octets, SFD de 1 octet, MAC de destination de 6 octets, MAC source de 6 octets, EtherType de 2 octets, données de 46 à 1500 octets, FCS de 4 octets. Les deux adresses MAC et l'EtherType forment l'en-tête de 14 octets ; préambule et SFD servent à la synchronisation et sont retirés par la carte réseau, si bien que les captures commencent à l'adresse MAC de destination.

Le préambule et le délimiteur de début de trame (SFD, Start Frame Delimiter) servent à synchroniser le récepteur ; les cartes réseau les retirent, et les captures ne les montrent jamais. L’adresse MAC de destination vient en premier, pour qu’un équipement puisse décider du sort de la trame dès les premiers octets reçus. L’adresse MAC source suit. Le champ EtherType indique ce que transportent les données : 0x0800 pour IPv4, 0x86DD pour IPv6, 0x0806 pour ARP (Address Resolution Protocol), 0x8100 pour une étiquette de VLAN 802.1Q, 0x88CC pour LLDP (Link Layer Discovery Protocol). Une valeur inférieure ou égale à 1500 n’est pas un type mais une longueur : la trame suit alors le format 802.3 d’origine, avec un en-tête LLC (Logical Link Control, IEEE 802.2) qui désigne le protocole transporté, format encore utilisé par l’arbre couvrant.

Les données occupent entre 46 et 1500 octets ; si la charge est plus courte, la carte complète par du bourrage, pour respecter la taille minimale de trame de 64 octets (hors préambule). La FCS (Frame Check Sequence) contient un CRC (Cyclic Redundancy Check) de 32 bits calculé sur la trame. Un récepteur qui trouve une FCS incorrecte jette la trame sans prévenir personne ; seul le compteur d’erreurs de l’interface s’en souvient.

Une adresse MAC (Media Access Control) compte 48 bits, écrits en six octets hexadécimaux : 3c:52:82:aa:10:01. Les trois premiers octets forment l’OUI (Organizationally Unique Identifier), attribué par l’IEEE à un fabricant ; les trois suivants sont numérotés par ce fabricant. Deux bits du premier octet ont un sens particulier. Le bit de poids faible distingue une adresse individuelle (0) d’une adresse de groupe (1). Le bit suivant distingue une adresse attribuée par le fabricant (0) d’une adresse administrée localement (1), comme celles que génèrent les systèmes récents pour masquer l’identité d’un téléphone sur les réseaux Wi-Fi.

L’adresse ff:ff:ff:ff:ff:ff est la diffusion (broadcast). Les adresses commençant par 01:00:5e portent la multidiffusion IPv4, celles commençant par 33:33 la multidiffusion IPv6. Une adresse MAC n’a de sens que sur le segment local : elle disparaît au premier routeur, qui réécrit les adresses de la trame pour le lien suivant. Elle se modifie aussi en une commande, ce qui en fait un identifiant commode et une preuve d’identité médiocre.

La MTU (Maximum Transmission Unit) d’Ethernet est de 1500 octets de données, soit 1518 octets de trame, 1522 avec une étiquette 802.1Q. Les jumbo frames portent la MTU à environ 9000 octets, ce qui réduit le nombre de trames et la charge de traitement pour les gros transferts, notamment vers le stockage. Elles ne sont pas normalisées par l’IEEE et chaque constructeur fixe sa limite exacte. Surtout, tout le chemin doit les accepter : une interface de commutateur restée à 1500 jettera les trames de 9000 octets, avec pour seul indice des compteurs de trames géantes.

Le premier Ethernet partageait un même câble entre toutes les stations. Deux émissions simultanées provoquaient une collision, détectée par le mécanisme CSMA/CD (Carrier Sense Multiple Access with Collision Detection) : écouter avant d’émettre, détecter la collision, attendre un délai aléatoire, recommencer. L’ensemble des stations susceptibles d’entrer en collision forme un domaine de collision ; un concentrateur (hub) répète tout sur tous ses ports et n’en crée qu’un.

Le commutateur (switch) donne à chaque port son propre domaine de collision et, en full-duplex, supprime les collisions : chaque sens de transmission a ses paires ou sa fibre. CSMA/CD n’est plus qu’un souvenir dans les liens modernes. Le domaine de diffusion, lui, subsiste : une trame de diffusion reçue par un commutateur est recopiée sur tous ses ports, et ceux de tous les commutateurs reliés, jusqu’au premier routeur.

Un commutateur maintient une table MAC (ou table de transmission, CAM sur certains équipements) qui associe des adresses MAC à des ports. Son algorithme tient en quatre verbes :

  1. Apprendre (learning) : à chaque trame reçue, il note que l’adresse MAC source se trouve derrière le port de réception.
  2. Transmettre (forwarding) : si l’adresse de destination figure dans la table, il envoie la trame sur ce seul port, et la jette si c’est le port d’arrivée.
  3. Inonder (flooding) : si l’adresse de destination est inconnue, de diffusion ou de multidiffusion non gérée, il recopie la trame sur tous les ports sauf celui d’arrivée.
  4. Oublier (aging) : une entrée qui n’a pas été rafraîchie depuis un délai, 300 secondes par défaut selon IEEE 802.1D, est supprimée.

Décision d'un commutateur pour chaque trame reçue. 1, apprendre : l'adresse MAC source est notée derrière le port de réception. Puis la question : la destination est-elle présente dans la table MAC ? Si oui, 2, transmettre sur ce seul port, ou jeter si c'est le port d'arrivée. Si non, parce qu'elle est inconnue, de diffusion ou de multidiffusion non gérée, 3, inonder : recopier sur tous les ports sauf celui d'arrivée. 4, oublier, en continu : une entrée non rafraîchie depuis 300 secondes, valeur par défaut d'IEEE 802.1D, est supprimée.

Il en résulte quatre types de trafic. L’unicast connu va vers un seul port. La diffusion va partout. La multidiffusion va partout, sauf si le commutateur écoute les inscriptions des hôtes (IGMP snooping) pour ne l’envoyer qu’aux ports intéressés. L’unicast inconnu (unknown unicast), adressé à une machine que le commutateur n’a pas encore entendue, est inondé comme une diffusion : un poste silencieux attire ainsi vers tous les ports le trafic qui lui est destiné.

Un réseau local sans découpage cumule trois défauts. La diffusion croît avec le nombre de machines : requêtes ARP, annonces de découverte, DHCP, protocoles bavards des imprimantes et des systèmes d’exploitation. Toute machine voit cette diffusion et peut y répondre, ce qui ouvre la porte à l’usurpation ARP décrite dans Résolution locale et ICMP. Enfin, une boucle de câblage crée une tempête de diffusion qui paralyse tout le segment, d’où les protocoles d’arbre couvrant.

L’attaque la plus simple contre un commutateur est le MAC flooding : un outil comme macof émet des dizaines de milliers de trames avec des adresses source aléatoires. La table, de taille finie, se remplit ; le commutateur ne peut plus apprendre les adresses légitimes et inonde leur trafic sur tous les ports. L’attaquant n’a plus qu’à écouter. La parade est la sécurité de port (port security), qui limite le nombre d’adresses apprises par port, complétée par l’authentification 802.1X. Le découpage en VLAN, traité dans VLAN, trunks et boucles, réduit le domaine de diffusion à des ensembles cohérents.

En entreprise, Ethernet relie postes, téléphones, bornes Wi-Fi et imprimantes, souvent avec alimentation électrique par le câble. Dans les centres de données, il relie des serveurs à 25 ou 100 Gbit/s dans des topologies à deux niveaux, feuilles et épines (leaf-spine), où chaque commutateur d’accès est relié à tous les commutateurs de cœur. Chez les opérateurs, Carrier Ethernet transporte des services de couche 2 entre sites distants, de sorte qu’un client voie deux agences comme si elles partageaient le même commutateur.

Le stockage en réseau (SAN, Storage Area Network) a longtemps reposé sur Fibre Channel, technologie distincte. Ethernet l’a rejoint de deux manières : iSCSI, qui transporte des commandes de stockage sur TCP/IP, et FCoE (Fibre Channel over Ethernet), qui encapsule les trames Fibre Channel directement dans Ethernet. FCoE exige un Ethernet sans perte, obtenu par les extensions DCB (Data Center Bridging), dont le contrôle de flux par priorité (IEEE 802.1Qbb). FCoE est resté une solution de niche ; iSCSI et, plus récemment, NVMe sur TCP sont nettement plus répandus.

Token Ring (IEEE 802.5) faisait circuler un jeton qui autorisait une seule station à émettre à la fois. FDDI (Fiber Distributed Data Interface), normalisé par l’ANSI (American National Standards Institute), offrait 100 Mbit/s sur un double anneau de fibre tolérant à une coupure. Les deux ont disparu des réseaux en service, mais leur logique déterministe se retrouve dans des réseaux industriels. TRILL (Transparent Interconnection of Lots of Links, RFC 6325, 2011) proposait de remplacer l’arbre couvrant par un routage de niveau 2 qui utilise tous les liens. Il a été peu déployé, supplanté par les architectures en feuilles et épines et par les overlays.

Le VXLAN (Virtual eXtensible LAN, RFC 7348) transporte des trames Ethernet dans des datagrammes UDP (port 4789) au-dessus d’un réseau IP routé. Son identifiant de réseau sur 24 bits autorise environ 16 millions de segments, contre 4094 VLAN utilisables. Il ajoute 50 octets d’encapsulation sur IPv4, ce qui impose une MTU supérieure à 1500 sur le réseau de transport. Ethernet devient alors un service virtuel posé sur IP, lui-même posé sur Ethernet : la récursion est complète, et le dépannage s’en ressent. La suite figure dans Virtualisation réseau et NFV.

Une requête ARP capturée apparaît ainsi :

Ethernet II, Src: 3c:52:82:aa:10:01, Dst: ff:ff:ff:ff:ff:ff
Type: ARP (0x0806)
Address Resolution Protocol (request)
Sender MAC address: 3c:52:82:aa:10:01
Sender IP address: 192.168.10.77
Target MAC address: 00:00:00:00:00:00
Target IP address: 192.168.10.1

La destination de diffusion, le type 0x0806 et l’adresse cible nulle racontent l’histoire entière : la machine .77 demande à tout le segment qui possède .1. Le filtre d’affichage eth.addr == 3c:52:82:aa:10:01 isole les trames d’une machine ; en ligne de commande, tcpdump -e affiche les adresses MAC que tcpdump masque par défaut.

Sur un commutateur Cisco, show mac address-table liste le VLAN, l’adresse, le type (dynamique ou statique) et le port. Sur un pont Linux, l’équivalent est :

$ bridge fdb show br br0
3c:52:82:aa:10:01 dev eth1 master br0
00:1b:21:3a:4f:02 dev eth2 master br0

Deux observations sont instructives : un port d’accès qui porte des dizaines d’adresses trahit un commutateur non géré branché derrière, ou une attaque ; une adresse qui migre sans cesse entre deux ports signale une boucle ou une usurpation.

Vider le cache de voisinage (ip neigh flush dev eth0), lancer une capture avec le filtre arp, puis ping -c 1 192.168.10.1. La capture montre la requête ARP en diffusion, la réponse en unicast, puis seulement le premier paquet ICMP. ip neigh montre alors l’entrée en état REACHABLE. Recommencer en visant une adresse inexistante du segment : les requêtes ARP se répètent sans réponse, et ping signale l’hôte injoignable sans qu’un seul paquet IP soit parti.

Le premier piège est de croire qu’un commutateur empêche toute écoute. Il limite l’écoute passive, pas celle d’un attaquant actif : saturation de table, usurpation ARP, port miroir mal protégé suffisent à voir le trafic d’autrui.

Le deuxième piège est de confondre MAC et IP. L’adresse MAC désigne une interface sur un lien local, l’adresse IP une interface dans un réseau routé. Un filtrage par adresse MAC ne voit rien au-delà du premier routeur et se contourne en changeant d’adresse.

Le troisième piège est d’activer les jumbo frames sur une seule portion du chemin. Les petites trames passent, les gros transferts échouent ou ralentissent, et la panne ressemble à tout sauf à un problème de MTU.

Commutation Ethernet et routage IP : le commutateur décide d’après l’adresse MAC, dans un domaine de diffusion, sans modifier la trame. Le routeur décide d’après l’adresse IP, entre réseaux, et réécrit l’en-tête de liaison à chaque saut.

Domaine de collision et domaine de broadcast : le premier s’arrête au port du commutateur, le second au routeur ou à la frontière du VLAN.

Technologie historique et recommandation actuelle : Token Ring, FDDI et TRILL méritent d’être connus pour lire une documentation ancienne ou comprendre une conception ; aucun ne se recommande pour un nouveau déploiement.

Sans découpage du réseau local ni protection des ports du commutateur, chaque machine partage le même domaine de diffusion que toutes les autres : une seule machine compromise voit passer les requêtes diffusées de tout le segment et peut répondre à la place des machines légitimes. La propagation latérale n’a alors besoin d’aucun routage ni d’aucun pare-feu à franchir. Une écoute obtenue en saturant la table d’adresses ne laisse par ailleurs aucune trace sur les serveurs, qui n’ont rien vu d’anormal ; seuls les compteurs du commutateur en gardent l’indice, à condition que quelqu’un les relève.

Ethernet est la technologie la plus utilisée pour les réseaux locaux, du petit bureau au centre de données, avec des vitesses qui atteignent cent gigabits par seconde et au-delà. Les données y circulent dans des trames. Chaque trame contient l’adresse matérielle de la carte réseau destinataire, appelée adresse MAC, celle de l’émetteur, un champ qui indique le type de contenu transporté, les données elles-mêmes et un code de contrôle qui permet de repérer une trame abîmée. La taille maximale des données transportées est fixée ; certaines installations l’augmentent, mais tout le chemin doit alors l’accepter. Autrefois, les machines partageaient le même câble et leurs envois pouvaient entrer en collision. Aujourd’hui, un commutateur relie chaque machine sur son propre port. Il apprend quelle adresse se trouve derrière quel port en lisant l’adresse de l’émetteur des trames reçues, et il oublie les entrées trop anciennes. Quand il connaît la destination, il envoie la trame sur le seul bon port. Quand il ne la connaît pas, ou pour une diffusion à tous, il l’envoie sur tous les ports. Un attaquant peut remplir la table du commutateur avec de fausses adresses : débordé, le commutateur diffuse alors le trafic partout, et l’attaquant peut l’écouter. Un réseau local sans découpage laisse ainsi chaque machine voir une partie des échanges des autres.

À lire aussi

Pages voisines