# Stop-and-wait ARQ

Le "Stop-and-wait ARQ" (aussi appelé Send-and-wait ARQ) est la plus simple forme de méthode ARQ, laquelle vise à rendre fiables les échanges de données.
Cela signifie simplement : "Arrêt et attente d’acquittement."

## Principe

Lors d'un échange de données en mode "Stop-and-wait ARQ", l'émetteur envoie une seule trame de données à la fois. Après avoir émis une trame, l'émetteur n'envoie pas de données supplémentaires tant qu'il n'a pas reçu d'acquittement (ACK) de la part du destinataire. Ce dernier n'envoie un ACK qu'après avoir reçu une trame correcte. Si l'émetteur ne reçoit pas d'ACK avant l'expiration d'un délai prédéfini (appelé timeout), il ré-émet la trame précédemment envoyée.
En général, l'émetteur ajoute un code de contrôle d'erreur à la fin de chaque trame ; à la réception, le destinataire utilise ce code afin de contrôler l'intégrité de la trame, c'est-à-dire l'absence d'erreur ajoutée par le canal de transmission. Si le destinataire constate que la trame est correcte, il envoie un ACK. Dans le cas contraire, il rejette la trame et n'envoie pas d'ACK, faisant ainsi croire à l'émetteur que la trame a été perdue.
Le comportement décrit ci-dessus est le procédé mis en œuvre le plus simple de la méthode Stop-and-Wait. Cependant, en pratique, ce procédé engendre plusieurs inconvénients.

## Inconvénients

Le premier de ces inconvénients vient de la possibilité de perte ou de mauvaise transmission de l'ACK. Dans ce cas de figure, l'émetteur ne reçoit pas (ou mal) l’acquittement, le délai d'attente maximum ("timeout") est dépassé et la trame est ré-émise. Le destinataire reçoit donc au total deux exemplaires de la même trame et si les trames ne sont pas numérotées, il n'a aucun moyen de savoir si la deuxième trame reçue est une copie de la première ou la trame suivante (qui peut contenir les mêmes données).
Un autre inconvénient survient lorsque le canal de transmission possède une forte latence, ce qui fait que le délai d'attente expire avant que la trame n'atteigne le destinataire (et donc que l'ACK atteigne l'émetteur). Dans ce cas, l'émetteur envoie une seconde fois le paquet et le destinataire reçoit deux copies de la même trame ; il envoie donc deux ACK. L'émetteur, qui s'attend à recevoir un seul ACK, en reçoit alors deux, ce qui pose problème s'il interprète le deuxième ACK comme étant destiné à la trame suivante.

## Palliatifs

La stratégie la plus courante pour éviter ces inconvénients consiste à définir un bit de numéro de séquence dans l'en-tête de la trame. Ce numéro de séquence change de valeur (alternativement 0 et 1) à chaque nouvelle trame émise. Quand le destinataire envoie l'ACK, il inclut le numéro de séquence du prochain paquet attendu. Ainsi, le destinataire peut détecter des duplications de trames en vérifiant l'alternance des numéros de séquence : si deux trames consécutives ont le même numéro de séquence, cela signifie que l'une est la copie de l'autre, la deuxième trame est donc éliminée. De même, si deux ACKs consécutifs ont le même numéro de séquence alors c'est qu'ils sont liés à la même trame.

## Efficacité

Par rapport aux autres méthodes ARQs, le "Stop-and-wait" ARQ est simple mais peu efficace. En effet, en supposant que l'échange de données se déroule parfaitement (pas de perte de paquets ou d'ACKs), le délai entre chaque paquet est égal au double du délai de transmission (en négligeant le temps de traitement). Le débit effectif au sein du canal n'est donc qu'une fraction du débit maximal théorique.
Pour augmenter le débit d'information, il est possible d'envoyer plusieurs paquets successivement (avec un numéro de séquence sur plusieurs bits) en attendant un ACK pour chaque paquet numéroté ou pour un groupe de paquets. C'est la méthode utilisée dans les protocoles "Go-Back-N ARQ" "Selective Repeat ARQ" et "Hybrid ARQ" (HARQ).