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:
- 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
- Réorganisation des segments de données par le réseau (pas un événement rare le long de certains chemins réseau [Pax97])
- 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.