Nous avons vu précédemment que les unités de donnée pouvaient arriver erronées à leur destinataire. Si le protocole entre le récepteur et l’émetteur n’utilise pas un code de correction d’erreur, ne pouvant déterminer quelle partie est erronée, le destinataire doit faire comme si elle ne lui était jamais arrivée. Elle est considérée comme perdue.
L’émetteur et le récepteur doivent mettre en œuvre un protocole permettant de pallier cette perte. C’est ce qui nous intéressera dans ce cours.
D’autres raisons que les erreurs peuvent causer la perte d’unités de données comme la saturation ou le résultat d’erreurs logicielles au niveau de l’émetteur, du récepteur ou d’équipements intermédiaires.
Les supports physiques peuvent aussi être endommagés ou perturbés au point de ne pas pouvoir transporter le moindre signal entre l’émetteur et le récepteur sans que l’émetteur ne s’en rende compte. (Vous avez sans doute déjà rencontré ce phénomène lors d’une conversation avec un téléphone portable lorsque votre interlocuteur passe dans un tunnel.)
Si certain types de communications supportent les pertes, d’autres les supportent moins bien. Ainsi dans un cadre bancaire les clients préféreront sans doute que les systèmes communicants soient capables de détecter et de corriger des pertes afin que leurs comptes soient crédités ou débités des montants adéquats. Afin de créer un protocole permettant de lutter contre les pertes, c'est-à-dire de faire de la reprise sur perte, il faut d’abord détecter celles-ci.
D’une manière analogue à une conversation humaine on peut imaginer de faire cette détection chez l’émetteur ou chez le récepteur :
Comment ces mécanismes peuvent ils se traduire dans un environnement numérique ? *
Afin de détecter la perte chez l’émetteur on va associer à chaque unité de donnée émise un minuteur, une sorte de réveil qui va se déclencher au bout d’un temps prédéfini.
Imaginons par exemple que l’on considère une communication entre un client et sa banque. Le client désire que son compte soit débité correctement de ses achats. Nous utilisons ici un chronogramme ou diagramme temporel pour représenter le trajet des unités de données. Dans celui-ci nous ignorons volontairement la durée d’émission.
Une première PDU est envoyée et un minuteur est enclenché pour cet envoi. Cette PDU se perd avant d’arriver à la banque. Lorsque le minuteur se déclenche, l’émetteur se rend compte qu’il n’a pas reçu de réponse de la banque et en déduit que la PDU qu’il avait envoyé s’est perdue. Il va alors retransmettre celle-ci afin que celle-ci ait une nouvelle chance d’arriver à son destinataire et enclenche de nouveau un minuteur. Lorsque celle-ci arrive cette fois- ci correctement à la banque le compte est débité.
Comme nous venons de le dire c’est parce que le client ne reçoit pas de message de la banque lui indiquant qu’elle a bien reçu sont message que le client réémet celui-ci. Il convient donc pour le récepteur lors de la réception d’une PDU d’envoyer à l’émetteur une indication de réception aussi appelée acquittement. Contrairement à une conversation humaine, cet acquittement ne contient pas nécessairement des informations utiles transmises par la couche supérieure. Il peut ne contenir que des informations de contrôle. Lors de la réception de l’acquittement l’émetteur désactive le minuteur afin que celui-ci ne provoque pas une retransmission inutile.
Examinons maintenant un scénario différent dans lequel c’est l’acquittement qui se perd. L’unité de donnée est envoyée par le client et le minuteur est enclenché. Cette unité de donnée parvient au récepteur. Le compte est alors débité correctement. Le récepteur envoie ensuite l’acquittement. Cet acquittement se perd. Le minuteur se déclenche alors au niveau de l’émetteur qui réémet l’unité de donnée initiale en enclenchant le minuteur. Celle-ci peut alors parvenir de nouveau au récepteur ce qui provoque le débit du compte une nouvelle fois. Le problème est maintenant que notre protocole peut délivrer les données plusieurs fois au récepteur.
Afin de régler ce problème une solution consiste à ajouter à l’unité de donnée, une information de contrôle, un compteur afin que le récepteur puisse vérifier s’il a déjà reçu l’unité de donnée auparavant. Afin que l’émetteur sache quelle unité de donnée est acquittée on ajoute également un compteur similaire dans l’unité de donnée d’acquittement. Dans le protocole du bit alterné ces compteurs sont codés sur un bit. Pour garder en mémoire ce qui a été émis ou reçu dans le passé l’émetteur et le récepteur maintiennent chacun une variable également codée sur un bit.
A la réception d’une unité de donnée:
Lorsque l’émetteur reçoit un acquittement il vérifie que la valeur de compteur correspond à celle contenue dans la variable d’émission. Si c’est le cas, il incrémente la valeur de la variable d’émission et désactive le minuteur associé à la transmission précédente. Dans le cas contraire, il ignore l’acquittement. Enfin si le minuteur se déclenche, l’émetteur retransmet la dernière unité de donnée.
Illustrons le fonctionnement du bit alterné par un chronogramme. Imaginons que les compteurs soient initialisés à 0 et à 1 chez l’émetteur et le récepteur.
Pour conclure la présentation, un petit exercice. Imaginons deux systèmes A et B utilisant le protocole du bit alterné. Le chronogramme ci-dessous représente le transport de trois unités de données entre les deux.
Quelles seront selon vous la valeur du compteur associé à la troisième unité de donnée et les valeurs des deux variables chez l’émetteur et le récepteur ? 0, 1 ou 2 ?
La réponse est 0. En effet lorsque A reçoit ACK 1, la valeur du compteur est égale à celle de la variable d’émission, celle-ci est donc incrémentée de 1. Cependant comme cette variable est codée sur un bit sa valeur revient à 0. Cette variable est utilisée pour la valeur du compteur de la PDU suivante (« débit de 30 euros ») qui prend donc la valeur 0. Lorsque cette PDU est reçue par B, celui-ci constate que la valeur du compteur est différente de la valeur de la variable de réception. La variable prend alors la valeur du compteur et les données sont livrées à l’utilisateur.