Piggybacking : transporter un acquittement avec les données

Comprendre les échanges bidirectionnels et distinguer l’acquittement, la temporisation et le contrôle de flux.

Chapitre rédigé pour compléter cette ancienne adresse. Les exemples et exercices ci-dessous sont originaux.

1. Deux sens de communication

A envoie une trame de données à B. B doit confirmer sa réception. Si B a également des données pour A, il peut joindre l’acquittement à cet envoi au lieu d’émettre une trame séparée : c’est le piggybacking.

Schéma des étapesA → B : données 0 puis B prépare sa réponse puis B → A : données 0 + acquittement de A puis A sait que ses données ont été reçuesA → B : données 0B prépare sa réponseB → A : données 0 + acquittement de AA sait que ses données ont été reçues
Schéma pédagogique original PandaCodeur.

2. Fixer la convention de numérotation

Dans cet exemple pédagogique, ACK k signifie « la prochaine trame attendue est k ». B reçoit la trame 0 et annonce ACK 1. Certains exercices utilisent au contraire le dernier numéro reçu : lisez la convention avant de calculer.

ÉvénementRéponse de B
B reçoit 0, attend 1, possède des donnéesDonnées de B + ACK 1
B reçoit 0, attend 1, n’a rien à envoyerACK seul après une attente bornée
La confirmation se perdA peut retransmettre à expiration de son délai

3. Éviter l’attente infinie

On ne doit pas attendre indéfiniment des données à envoyer dans le sens retour. Une temporisation d’acquittement permet d’envoyer un ACK seul. Elle se distingue du délai de retransmission de l’émetteur. En TCP, les numéros portent sur les octets et les acquittements cumulatifs ; il ne faut pas appliquer directement un exercice de trames à tous les détails de TCP.

4. Scénarios corrigés

B reçoit la trame 4 puis envoie des données. Quel ACK ajouter avec notre convention ?

Voir le corrigé expliqué

ACK 5, si toutes les trames précédentes ont été reçues dans l’ordre. Il indique la prochaine attendue, pas le numéro des données propres à B.

Pourquoi un ACK seul reste-t-il nécessaire ?

Voir le corrigé expliqué

Si B n’a aucune donnée applicative à transmettre, A doit tout de même être informé. Le piggybacking est une optimisation, pas une condition obligatoire de confirmation.

Une confirmation perdue signifie-t-elle que les données ont été perdues ?

Voir le corrigé expliqué

Non. B peut avoir accepté les données sans que A reçoive l’ACK. Les numéros de séquence permettent de reconnaître une retransmission et d’éviter une livraison en double.

Deux trames séparées ou une trame combinée ?

Voir le corrigé expliqué

Avec des données en attente dans les deux sens, la combinaison économise l’en-tête d’une trame de contrôle. En contrepartie, retarder un acquittement peut augmenter la latence : on borne cette attente.

Référence : IETF : TCP, RFC 9293.

Pour poursuivre