Aller au contenu principal

3.2. Retransmission Rapide/Récupération Rapide

Comportement du Récepteur

Un récepteur TCP DEVRAIT (SHOULD) envoyer un ACK duplicata immédiat lorsqu'un segment hors séquence arrive. Le but de cet ACK est d'informer l'expéditeur qu'un segment a été reçu hors séquence et quel numéro de séquence est attendu.

Causes des ACK Duplicata

Du point de vue de l'expéditeur, les ACK duplicata peuvent être causés par un certain nombre de problèmes réseau:

  1. Segments abandonnés: Tous les segments après le segment abandonné déclencheront des ACK duplicata jusqu'à ce que la perte soit réparée
  2. Réorganisation des segments de données par le réseau (pas un événement rare le long de certains chemins réseau [Pax97])
  3. Réplication des segments ACK ou de données par le réseau

ACK pour Combler les Lacunes

De plus, un récepteur TCP DEVRAIT (SHOULD) envoyer un ACK immédiat lorsque le segment entrant comble tout ou partie d'une lacune dans l'espace de séquence.

Algorithme de Retransmission Rapide

L'expéditeur TCP DEVRAIT (SHOULD) utiliser l'algorithme de "retransmission rapide" pour détecter et réparer la perte, basé sur les ACK duplicata entrants.

L'algorithme de retransmission rapide utilise l'arrivée de 3 ACK duplicata (comme défini dans la section 2, sans ACK intermédiaire qui déplace SND.UNA) comme indication qu'un segment a été perdu. Après avoir reçu 3 ACK duplicata, TCP effectue une retransmission de ce qui semble être le segment manquant, sans attendre l'expiration du temporisateur de retransmission.

Algorithme de Récupération Rapide

Après que l'algorithme de retransmission rapide envoie ce qui semble être le segment manquant, l'algorithme de "récupération rapide" régit la transmission de nouvelles données jusqu'à l'arrivée d'un ACK non duplicata.

Justification

La raison de ne pas effectuer de démarrage lent est que la réception des ACK duplicata indique non seulement qu'un segment a été perdu, mais aussi que les segments quittent probablement le réseau (bien qu'une duplication massive de segments par le réseau puisse invalider cette conclusion).

En d'autres termes, puisque le récepteur ne peut générer un ACK duplicata que lorsqu'un segment est arrivé, ce segment a quitté le réseau et est dans le tampon du récepteur, donc nous savons qu'il ne consomme plus de ressources réseau.

Implémentation de la Retransmission Rapide et de la Récupération Rapide

Les algorithmes de retransmission rapide et de récupération rapide sont implémentés ensemble comme suit:

1. Premier et Deuxième ACK Duplicata

Lors de la réception du premier et du deuxième ACK duplicata à un expéditeur, un TCP DEVRAIT (SHOULD) envoyer un segment de données précédemment non envoyées selon [RFC3042] à condition que:

  • La fenêtre annoncée par le récepteur le permette
  • Le FlightSize total reste inférieur ou égal à cwnd plus 2*SMSS
  • De nouvelles données sont disponibles pour la transmission

De plus, l'expéditeur TCP NE DOIT PAS (MUST NOT) modifier cwnd pour refléter ces deux segments [RFC3042].

2. Troisième ACK Duplicata

Lorsque le troisième ACK duplicata est reçu, un TCP DOIT (MUST) définir ssthresh à pas plus que la valeur donnée dans l'équation (4).

3. Retransmettre et Gonfler la Fenêtre

Le segment perdu commençant à SND.UNA DOIT (MUST) être retransmis et cwnd défini à ssthresh plus 3*SMSS. Cela "gonfle" artificiellement la fenêtre de congestion par le nombre de segments (trois) qui ont quitté le réseau et que le récepteur a mis en tampon.

4. ACK Duplicata Supplémentaires

Pour chaque ACK duplicata supplémentaire reçu (après le troisième), cwnd DOIT (MUST) être incrémenté de SMSS. Cela gonfle artificiellement la fenêtre de congestion afin de refléter le segment supplémentaire qui a quitté le réseau.

5. Envoyer des Données Précédemment Non Envoyées

Lorsque des données précédemment non envoyées sont disponibles et que la nouvelle valeur de cwnd et la fenêtre annoncée par le récepteur le permettent, un TCP DEVRAIT (SHOULD) envoyer 1*SMSS octets de données précédemment non envoyées.

6. Dégonfler la Fenêtre

Lorsque le prochain ACK arrive qui acquitte des données précédemment non acquittées, un TCP DOIT (MUST) définir cwnd à ssthresh (la valeur définie à l'étape 2). C'est ce qu'on appelle "dégonfler" la fenêtre.

Cet ACK devrait être l'accusé de réception suscité par la retransmission de l'étape 3, un RTT après la retransmission (bien qu'il puisse arriver plus tôt en présence d'une livraison significativement hors séquence de segments de données au récepteur).

Limitations

Note: Cet algorithme est connu pour généralement ne pas récupérer efficacement de plusieurs pertes dans un seul vol de paquets [FF96]. La section 4.3 ci-dessous traite de tels cas.