Vous êtes sur la page 1sur 15

Chapitre 04 : La couche liaison de données

La couche liaison de données correspond à la deuxième couche du modèle de référence OSI.


Elle offre des services à la couche réseau en utilisant les services de la couche physique et en
rajoutant des fonctionnalités de gestion de liaison de données.

La liaison de données relie deux équipements adjacents connectés au même support physique
sans nœuds intermédiaires entre eux. Ils peuvent être deux ordinateurs, un ordinateur et un
routeur, deux routeurs, etc.

La liaison peut être soit bipoint soit multipoint. Dans le cas d'une liaison multipoint, un
problème supplémentaire qu'il faut prendre en compte concerne l'accès concurrent au support.
La gestion de ce type de liaison est à la base des protocoles des réseaux à diffusion qu'on
rencontre dans les réseaux locaux (LAN), radio et satellitaires. Les réseaux longue distance
(WAN) maillés sont composés de liaisons bipoints. C’est les liaisons bipoints qui seront
traitées dans ce chapitre.

1. Types de services offerts à la couche réseau


La couche liaison de données offre trois types de services à la couche réseau :

• Service sans connexion et sans acquittement : La machine émettrice envoie les trames
sans attendre d’acquittement de la part du destinataire. Bien évidement, aucune
connexion n’est établie au préalable. Ce type de service est utilisé quand le support
physique est très fiable, c'est-à-dire générant très peu d’erreurs. Néanmoins,
lorsqu’une erreur arrive, le recouvrement est assuré par une couche supérieure. Ce
service est utilisé aussi quand le trafic envoyé sur la liaison est isochrone avec de
fortes contraintes temporelles (vidéo ou audio).
• Service sans connexion et avec acquittement : Ce type de service est plus fiable que le
précédent mais ne nécessite pas d’établissement de connexion. Les trames sont
acquittées, donc l’émetteur sait quelles sont les trames qui sont arrivées correctement
chez le destinataire. Cependant, ce service ne remédie pas au problème de duplication
des trames ni de celui du désordre à l’arrivée des trames.
• Service avec connexion : Ce service offre un transfert de données fiable entre deux
systèmes, c'est-à-dire une livraison garantie de toutes les trames, dans l’ordre de
transmission, sans perte et sans duplication.

2. Principales fonctions de la couche liaison de données


2.1. Délimitation des trames

La couche liaison utilise les services offerts par la couche physique qui transmet les données
envoyées entre deux machines comme une succession continue de bits sans préciser le début
et la fin d’une trame. La délimitation des trames revient à la charge de la couche liaison de
données qui doit trouver les moyens pour le faire. Différentes techniques sont utilisées, les
deux plus importantes sont :

1
1. Utilisation de fanions de début et de fin de trame avec des bits de transparences. Un
fanion est une séquence particulière de bits qui marque aussi bien le début que la fin
d’une trame. Le fanion employé par le protocole HDLC est ‘0111 1110’. L’utilisation
de ce fanion doit être faite avec prudence, car il se peut que la séquence binaire
représentant le fanion se trouve dans les données à transmettre ce qui peut induire en
erreur la machine destinataire qui va croire que la fin de la trame est déjà arrivée. Pour
éviter ce type de problème, l’émetteur va insérer dans les données à transmettre un bit
à 0 chaque fois qu’il trouve une suite contiguë de 1. Ce bit à 0 s’appelle un bit de
transparence. Les bits de transparence sont éliminés par le récepteur lors de leurs
arrivées. La figure 0 donne un exemple d’une suite binaire, de 48 bits, à transmettre.
Cette suite binaire est mise entre deux fanions et trois bits de transparence sont insérés
(figure 1).

Figure 0 : suite binaire à envoyer par l’émetteur

Figure 1 : trame à envoyer effectivement

2. Longueur de la trame : La deuxième méthode utilise un champ de l’en-tête de la trame


qui indique le nombre d’octets qu’elle contient. Ce champ est lu par le récepteur pour
connaître combien d’octets font partie de la trame. Cependant, une erreur de
transmission qui affecte ce champ perturbe la bonne réception de la trame et des
trames suivantes. C’est pourquoi cette méthode est généralement utilisée
conjointement avec la première pour rendre la fonction de délimitation des trames plus
fiable.

2.2. Contrôle d'erreurs

La transmission fiable est assurée par l'utilisation conjointe de codes détecteurs ou correcteurs
d'erreurs et de mécanismes d'acquittement et de retransmission en cas d'erreur. Un
acquittement est une trame particulière, dite aussi trame de contrôle, qui véhicule une
information sur la livraison d’une trame de données. Un acquittement positif exprime le fait
que la trame de données a été bien reçue du côté récepteur. Tandis qu’un acquittement négatif
exprime le contraire. Dans le cas ou l’émetteur est averti, à l’aide d’un acquittement négatif,
par le récepteur qu’une trame de données n’a pas été correctement reçu, alors l’émetteur
retransmet la trame une autre fois.

La retransmission se produit non seulement en cas de réception d'acquittement négatif, mais


aussi en cas de non réception d'acquittement après un délai préétabli. En effet, une trame peut
se perdre ou c’est l’acquittement qui se perd. Dans ces cas, l’émetteur risque d’attendre
indéfiniment une réponse du récepteur qui ne va jamais arriver. Pour cela, l’émetteur
déclenche un temporisateur avec une valeur temporelle estimée. Si le temporisateur expire

2
sans que l’émetteur ne reçoive une réponse du récepteur alors il retransmet la trame une autre
fois.

3. Contrôle de flux

Après l’émission d’une trame, l’émetteur se met en attente pour réceptionner l’acquittement
associé à la trame envoyée. Cette façon d’opérer est inefficace en transmission de données. En
effet, l’émetteur va passer la majeure partie de son temps en attente d’acquittements ce qui va
engendrer des débits très faibles sur la liaison même si la capacité de la ligne physique de
transmission est élevée. Pour remédier à cela, l’émetteur peut envoyer plusieurs trames, l’une
à la suite de l’autre, sans attendre d’acquittement. Un acquittement groupé positif peut être
envoyé par le récepteur. Néanmoins, il ne faut pas envoyer beaucoup trop de trames en même
temps au risque de submerger le récepteur qui faute de mémoire et de capacité de traitement
sera obligé de rejeter les trames en trop. Ceci génère la perte de trames.

Donc, pour augmenter le débit de la liaison tout en minimisant les pertes de trames, la couche
liaison de données utilise la fonction de contrôle de flux entre l’émetteur et le récepteur. Le
mécanisme le plus utilisé pour mettre en œuvre le contrôle de flux est la fenêtre à anticipation
qui sera présentée ultérieurement.

2.4. Numérotation des trames

Une fonction simple mais importante est la numérotation des trames. En effet, il est très utile
pour le bon fonctionnement de la couche liaison de données que les trames soient numérotées.
Le récepteur utilise les numéros des trames pour envoyer des acquittements. Il doit aussi
utiliser les numéros de trames pour les remettre dans l’ordre dans le cas ou ils arrivent
désordonner. En effet, l’ordonnancement des trames est primordial lorsque la couche liaison
de données offre un service orienté connexion à la couche réseau.

Les numéros des trames se trouvent dans un champ appartenant à l’en-tête d’une trame. Les
entités de liaison peuvent commencer à numéroter les trames à partir de n’importe quelle
valeur et pas nécessairement égale à 1.

Remarque : Pour la mise en oeuvre d'une façon efficace de ces fonctions, le service est
souvent orienté connexion. Dans le cas d'une liaison multipoint, il faut en plus de ces
fonctions, les fonctions d'accès au média. Ces fonctions d’accès au média ne sont pas traitées
dans ce module.

3. Contrôle d'erreurs
3.1. Caractérisation des erreurs
Comme nous l’avons vu précédemment, les lignes de transmission ne sont pas parfaites et des
erreurs peuvent se produire lors des transmissions d’informations binaires. En effet, au niveau
physique, les signaux support de ces informations sont perturbés et altérés par des bruits
additifs. A la réception, une erreur d'interprétation peut se produire: l'état du signal
représentant le bit ‘1’ est interprété comme si c'était le bit ‘0’ et vice versa.

3
Ces erreurs peuvent être isolées (un bit erroné dans une longue séquence de bits corrects) ou
groupés (un nombre important de bits erronés regroupés dans une courte séquence).

Le taux d'erreurs de transmission est de l'ordre de 10-5 sur une ligne téléphonique, de 10-7 à
10-8 sur un coaxial et de 10-10 à 10-12 sur une fibre optique. Ces chiffres montrent qu’avec la
fibre optique, la fiabilité des transmissions devient très importante.

3.2. Comment détecter et corriger les erreurs ?


Pour détecter les erreurs et éventuellement les corriger, plusieurs techniques peuvent être
employées. Elles reposent sur l'utilisation de codes correcteurs ou codes détecteurs d'erreurs
qui chacun ajoute à l’information binaire à envoyer des bits de redondance, appelés aussi des
bits de contrôle. Le récepteur se sert de ces bits de contrôle pour déterminer si une erreur s'est
produite et pour la corriger si la technique employée le permet.

Le recouvrement des erreurs se fait généralement par retransmission de la trame erronée.


C’est l’émetteur qui renvoi la trame lorsqu’il reçoit un accusé de réception négatif de la part
du récepteur ou qu’aucun acquittement n’arrive du récepteur après l’écoulement d’un laps de
temps assez long.

Pour que la retransmission des trames se fasse dans de bonnes conditions, l’émetteur est
amené à garder une copie de chaque trame envoyée et qu’à l’émission de chaque trame, un
temporisateur est armé, contenant une valeur maximale estimée du temps qu’il doit attendre
pour l’arrivée d’un acquittement (positif ou négatif).

Lorsqu’un acquittement positif arrive à l’émetteur, le temporisateur est arrêté et la copie de la


trame est détruite. Par contre, si un acquittement négatif arrive, le temporisateur est réarmé,
éventuellement avec une nouvelle valeur maximale, différente de la précédente. La trame est
renvoyée une autre fois en utilisant la copie stockée dans la mémoire de l’émetteur.

Dans le cas où aucun acquittement n’arrive et que le temporisateur expire, c'est-à-dire le laps
de temps égal à la valeur maximale s’est écoulé, l’émetteur réarme le temporisateur et renvoi
la trame en utilisant la copie qu’il a gardée après la première émission.

Par ailleurs, l’émetteur est amené à numéroter les trames qu’il envoi pour que le récepteur
puisse les acquitter et aussi remédier au problème de doublons (plusieurs trames identiques).

3.3. Techniques basées sur la parité


Considérons le cas de la transmission de caractères et supposons que l'unité à protéger est le
caractère. Ce dernier est codé sur 7 bits ASCII. La parité ajoute à chaque caractère émis un bit
de parité de telle sorte que parmi les 8 bits émis le nombre de bits à 1 soit toujours pair. En
d’autres termes, l’ajout d’un bit de parité permet d'avoir la propriété suivante: "le nombre de
bits à 1 du caractère émis est pair". C'est ce qu'on appelle le bit de parité ou VRC (Vertical
Redundancy Checking). Bien sûr le raisonnement est le même dans le cas d'une parité
impaire.

La figure 2 donne la parité paire et la parité impaire de trois caractères (‘A’, ‘E’ et ‘V’) codés
en utilisant 7 bits. Le 8ème bit est utilisé pour mettre la valeur de la parité. Pour le caractère

4
‘A’, le codage initial sur 7 bits, avant émission, est égal à 1000001. Lors de l’émission, c’est
le bloc 01000001 qui est émis si on utilise une parité paire. À la réception, le récepteur calcule
le nombre de bits à 1 et dans le cas d'une parité paire si ce nombre de bits est pair on suppose
qu'il n'y a pas eu d'erreur. Sinon, on sait alors qu'il y a eu une erreur de transmission mais on
ne sait pas la localiser et il faut alors demander la réémission du caractère. La technique de
parité est simple à mettre en œuvre cependant elle ne permet pas de détecter un nombre pair
d’erreurs dans le même bloc de bits transmis, car dans ce cas la parité ne sera pas changée.

Cette méthode, ajoute un bit tous les 7 bits. Le rendement de la transmission est donc de 87,5
% (= 7/8).

Caractère Codage sur 7 bits Bit de parité paire Bit de parité impaire

‘A’

‘E’

‘V’
Figure 2 : Bits de parité paire et impaire de trois caractères (‘A’, ‘E’ et ‘V’)

La technique LRC (Longitudinal Redundancy Checking) permet de raisonner sur un ensemble


de caractères et non pas uniquement caractère par caractère. En effet, soit un ensemble de n
caractères. Chaque caractère est codé sur 7 bits. On rajoute à l’ensemble de ces n caractères,
un caractère de parité où chaque bit contrôle la parité des bits de même rang des n caractères
de la séquence.

La figure 3 donne les caractères de parité paire et impaire pour la chaîne ‘EVA’. Lors de la
transmission, la machine émettrice envoie le caractère ‘E’ puis le caractère ‘V’ puis le
caractère ‘A’ et enfin le caractère de parité.

Chaîne Codage sur 7 bits


‘E’

‘V’

‘A’

Caractère de parité paire

Caractère de parité impaire


Figure 3 : Caractères de parité paire et impaire pour la chaîne ‘EVA’

5
Les techniques VRC et LRC peuvent être combinées ; c'est-à-dire que pour chaque caractère
d’une chaîne on calcule son bit de parité et pour la chaîne entière on calcule le caractère
combiné de parité. La figure 4 donne les bits de parité paire et le caractère combiné de parité
paire de la chaîne ‘EVA’.

Chaîne Codage sur 7 bits Bit de parité paire


‘E’

‘V’

‘A’

Caractère combiné de parité paire


Figure 4 : Bits et caractère combiné de parité paire pour la chaîne ‘EVA’

Des statistiques faites sur des séquences courtes (quelques bits) montrent qu’environ 50 %
seulement des erreurs sont isolées et que l’on peut avoir jusqu’à 4 bits erronés consécutifs.
D’autres statistiques faites sur des séquences d’une centaine d’octets, montrent des erreurs
isolées dans 36 % des cas seulement. Ceci prouve qu’il est quasi inutile de ne détecter que les
erreurs simples (un seul bit erroné détectable par un contrôle de parité) mais que le système de
protection doit prendre en compte les erreurs groupées pour donner une sécurité suffisante.
Ceci nous conduit à utiliser les codes à redondance cyclique.

4. CRC : Codes à redondance cyclique


Les codes à redondance cyclique (CRC) ajoutent des bits qui sont des combinaisons linéaires
des bits de l'information à transmettre. Ils font appel à une représentation de la trame par un
polynôme. La formule générale d'une trame est un polynôme de la forme :

P(x) = an xn + an-1xn-1 + ... + a2x2+ a1x + a0 .

Les coefficients an ne peuvent prendre que les valeurs 0 ou 1 et les xn sont les puissances
successives de 2.

Par exemple, la suite binaire ‘11010110100’ est représentée par le polynôme suivant :

P(x) = 1x10 + 1x9 + 0x8+ 1x7 + 0x6 + 1x5 + 1x4 + 0x3 + 1x2 + 0x + 0

P(x) = x10 + x9 + x7 + x5 + x4 + x2

P(x) 1x10 1x9 0x8 1x7 0x6 1x5 1x4 0x3 1x2 0x1 0x0

6
Binaire 1 1 0 1 0 1 1 0 1 0 0

À l'émission, on calcule la division du polynôme P(x) multiplié par xr par le polynôme


générateur G(x) de degré r. On appelle Q(x) le polynôme quotient et R(x) le polynôme reste
de cette division, on a donc : xrP(x)=Q(x).G(x) + R(x).

La suite de bits correspondant au polynôme R(x) constitue le CRC qui est ajouté à
l'information à transmettre (figure 5), le polynôme total émis est donc E(x)=xrP(x) + R(x).

Figure 5 : Trame à envoyer après calcul du CRC

4.1. Exemple
Soit à transmettre la trame contenant la suite binaire ci-dessus ‘11010110100’.

Si le polynôme diviseur est égal à G(x) = x4+x+1, ce qui donne en binaire : ‘10011’. Il faut
donc diviser ‘11010110100’par ‘10011’. Cette division est exécutée de la façon suivante :

ƒ Nous ajoutons au dividende, et à sa droite, autant de 0 que le diviseur comporte de bit


moins un (ici 4=5-1) ce qui donne ‘110101101000000’.

ƒ Puis nous exécutons la division par soustractions successives grâce au OU-exclusif


(figure 6).

ƒ La dernière ligne de la division donnera le reste ‘1001’ donc le CRC; c'est lui qui sera
ajouté au message que l'on va transmettre.

Figure 6 : Exemple de division

7
Donc, x4 P(x) = x14 + x13 + x11 + x9 + x8 + x6 = (x10 + x9 + x4 + x2 + x + 1) (x4 +x + 1) + x3 +
1

À la réception, on divise le polynôme E'(x) correspondant à la suite totale de bits reçus


(information+CRC) par le polynôme générateur (figure 7) :

ƒ Si le reste calculé est non nul, c'est qu'une erreur s'est produite dans la transmission.

ƒ Si le reste est nul, on est à peu près sûr que la transmission s'est faite sans erreur.

Pourquoi cela fonctionne-t-il ? Il est évident que xrP(x)-R(x) est divisible par G(x), mais en
arithmétique modulo 2 addition et soustraction sont équivalentes (ce sont des OU exclusifs)
donc on a également E(x)=xrP(x) + R(x)=G(x)Q(x) montrant que E(x) est un polynôme
multiple de G.

Si lors de la transmission des erreurs se sont produites, cela se traduit par le fait que le
polynôme reçu E'(x)=E(x) + T(x), T étant le polynôme correspondant aux erreurs (T(x)=xi si le
ie bit a été inversé). À la réception le décodeur calcule le reste de (E(x) + T(x))/G(x) qui est en
fait le reste de T(x)/G(x) puisque E(x) est un multiple de G(x). Si ce résultat est non nul, c'est
que T est non nul et que des erreurs se sont produites. Évidemment, le résultat est également
nul si T est un multiple de G ce qui masque des erreurs, mais le choix judicieux de G permet
de minimiser ces erreurs non détectées.

Enfin, il faut aussi remarquer un inconvénient de cette méthode qui signale des erreurs de
transmission même si celles-ci ont eu lieu dans le CRC et non dans l'information à transmettre
initialement. Dans ce cas il ne devrait pas être nécessaire de retransmettre l'information, or
c'est ce qui est fait puisque globalement le transfert (info+CRC) a subi des perturbations.

Figure 7 : Détection d’erreurs au récepteur

4.2. Choix du polynôme générateur


Un polynôme générateur est un polynôme irréductible ou le produit de polynômes
irréductibles. Pour les plus bas degrés, les polynômes suivants sont irréductibles : x +1, x2 + x
+ 1, x3 + x + 1 et x3 + x2 + 1. Le polynôme normalisé CRC-16 : x16 + x15 + x2 + 1 est le

8
produit (x + 1)(x15 + x + 1). Le polynôme normalisé CRC-CCITT : x16 + x12 + x5 + 1 est le
produit (x + 1)(x15 + x14 + x13 + x12 + x4 + x3 + x2 + x + 1). Le polynôme x + 1 génère un code
de parité pair. Son emploi garantit la détection de toutes les erreurs simples et les erreurs
d’ordre impair.

En pratique, on utilise des codes normalisés de degré 16 ou 32. Ces codes protègent une taille
maximale de données, par exemple 32 Koctets pour un polynôme de degré 16. Ces codes
détectent les erreurs simples, doubles et d’ordre impair. Le tableau suivant liste quelques
exemples de CRC normalisés :

CRC Polynôme générateur


CRC-12 x12 + x11 + x3 + x2 + x + 1
CRC-16 x16 + x15 + x2 + 1
CRC-CCITT
x16 + x12 + x5 + 1
(X25)
CRC-32
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 +
x4 + x 2 + x + 1
(IEEE 802)
Cellule ATM x 8 + x2 + x + 1
AAL ¾ d’ATM x10 + x9 + x5 + x4 + x + 1

Tous ces polynômes contiennent x + 1 comme facteur premier. Le polynôme CRC-12 est
appliqué aux caractères codés sur 6 bits. Le CRC-16 et le CRC-CCITT sont utilisés pour des
caractères codés sur 8 bits. Ils donnent des champs de contrôle d’erreur codés sur 16 bits. Ils
permettent de détecter toutes les erreurs simples ou doubles, toutes les erreurs comportant un
nombre impair de bits et tous les blocs d’erreurs de longueur inférieure ou égale à 16. Ils
détectent avec une probabilité de 99,997 % les blocs d’erreurs de 17 bits et avec une
probabilité de 99,998 % les blocs d’erreurs de longueur supérieure ou égale à 18 bits. Le
tableau suivant résume les chiffres du taux de détection d’un CRC de 16 bits :

Type d’erreur Taux de détection


Sur 1 bit 100 %
Sur 2 bits 100 %
Nombre impair de bits 100 %
Suite de 16 bits ou moins 100 %
Suite de 17 bits 99,997 %
Suite de 18 bits ou plus 99,998 %

Le CRC-32 donne un champ de contrôle d’erreur codé sur 32 bits. Il est utilisé pour des
caractères codés sur 16 ou 32 bits. Il est utilisé pour protéger les trames des réseaux locaux
normalisés par IEEE. Pour protéger les en-têtes, de 5 octets, des cellules ATM, c’est un CRC
de 8 bits qui est utilisé. Par contre, pour protéger les 48 octets de la charge utile d’une cellule
ATM dans le cas où c’est AAL ¾ qui est utilisé, on utilise un CRC de 10 bits.

5. Code de Hamming
9
Étant donné deux suites binaires, par exemple ‘10001001’ et ‘10110001’, il est possible de
déterminer de combien de bits il différent. Dans notre exemple, ils différent de trois bits. Pour
le trouver, il suffit d’effectuer un OU exclusif entre les deux suites binaires et de compter le
nombre de 1 du résultat. Le nombre de bits de différence entre deux suites binaires est appelé
distance de Hamming. Si la distance de Hamming entre deux suites binaires est d, il faut d
erreurs simples pour transformer une suite en l’autre suite.

Le code de Hamming est un code correcteur d'erreurs basé sur la notion de distance de
Hamming. Soit un alphabet composé de 4 caractères (00, 01, 10, 11). Si une erreur se produit
alors le caractère émis est transformé en un autre caractère et il n'y a pas moyen de retrouver
le caractère original. Par contre, en ajoutant de l'information de telle sorte que les caractères
soient très différents les uns des autres cela devient possible.

Par exemple, on peut coder les 4 caractères de la manière illustrée dans le tableau ci-dessous.
Ainsi si un bit (parmi les 5 émis) est erroné on sait quand même déterminer quel caractère a
été émis, car comme on peut le voir dans le tableau ci-dessous la modification d'un bit ne peut
pas faire passer d'un caractère initial à un autre caractère. On a des ensembles «d'erreurs
possibles» totalement disjoints. Par contre la modification de 2 bits dans cet exemple peut
amener à des confusions et à l'impossibilité de corriger les erreurs.

caractère initial 00 01 10 11
caractère émis 00000 01111 10110 11001
caractères erronés 00001 01110 10111 11000
possibles 00010 01101 10100 11011
00100 01011 10010 11101
01000 00111 11110 10001
(Une erreur
simple) 10000 11111 00110 01001

Soit x et y deux caractères d'un alphabet A et soit N la longueur du codage des mots de cet
alphabet, xi et yi désignent respectivement le ie bit de x et y. On peut alors définir la distance
par :

Elle permet de compter le nombre de bits qui diffèrent entre x et y. On définit alors la distance
de Hamming par dH = inf d(x, y) avec (x,y) є A 2 et x ≠ y.

Dans l'exemple choisi ci-dessus, dH=1 dans le premier codage sur 2 bits et dH=3 dans le
codage sur 5 bits. Chaque erreur sur un bit d'un caractère x donne un caractère x' tel que d(x,
x')=1, donc pour pouvoir détecter et corriger une seule erreur il faut que dH ≥ 3et pour corriger
2 erreurs il faut que dH ≥ 5. D'une manière générale on détecte et on corrige n erreurs quand la
distance de Hamming est 2n+1.

Un exemple de code de Hamming est donné par la technique suivante où l'on veut envoyer
des caractères codés sur 7 bits de données. Les bits sont notés de gauche à droite par
ABCDEFG (A note le bit de poids fort et G le bit de poids faible).

10
Pour cela on va émettre la suite ABCP3DEFP2GP1P0 dans laquelle les bits de contrôle Pi sont
placés sur les bits de rang 2i et sont définis par :

P0 = A ⊕ C ⊕ D ⊕ F ⊕ G

P1 = A ⊕ B ⊕ D ⊕ E ⊕ G

P2 = D ⊕ E ⊕ F

P3 = A ⊕ B ⊕ C

Les Pi sont des bits de parité définis à l'aide des bits de données de rang k tels que la
décomposition de k en somme de puissances de 2 contienne 2i. Par exemple, A est un bit de
données de rang 11 = 20 + 22 + 23 donc A sert au calcul de P0, P2 et P3. De même, le rang de D
est 7 = 20 + 21 + 22 donc il sert au calcul de P0, P1 et P2

À la réception on calcule :

P’0 = P0 ⊕ A ⊕ C ⊕ D ⊕ F ⊕ G

P’1 = P1 ⊕ A ⊕ B ⊕ D ⊕ E ⊕ G

P’2 = P2 ⊕ D ⊕ E ⊕ F

P’3 = P3 ⊕ A ⊕ B ⊕ C

Si on obtient P’3 = P’2 = P’1 = P’0 = 0 alors c'est que la transmission s'est passée sans
problème. Sinon, la valeur binaire de P’3P’2P’1P’0 donne la place de l'erreur dans les bits reçus
(en commençant par la droite). On corrige alors l'erreur et on recalcule les P’i, s'ils sont
devenus tous nuls, l'erreur a été corrigée, sinon il y avait eu au moins deux erreurs et on peut
rejeter la suite de bits mais pas la corriger.

Exemple :

Si l'on veut envoyer les 7 bits ‘1001101’ (figure 8), on va finalement émettre ‘10011100101’
(figure 9). Car :

P0 = 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 = 1

P1 = 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0

P2 = 1 ⊕ 1 ⊕ 0 = 0

P3 = 1 ⊕ 0 ⊕ 0 = 1

11
Figure 8 : Suite binaire à envoyer

Figure 9 : Suite binaire à envoyer effectivement

A la réception, plusieurs cas peuvent se présenter :

Cas 1 : Pas d’erreur

Le récepteur reçoit une suite binaire identique à celle que l’émetteur a envoyé. Pour le
vérifier, on calcule les P’i :

P’0 = 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0

P’1 = 0 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 0

P’2 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0

P’3 = 1 ⊕ 1 ⊕ 0 ⊕ 0 = 0

Cas 2 : Une erreur simple

Le récepteur reçoit la suite binaire ‘00011100101’ (figure 10). Le calcul des P’i par le
récepteur donne :

P’0 = 1 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 0 ⊕ 1 = 1

P’1 = 0 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1

P’2 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0

P’3 = 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1

Tous les P’i ne sont pas nuls, donc la suite binaire reçue est erronée. La position de l’erreur
est calculée par P’3P’2P’1P’0 qui est dans cette exemple égale à 11 valeur décimal de ‘1011’.

12
Figure 10 : Une erreur simple à la 11ème position

Cas 2 : Deux erreurs

Le récepteur reçoit la suite binaire ‘00010100101’ (figure 11). Le calcul des P’i par le
récepteur donne :

P’0 = 1 ⊕ 0 ⊕ 0 ⊕ 0 ⊕ 0 ⊕ 1 = 0

P’1 = 0 ⊕ 0 ⊕ 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0

P’2 = 0 ⊕ 0 ⊕ 1 ⊕ 0 = 1

P’3 = 1 ⊕ 0 ⊕ 0 ⊕ 0 = 1

Tous les P’i ne sont pas nuls, donc la suite binaire reçue est erronée. La position de l’erreur
est calculée par P’3P’2P’1P’0 qui est dans cette exemple égale à 12 valeur décimal de ‘1100’.
Comme la suite binaire ne contient pas plus de 11 bits, on conclut que la suite binaire reçue
contient plus d’une erreur. Dans ce cas, le code utilisé ne peut pas corriger les erreurs.

Figure 11 : Deux erreurs dans la suite binaire reçue

Remarque : Le codage de Hamming permet de détecter les erreurs de transmission et corriger


les erreurs simples. Bien évidemment, ce codage est très coûteux en bande passante, puisqu’il
faut rajouter beaucoup de bits de contrôle qui sont presque de même taille que l’information
utile. Les protocoles de liaison de données ordinaires n’utilisent pas ce genre de codage et
mettent en place un simple mécanisme de détection d’erreur.

6. Contrôle de flux
Après l’émission d’une trame, l’émetteur arme un temporisateur et se met en attente pour
réceptionner l’acquittement associé à la trame envoyée. Si l’acquittement n’arrive pas avant
l’expiration du temporisateur, la trame est émise de nouveau. Chaque trame envoyée est
stockée temporairement dans un tampon qui sera libéré à la réception d’un acquittement
positif (ACK).

La figure 12 montre l’émission d’une trame suivie de l’envoi d’un acquittement positif. Le
temps total nécessaire pour cela est égal à Ttotal = Tp+ Tt + Te + Tp + Ta avec :

Tp : temps de propagation (le même pour la trame et pour l’acquittement), Te : temps


d’exécution et de traitement de la trame par le destinataire, Tt : temps de transmission de la
trame et Ta : temps de transmission de l’accusé de réception.

13
Figure 12 : Emission d’une trame suivie d’un acquittement positif

Si l’émetteur a N trames identiques à envoyer, il va devoir consommer N*Ttotal. Durant cette


période, il sera souvent en attente d’un acquittement, égal à N*(2*Tp + Te + Ta). Cette façon
d’opérer est inefficace en transmission de données car elle engendre un débit très faible sur la
liaison même si la capacité de la ligne physique de transmission est élevée. En supposant que
toutes les trames arrivent sans erreurs et que le destinataire envoi que des ACK, le débit est
égal à : Dliaison = L/Ttotal avec L : la longueur en octets des trames.

Pour augmenter le débit de la liaison, l’émetteur peut envoyer plusieurs trames, l’une à la
suite de l’autre, sans attendre d’acquittement. Néanmoins, il ne faut pas envoyer beaucoup
trop de trames en même temps au risque de submerger le récepteur qui faute de mémoire et de
capacité de traitement sera obligé de rejeter les trames en trop.

Donc, pour augmenter le débit de la liaison tout en évitant de submerger le récepteur, la


couche liaison de données utilise la fonction de contrôle de flux entre l’émetteur et le
récepteur qui ont établit, préalablement, une connexion entre eux. Le mécanisme le plus
utilisé pour mettre en œuvre le contrôle de flux est la fenêtre à anticipation. Elle est appelée
aussi fenêtre glissante.

L'émetteur et le récepteur possèdent chacun une "fenêtre" dont le fonctionnement est le


suivant : La fenêtre d'émission, de taille W, contient les trames émises pour lesquelles des
acquittements positifs n'ont pas encore été reçus. Chaque trame dans la fenêtre est gardée dans
un tampon en mémoire. L’émetteur peut envoyer jusqu’à W trames sans attendre
d’acquittements. L’émetteur peut avoir des trames en attente d’émission si la fenêtre est
pleine.

Dès qu'un acquittement positif pour une trame m est reçu, toutes les trames dont le numéro est
inférieur ou égal à m sont considérées acquittées (avantage : si un acquittement positif est
perdu, la réception d'une trame sera confirmée par l'acquittement d'une trame suivante).

La figure 13 montre une fenêtre de taille W=8 qui est remplie partiellement avec cinq trames
numérotées de 0 à 5. Si on suppose que l’ACK de la trame 0 est arrivé à l’émetteur, la trame
est libérée du tampon et une place est libérée de la fenêtre d’émission (figure 14). L’émetteur
envoi trois trames numéros 5, 6 et 7. Cela est possible, car il reste encore de la place dans la
fenêtre d’émission qui maintenant est remplie par les trames de 2 à 7 (figure 15). A la
réception de l’ACK de la trame 1, une place se vide dans la fenêtre (figure 16). L’émetteur

14
souhaite envoyer 5 nouvelles trames. Ceci n’est pas possible car il n’y a que trois places
disponibles dans la fenêtre. Il envoi les trames 8, 9 et 10.

Figure 2.13 : Cinq trames envoyées en attente d’ACK

Figure 2.14 : Libération d’une place dans la fenêtre d’émission

Figure 15 : Emission des trames 5, 6 et 7

Figure 16 : Libération d’une autre place dans la fenêtre d’émission

Figure 17 : Fenêtre pleine

L’émetteur lance un temporisateur au moment où la trame est émise et décrémenté ensuite


périodiquement ; si le temporisateur atteint 0 alors que la trame est encore dans la fenêtre
d'émission, la trame est émise à nouveau. Aussi, une trame (dans la fenêtre) est émise à
nouveau dès qu'un acquittement négatif portant le numéro de la trame est reçu.

La fenêtre de réception (dont la taille est égale à la taille maximale de la fenêtre d'émission
afin d'assurer la synchronisation entre l'émetteur et le récepteur) contient les trames reçues et
non encore transmises à la couche réseau. Chaque trame reçue est vérifiée (détection des
erreurs) et si elle est déjà présente dans la fenêtre, elle est rejetée.

15