Canal ouvert Faites défiler — tout est manipulable

Transmission numérique · détecter et corriger les erreurs

Un bit s'est perdu
en route.

Sur un câble, une fibre ou une onde radio, un 0 peut arriver en 1. Le récepteur n'a aucun moyen de le deviner : pour lui, un bit faux ressemble exactement à un bit juste. Sauf si on a prévu le coup.

Démo 00 · le canal, sans aucune protection à l'arrêt
Émetteur — l'octet qu'on veut envoyer
········
Récepteur — l'octet qui arrive vraiment
TEB ≈ 1,8 %
0octets envoyés
0octets abîmés
0bits faux
0erreurs repérées
Le compteur « erreurs repérées » restera à 0 tout du long. Sans redondance, le récepteur accepte tout ce qu'il reçoit, y compris les bêtises. C'est exactement le problème que les dix sections suivantes résolvent.

00

Pourquoi ça casse

Un bit, physiquement, ce n'est pas un chiffre : c'est une tension, une impulsion lumineuse ou une onde. Le récepteur mesure et tranche : « au-dessus du seuil → 1, en dessous → 0 ». Le bruit électromagnétique, l'atténuation sur la distance, une soudure moyenne ou un micro-ondes voisin peuvent pousser une mesure du mauvais côté du seuil. Le bit bascule.

On mesure ça avec le TEB (taux d'erreur binaire, BER en anglais) : le nombre de bits faux divisé par le nombre de bits envoyés.

SupportTEB typiqueCe que ça donne à 1 Gbit/s
Fibre optique10⁻¹²1 bit faux toutes les ~17 minutes
Paire de cuivre (Ethernet)10⁻⁹ … 10⁻⁶de 1 à 1 000 bits faux par seconde
Wi-Fi / radio mobile10⁻⁵ … 10⁻³jusqu'à un million de bits faux par seconde
Liaison satellite lointaine10⁻² et pireimpraticable sans correction

Le piège à comprendre en premier

Un TEB de 10⁻⁶ a l'air minuscule. Mais un fichier de 10 Mo, c'est 80 millions de bits : statistiquement 80 bits faux. Sur un exécutable ou un virement bancaire, un seul suffit à tout casser. Le silence n'est pas un signe de bonne santé : par défaut, une erreur passe simplement inaperçue.

01

L'idée de départ : la redondance

Au téléphone, quand la ligne est mauvaise, vous ne dites pas « B », vous dites « B comme Bravo ». « Bravo » n'apporte aucune information nouvelle : c'est du rembourrage volontaire. Mais si votre interlocuteur entend « Brovo », il sait tout de suite que quelque chose cloche — alors qu'un « D » reçu à la place d'un « B » aurait été avalé sans broncher.

Tout le contrôle d'erreurs tient dans cette phrase : on envoie plus de bits que nécessaire, choisis de façon à ce que la plupart des combinaisons soient impossibles. Si le récepteur reçoit une combinaison impossible, il sait qu'il y a eu un accident.

La méthode bête : tout répéter trois fois

Envoyer 1 sous la forme 111. Si le récepteur lit 101, il vote à la majorité et conclut 1. Ça marche, ça corrige même — mais ça coûte trois fois le débit. Inutilisable en pratique. Tout le reste de cette page consiste à obtenir le même service en ajoutant beaucoup moins de bits.

Le vocabulaire, une fois pour toutes

  • k — le nombre de bits utiles (votre message).
  • r — le nombre de bits de contrôle ajoutés par la machine.
  • n = k + r — la longueur totale émise. On parle d'un code (n, k).
  • Rendement R = k / n — la part de votre débit qui transporte vraiment de l'information. Répétition ×3 → R = 1/3. Bit de parité sur un octet → R = 7/8. CRC-32 sur une trame Ethernet → R ≈ 0,997.
  • Mot de code — une suite de n bits qui respecte les règles. Toutes les autres suites sont interdites, donc reconnaissables.

Deux ambitions différentes

Détecter

« Cette trame est fausse, jette-la et redemande-la. » Peu de bits ajoutés, très efficace — mais il faut un chemin de retour pour redemander. C'est la parité, le checksum, le CRC.

Corriger

« Le bit n°5 est faux, je le retourne moi-même. » Plus cher en bits, mais aucune retransmission nécessaire. Indispensable quand redemander est impossible : satellite, diffusion TV, QR code, disque dur. C'est Hamming, Reed-Solomon, LDPC.

02

Le bit de parité

Un seul bit ajouté. La protection la plus simple qui existe — et la plus facile à prendre en défaut.

La règle

On compte les 1 dans le message. Puis on ajoute un bit choisi pour que ce compte devienne pair (parité paire, la plus courante) ou impair (parité impaire).

  • 1011001 contient quatre 1 → déjà pair → on ajoute 0 → on émet 10110010.
  • 1011000 contient trois 1 → impair → on ajoute 1 → on émet 10110001.

À l'arrivée, le récepteur recompte les 1 sur les huit bits reçus. Si le total est pair, il accepte. S'il est impair, il sait qu'au moins un bit a basculé.

En une opération

Le bit de parité, c'est le XOR (ou exclusif) de tous les bits du message. Et vérifier, c'est faire le XOR de tous les bits reçus, bit de parité compris : le résultat doit valoir 0. Deux lignes de logique câblée, gratuit en matériel. D'où sa popularité historique (liaisons série, RS-232, mémoires ECC de première génération).

Démo 02 · parité paire sur 7 bits cliquez sur un bit pour le changer
D vos 7 bits de données P le bit de parité, calculé automatiquement
Après le canal — cliquez sur un bit reçu pour simuler une erreur

La faiblesse fatale

Deux erreurs se compensent : si un 0 devient 1 et qu'un 1 devient 0, le nombre total de 1 ne change pas et la parité reste bonne. Le récepteur accepte un message faux en toute confiance.

Bilan : le bit de parité détecte tout nombre impair d'erreurs (1, 3, 5…) et aucun nombre pair (2, 4, 6…). Il ne corrige jamais rien, puisqu'il dit « il y a un problème » sans jamais dire . Or les erreurs arrivent rarement seules : un parasite dure quelques microsecondes et abîme une rafale de bits voisins. C'est précisément le cas où la parité échoue.

03

La parité croisée : le premier code qui corrige

Rangez les bits en tableau, mettez une parité par ligne et une par colonne. L'intersection des deux alarmes vous donne l'adresse du coupable.

On empile plusieurs octets les uns sous les autres. Chaque ligne reçoit son bit de parité (c'est le VRC, Vertical Redundancy Check, la parité classique de la section précédente). Puis on calcule une ligne supplémentaire en bas, où chaque bit est la parité de sa colonne (c'est le LRC, Longitudinal Redundancy Check).

Si un seul bit bascule, deux contrôles échouent : celui de sa ligne et celui de sa colonne. Le croisement des deux désigne une case unique — et il suffit de retourner le bit qui s'y trouve. On est passé de la détection à la correction, sans aucune retransmission.

Démo 03 · parité croisée, 4 lignes × 6 bits cliquez n'importe quel bit pour le casser
D données P parités calculées

Ses limites

  • 2 erreurs sur la même ligne → la parité de ligne redevient bonne, mais deux colonnes protestent. On sait qu'il y a un problème, on ne sait plus où. Détection oui, correction non.
  • 4 erreurs formant un rectangle (mêmes 2 lignes, mêmes 2 colonnes) → toutes les parités redeviennent bonnes. Invisible. C'est le motif d'erreur minimal que ce code ne voit pas.
  • Le coût grimpe : sur 4×6 bits utiles, on ajoute 4 + 6 + 1 = 11 bits. Rendement 24/35 ≈ 0,69. Cher pour une protection encore modeste.

C'est pour ça que le CRC (section 05) a remplacé cette technique partout où le débit compte.

04

La somme de contrôle

On ne raisonne plus bit par bit : on additionne les paquets d'octets et on envoie le total. Rapide en logiciel, et c'est tout l'intérêt.

La règle

On découpe le message en blocs de taille fixe (8 ou 16 bits), on les additionne, on garde le résultat modulo la taille du bloc (on jette les retenues qui débordent), et on envoie cette somme à la suite du message. Le récepteur refait l'addition et compare.

Variante universelle sur Internet : on transmet le complément de la somme. Le récepteur additionne tout, somme de contrôle comprise, et doit obtenir 0 (ou FF). Un seul test, pas de comparaison.

Démo 04 · somme modulo 256 sur 4 octets cliquez sur un octet reçu pour le modifier
Émission — 4 octets de données, puis la somme de contrôle
Réception — la somme est recalculée sur ce qui est arrivé

Deux angles morts célèbres

La compensation. Si un octet perd 5 et qu'un autre gagne 5, la somme ne bouge pas. Le message est faux, le contrôle est vert.

L'ordre. L'addition est commutative : A+B = B+A. Si deux blocs sont intervertis en route, la somme est identique. Le checksum est aveugle aux permutations.

C'est pourtant celui utilisé par IP, TCP et UDP — parce qu'il est très rapide en logiciel et qu'en dessous, la couche liaison (Ethernet, Wi-Fi) a déjà fait le vrai travail avec un CRC. Le checksum n'est qu'un filet de sécurité de second rang, contre les corruptions survenues dans la mémoire des routeurs, pas sur le câble.

05

Le CRC : la division qui protège tout Internet

Le contrôle de redondance cyclique. C'est lui qui protège chaque trame Ethernet, chaque paquet Wi-Fi, chaque secteur de disque dur, chaque fichier ZIP. Il a l'air compliqué : en réalité c'est une division posée, avec une seule bizarrerie.

L'idée, sans mathématiques

Vous connaissez le principe du reste d'une division. Prenez 1 234 567 et divisez par 97 : il reste 51. Ce 51 est une empreinte du nombre de départ. Changez n'importe quel chiffre de 1 234 567 et le reste changera presque à coup sûr.

Le CRC fait exactement ça avec votre message : il le traite comme un immense nombre binaire, le divise par un diviseur fixe appelé polynôme générateur, et envoie le reste à la suite du message. Le récepteur refait la division sur tout ce qu'il a reçu : si le reste vaut zéro, la trame est intacte.

La seule bizarrerie : on soustrait avec des XOR

Dans une division ordinaire, les soustractions ont des retenues qui se propagent — lent et pénible à câbler. Le CRC utilise donc une arithmétique sans retenue : la soustraction devient un simple XOR bit à bit (1⊕1=0, 1⊕0=1, 0⊕0=0). C'est tout. Le reste de la mécanique est la division posée que vous avez apprise à l'école primaire.

Le mot « polynôme » sert juste à nommer les bits : 1011 se lit x³ + x + 1 (un 1 en position 3, 1, 0). C'est une notation, pas un calcul supplémentaire.

La recette en quatre gestes

  • Le générateur a r + 1 bits (par exemple 1011, donc r = 3). Il commence et finit toujours par 1.
  • On colle r zéros à la fin du message : c'est la place réservée au futur CRC.
  • On divise ce tout par le générateur, en XOR. Le reste fait exactement r bits.
  • On remplace les r zéros par ce reste, et on émet. Le message émis est alors exactement divisible par le générateur — c'est ce que le récepteur va vérifier.
Démo 05 · division CRC, étape par étape cliquez sur un bit du message pour le changer
Message (8 bits)
La division posée — chaque ligne est un XOR avec le générateur

    
Trame émise = message + reste (le CRC)
Trame reçue — cliquez sur un bit pour l'abîmer

Pourquoi il est si difficile à tromper

Avec un générateur bien choisi (ils sont normalisés, pas improvisés), un CRC de r bits garantit :

  • toutes les erreurs simples et doubles détectées ;
  • tout nombre impair d'erreurs détecté, si le générateur est divisible par x+1 ;
  • toutes les rafales de r bits ou moins détectées — c'est sa grande force, car les parasites réels arrivent en rafales ;
  • les rafales plus longues passent au travers avec une probabilité d'environ 1/2ʳ. Pour le CRC-32 d'Ethernet : environ une chance sur 4 milliards.

Ce que le CRC ne fait pas

Il ne corrige rien — il dit oui ou non. Une trame Ethernet dont le CRC est faux est purement et simplement jetée ; c'est à TCP, au-dessus, de s'apercevoir qu'elle manque et de la redemander.

Et il ne protège pas contre un attaquant : qui modifie le message peut recalculer le CRC. Contre la malveillance il faut une signature cryptographique (HMAC), pas un CRC. Le CRC protège contre le hasard, pas contre quelqu'un.

06

La distance de Hamming : la théorie qui explique tout le reste

Une seule notion permet de prédire, pour n'importe quel code, combien d'erreurs il détecte et combien il en corrige.

La distance de Hamming entre deux mots binaires, c'est le nombre de positions où ils diffèrent. Entre 10110 et 10011 : trois positions changent, la distance vaut 3. (Techniquement : le nombre de 1 dans leur XOR.)

Ce qui compte pour un code, c'est sa distance minimale d : la plus petite distance entre deux mots de code valides. C'est la mesure de son « écartement ». Plus les mots valides sont éloignés les uns des autres, plus il faut d'erreurs pour transformer l'un en l'autre — donc plus le code est robuste.

Démo 06 · distance entre deux mots cliquez les bits pour les changer
Mot A
Mot B
A ⊕ B — les positions qui diffèrent

Les deux formules à retenir

  • Pour détecter jusqu'à e erreurs, il faut d ≥ e + 1.
    Intuition : tant que les erreurs ne suffisent pas à atteindre un autre mot valide, on atterrit sur un mot interdit — donc repérable.
  • Pour corriger jusqu'à c erreurs, il faut d ≥ 2c + 1.
    Intuition : il ne suffit pas de savoir qu'on est perdu, il faut que le mot valide le plus proche soit sans ambiguïté le bon. D'où le facteur deux.
Coded minimaleDétecteCorrige
Aucun code (n = k)1rienrien
Bit de parité21 erreurrien
Parité croisée 2D43 erreurs1 erreur
Hamming (7,4)32 erreurs1 erreur
Répétition ×332 erreurs1 erreur
Répétition ×554 erreurs2 erreurs

Regardez les deux dernières lignes du tableau contre Hamming (7,4) : même distance 3, mêmes capacités — mais la répétition ×3 coûte un rendement de 1/3 quand Hamming atteint 4/7. À protection égale, le bon code est celui qui ajoute le moins de bits. C'est tout le métier.

07

Le code de Hamming : quand la machine répare seule

Trois bits de contrôle bien placés, et le récepteur ne se contente plus de dire « c'est faux » : il annonce l'adresse exacte du bit fautif.

L'astuce des puissances de deux

On numérote les positions de 1 à 7 (attention : on commence à 1, pas à 0). Les positions qui sont des puissances de deux — 1, 2, 4 — accueillent les bits de contrôle. Les autres — 3, 5, 6, 7 — portent vos données.

Chaque bit de contrôle surveille les positions dont le numéro écrit en binaire contient son propre poids :

  • P1 (position 1 = 001) surveille toutes les positions dont le binaire finit par 1 → 1, 3, 5, 7
  • P2 (position 2 = 010) surveille celles dont le bit du milieu vaut 1 → 2, 3, 6, 7
  • P4 (position 4 = 100) surveille celles dont le bit de poids fort vaut 1 → 4, 5, 6, 7

Chaque bit de contrôle est réglé pour que son groupe soit de parité paire. Et voici la magie : à la réception, on recalcule les trois parités. Les trois résultats, lus comme un nombre binaire P4 P2 P1, forment le syndrome — et ce nombre est le numéro de la position fautive. 000 signifie « tout va bien », 101 signifie « le bit n°5 est faux ».

Ce n'est pas un hasard : si le bit n°5 (101) bascule, il fait échouer exactement les contrôles qui le surveillent, c'est-à-dire P1 et P4 — donc le syndrome vaut 101. Chaque position a une signature unique, parce que chaque nombre a une écriture binaire unique.

Démo 07 · Hamming (7,4) avec correction automatique cliquez un bit reçu pour le casser
Vos 4 bits de données
Mot de code émis — positions 1 à 7
Mot reçu — cliquez pour abîmer
Les trois contrôles de parité

Le piège des deux erreurs

Avec une distance minimale de 3, Hamming (7,4) corrige une erreur. Avec deux erreurs, le syndrome n'est pas nul — il croit donc avoir trouvé un coupable — mais il désigne une troisième position innocente et la retourne. Résultat : trois bits faux au lieu de deux. Le code a aggravé la situation. Essayez le bouton « Casser 2 bits » dans la démo.

C'est pour ça qu'on ajoute souvent un huitième bit de parité globale : on obtient le code SECDED (Single Error Correction, Double Error Detection), distance 4, qui corrige une erreur et sait reconnaître qu'il y en a deux sans se tromper de victime. C'est ce qu'il y a dans la mémoire ECC de tous les serveurs.

08

La courbe : ce qu'on regarde vraiment pour juger un code

Le graphique qu'on vous montre systématiquement en cours. Deux axes, deux courbes, et un chiffre qui résume tout : le gain de codage.

Lire les axes

  • En abscisse : Eb/N0, prononcé « E-b sur N-zéro », en décibels. C'est l'énergie dépensée par bit divisée par le bruit. Traduisez simplement : la qualité de la liaison. Vers la droite = plus de puissance, antenne plus proche, câble plus court.
  • En ordonnée : le TEB, le taux d'erreur binaire. Échelle logarithmique — chaque graduation vaut dix fois mieux que la précédente. Plus bas = meilleur.
  • La courbe descend en piqué : c'est normal. Gagner 1 ou 2 dB de qualité peut diviser le taux d'erreur par cent.
Démo 08 · TEB en fonction de la qualité de liaison déplacez le curseur

Les trois choses à voir sur ce graphique

Le gain de codage

L'écart horizontal entre les deux courbes, à un TEB donné. Il se lit en décibels et signifie : « grâce au code, j'obtiens la même qualité avec tant de dB de puissance en moins ». Sur une sonde spatiale, chaque dB gagné, c'est des kilos d'antenne et de panneaux solaires économisés.

Le point de croisement

À gauche, la courbe codée est au-dessus de l'autre : le code empire les choses. Normal : en ajoutant des bits de contrôle, on répartit la même énergie sur plus de bits, chacun devient plus fragile — et si le canal est trop mauvais, le décodeur se trompe de correction. Un code n'est jamais gratuit.

Troisième chose : le rendement. La courbe ne dit pas tout. Hamming (7,4) a un rendement de 4/7 : pour 7 bits sur le câble, seuls 4 vous servent. Un code moderne (LDPC, turbo-code) obtient un bien meilleur gain avec un rendement de 0,9. C'est le compromis permanent : puissance, débit utile, complexité de calcul — on n'optimise jamais les trois à la fois.

09

Une erreur est détectée. Et maintenant ?

Deux stratégies, deux mondes. Soit on redemande, soit on répare sur place.

Stratégie ARQ — redemander

Automatic Repeat reQuest. Le récepteur jette la trame fausse et l'émetteur la renvoie. Simple, très peu de bits ajoutés, mais il faut un canal de retour et il faut accepter d'attendre. Trois variantes, de la plus naïve à la plus efficace :

VarianteFonctionnementCoût d'une erreurOù on la trouve
Stop-and-Wait
envoyer et attendre
Une trame, puis on attend l'accusé de réception avant d'envoyer la suivante. Faible — on ne renvoie qu'une trame. Mais le débit s'effondre sur les longues distances : on passe son temps à attendre. Liaisons courtes et lentes, protocoles embarqués.
Go-Back-N
retour en arrière
On envoie N trames d'affilée. En cas d'erreur sur l'une, on renvoie celle-là et toutes les suivantes. Élevé — on regâche du travail déjà fait. Mais le récepteur reste très simple : aucune mémoire de réordonnancement. HDLC, anciens modems.
Rejet sélectif
Selective Repeat
On ne renvoie que la trame fautive. Le récepteur garde les suivantes en mémoire tampon et les remet dans l'ordre. Minimal. En échange, il faut de la mémoire et de la logique des deux côtés. TCP moderne (SACK), Wi-Fi (Block ACK).

Stratégie FEC — réparer sur place

Forward Error Correction. On envoie assez de redondance pour que le récepteur répare seul, sans jamais rien redemander. Plus coûteux en débit, mais c'est la seule option quand redemander est impossible ou absurde :

  • La diffusion — un émetteur TNT ne peut pas retransmettre pour un seul téléviseur sur un million.
  • La distance — un aller-retour vers une sonde spatiale prend des heures. Voyager utilisait un code de Reed-Solomon concaténé.
  • Le stockage — un CD rayé ou un secteur de SSD usé ne peut « redemander » à personne. Reed-Solomon, encore.
  • Le temps réel — en voix ou vidéo en direct, une trame retransmise arriverait trop tard pour servir.
  • Le QR code — Reed-Solomon lui permet de rester lisible avec jusqu'à 30 % de la surface abîmée. C'est pour ça qu'on peut coller un logo au milieu.

En pratique, les systèmes modernes font les deux : le Wi-Fi et la 5G corrigent en FEC ce qu'ils peuvent, protègent le résultat par un CRC, et retransmettent en ARQ ce qui reste cassé. C'est ce qu'on appelle l'hybrid ARQ.

10

Récapitulatif

La seule chose à emporter : chaque méthode achète de la sécurité avec des bits, et on choisit selon ce qu'on peut se permettre de perdre en débit et selon la possibilité ou non de retransmettre.

MéthodeBits ajoutésDétecteCorrigeAveugle à…Utilisée par
Bit de parité1 tout nombre impair d'erreurs non tout nombre pair d'erreurs RS-232, mémoires anciennes
Parité croiséelignes + colonnes 1 à 3 erreurs 1 erreur 4 erreurs en rectangle anciens protocoles, bandes magnétiques
Checksum8 ou 16 la plupart des erreurs simples non compensations, permutations d'octets IP, TCP, UDP
CRC8 à 32 toutes rafales ≤ r bits, tout nombre impair non ~1 cas sur 2ʳ, et un attaquant Ethernet, Wi-Fi, USB, ZIP, disques
Hamming (7,4)3 pour 4 2 erreurs 1 erreur 3 erreurs ou plus base théorique, mémoires ECC (variante SECDED)
Reed-Solomonvariable rafales longues rafales entières au-delà de sa capacité prévue QR codes, CD/DVD, TNT, spatial
LDPC / turbo-codesvariable, rendement élevé correction très proche de la limite théorique de Shannon coût de calcul important 5G, Wi-Fi 6, satellite DVB-S2

Les cinq phrases qui résument la page

  • Un canal est toujours bruité ; sans redondance, une erreur est invisible.
  • Contrôler, c'est ajouter des bits pour rendre la plupart des combinaisons impossibles.
  • La distance minimale du code dit tout : détecter d−1 erreurs, en corriger (d−1)/2.
  • Détecter coûte peu mais impose de retransmettre ; corriger coûte des bits mais rend autonome.
  • La courbe TEB / Eb-N0 arbitre : le gain de codage se paie en rendement, et sur un très mauvais canal un code peut faire pire que rien.

11

Vérifiez que c'est passé

Six questions. Cliquez une réponse ; l'explication apparaît dans tous les cas.