Académique Documents
Professionnel Documents
Culture Documents
A B
Physique Physique
· · · 01001100101101 · · ·
Le problème, c’est que le support matériel utilisé par la couche physique (câble coaxial, paire de
cuivre torsadée, fibre optique, ondes radio...) n’est pas fiable à 100%. Certains bits reçus peuvent
être erronés (un 0 à la place d’un 1 ou inversement).
Le service rendu par la couche liaison de données est précisément de faire croire à la couche
réseau qu’elle utilise une couche physique parfaite.
A B
Réseau Réseau
Liaison de données Liaison de données
Physique Physique
Pour cela, la couche liaison de A ajoute au SDU2 transmis par la couche réseau un en-tête
(header ) et un en-queue (trailer ). Ceux-ci sont interprétés par la couche liaison de B ; une fois
que celle-ci est certaine qu’il n’y a pas d’erreurs, elle les supprime et passe les données à la couche
réseau de B. Celle-ci, à son tour, cherche le meilleur chemin pour atteindre le destinataire final,
et comprend qu’elle doit faire passer le message à un autre noeud (C) ; elle fait passer les données
à sa couche 2, etc.
La couche liaison utilise principalement deux méthodes :
— la détection/correction d’erreurs, qui fait l’objet de ce chapitre ;
— un “dialogue” entre émetteur et récepteur, visant à s’assurer que la transmission se passe
correctement : envoi d’accusé de réception, retransmission éventuelle de messages, etc.
24
4.2 Généralités sur les codes détecteurs/correcteurs d’erreurs
Un code détecteur/correcteur d’erreurs est un groupe de bits que l’émetteur ajoute au message
à transmettre. Ce groupe de bits, appelé FCS (Frame Check Sequence), dépend du message et
introduit de la redondance.
Définition 12 (Rendement d’un code) Si le message comporte m bits et le FCS a une lon-
gueur de k bits, alors on dit que le rendement du code est m+k
m
.
Le FCS doit permettre de détecter des erreurs parmi les bits reçus, et éventuellement les
localiser et les corriger. Mais s’il y a trop d’erreurs, la détection et la correction peuvent être
impossibles.
Exemple : Pour transmettre la chaîne de caractères IUT, on code chaque lettre en ASCII, puis
on ajoute le code de parité.
Lettre ASCII VRC pair VRC impair
I 1001001 11001001 01001001
U 1010101 01010101 11010101
T 1010100 11010100 01010100
Ce code permet de détecter les erreurs en nombre impair sans pouvoir corriger. Il est peu
efficace.
1001001
| {z } 1010101
| {z } 1010100
| {z } 1001000
| {z }
I U T LRC
Exemple : Pour transmettre la chaîne de caractères IUT, on code chaque lettre en VRC puis en
LRC :
VRC pair VRC impair
I 1001001 11001001 01001001
U 1010101 01010101 11010101
T 1010100 11010100 01010100
LRC 01001000 00110111
Pour envoyer le message avec un code de parité pair, on transmet :
11001001
| {z } 01010101
| {z } 11010100
| {z } 01001000
| {z }
I U T LRC
Ce code génère un mot de 7 bits pour un message de 4 bit, il est donc appelé code de Ham-
ming(7,4). Le récepteur, à chaque fois qu’il reçoit un mot de 7 bits, vérifie que ce mot fait bien
partie du code, c’est à dire de la troisième colonne du tableau ci-dessus. Si ce n’est pas le cas,
il en déduit qu’un bit (au moins) est erroné. L’erreur est ainsi détectée. . . comment procède le
récepteur pour corriger l’erreur ?
Le code de Hamming, pour corriger les erreurs, se base sur une mesure de dissimilarité entre
deux séquences de bits de même longueur, appelée distance de Hamming.
Le récepteur donc analyse le nombre de bits différents entre le code erroné reçu et chaque mot
du code, et choisit un mot valide ayant distance de Hamming minimale.
Imaginons par exemple que le mot envoyé soit 1110010. Le dernier bit est mal transmis et le
récepteur reçoit 1110011. Il s’aperçoit que ce mot ne fait pas partie du code, puis il parcourt le
tableau en calculant à chaque fois la distance entre le mot reçu et le mot du code. Il aboutit aux
résultats suivants :
Le récepteur en déduit que le message envoyé était 1110010, car la distance de Hamming est 1,
et donc corrige l’erreur.
Que se serait-il passé si deux mots du code s’étaient trouvés à une distance de 1 du code
1110011 ? Comment corriger l’erreur dans ce cas ? Avec le code ci-dessus, cette situation ne se
produit jamais, car chaque mot est séparé des autres par une distance de 3 au moins. On dit que
la distance du code est de 3.
Définition 14 (distance d’un code) Soit un code C comportant n séquences valides. La dis-
tance de Hamming du code C est la distance minimale séparant deux mots valides du code. Elle
est notée d(C).
Notons enfin qu’il n’est pas toujours possible de corriger la ou les erreurs Par exemple, si le
message envoyé est 1111111, mais deux erreurs le transforment en 1110011, le récepteur pensera
à nouveau que le message était 1110010. Dans ce cas, la correction sera mauvaise. Le code de
Hamming(7,4) est capable de corriger une erreur, mais pas deux. Plus en générale :
Exemple : Supposons que l’on souhaite transmettre des messages pouvant se coder comme l’une
des séquences du code :
C = {000000, 001110, 011011, 100011, 101101}.
d(C) = min(c1 ,c2 )2C 2 d(c1 , c2 ) = 3.
Avec ce code, on peut détecter au maximum d(C) 1 = 2 erreurs et en corriger k = d(C)
2
1
= 1.
Un code polynômial est basé sur l’utilisation d’un polynôme générateur G(x). Les polynômes
manipulés sont binaires : tous les coefficients sont 0 ou 1. Par conséquent, un polynôme générateur
de degré k s’écrit sous la forme :
où 8i 2 {0..k}, ai 2 {0, 1}
Soit M le message (séquence de bits) à protéger. Un polynôme M (x) lui est associé :
Codage
Le calcul du CRC s’effectue dans le corps Z/2Z, c’est-à-dire que :
• 1 1=0
• x x=0
• x= x
Soient :
— G(x) un polynôme générateur de degré k ;
— M (x) le polynôme associé au message M à transmettre.
La procédure de codage consiste à :
— calculer P (x) = M (x).xk . Ceci correspond à un décalage de k bits (vers la gauche) du
message M . La longueur du CRC calculé sera aussi de k bits. Cette opération de décalage
revient à préparer la place nécessaire pour ces k bits de CRC.
— diviser le polynôme P (x) par G(x). Soient Q(x) et R(x) les polynômes quotient et reste
ainsi obtenus :
P (x) = Q(x).G(x) R(x)
— le CRC est le reste R(x) ainsi calculé. On remarque que le reste est forcément au maximum
de degré k 1.
— le message effectivement transmis est associé au polynôme M 0 (x) = P (x) R(x). Il est par
conséquent composé du message initial M suivi de la séquence de k bits correspondant à
R(x).
Sur Ethernet, la taille des données à coder peut varier de 60 à un peu plus de 1500 octets, et
le polynome générateur utilisé est de degré 32. C’est un polynome générateur un peu particulier,
dit cyclique, de sorte que le code correcteur d’erreur est appelé CRC (Cyclic Redundancy Code).
Le calcul est fait juste avant l’encodage physique des bits, par un circuit situé sur la carte réseau.
Propriété 2
1. Un message M 0 transmis correctement a un polynôme M 0 (x) divisible par le polynôme
générateur G(x).
2. Si G(x) comporte au moins 2 termes, les erreurs simples sont détectables.
3. Si G(x) a un facteur irréductible de 3 termes, les erreurs doubles sont détectables.
4. Si G(x) est un multiple de x 1, les erreurs en nombre impair sont détectables.
Certains protocoles font le choix d’utiliser un code de faible rendement, mais de grande dis-
tance, capable de détecter et corriger des erreurs. Cette stratégie est dite FEC (Forward Error
Correction). Elle est adoptée sur les supports de stockage type CD et DVD.
Une autre stratégie consiste à utiliser un code de bon rendement, mais de faible distance, par
exemple une distance de 2. Un tel code peut détecter une seule erreur et est incapable d’effectuer
des corrections. Si une erreur est détectée, le récepteur demande à l’émetteur de retransmettre le
message (remarquons que cette procédure de correction par demande de retransmission ne peut
pas se passer d’un code détecteur d’erreurs). Cette stratégie est dite ARQ (Automatic Repeat
Request) et constitue un bon choix si les erreurs sont peu fréquentes. La stratégie ARQ est utilisée
dans la plupart des réseaux informatiques (LAN et WAN).