Résumé

  • L'accusé cumulatif indique jusqu'où tout est arrivé, mais il décrit mal plusieurs pertes dans une même volée de segments.
  • RFC 2018 permet au récepteur d'annoncer des plages discontinues déjà reçues, tout en maintenant l'accusé cumulatif comme preuve définitive.
  • RFC 3517 puis RFC 6675 ont organisé l'usage de cette information autour d'un tableau d'état, d'une estimation du trafic encore en vol et d'une retransmission de secours strictement limitée.

Le cas décisif n'est pas la disparition d'un dernier segment. C'est la perte d'un segment au milieu d'une série alors que les suivants arrivent correctement. Le récepteur possède l'aval, mais le numéro d'accusé de réception reste arrêté juste avant le trou. Le répéter alerte l'émetteur; il ne lui dit pas exactement quelles parties ne doivent surtout pas être renvoyées.

RFC 2018, publié en octobre 1996, a fourni à TCP ce second vocabulaire. Une version antérieure figurait dans RFC 1072, mais n'avait pas été déployée, notamment à cause de désaccords sur son emploi avec l'extension de fenêtre. Le nouveau dispositif a séparé l'autorisation et l'usage. L'option SACK-Permitted est négociée dans le SYN. Ensuite, le récepteur peut joindre à ses accusés des blocs délimités par deux numéros de séquence de 32 bits.

Ces blocs ne remplacent pas l'accusé cumulatif. Celui-ci certifie une continuité: tout ce qui précède la frontière est acquis. Les blocs SACK signalent seulement des îlots situés plus loin. Ils sont consultatifs. Un récepteur à court de mémoire peut abandonner des données déjà annoncées; l'émetteur ne peut donc libérer sa copie qu'après le déplacement de la frontière cumulative.

La carte tient en peu de place. Les options TCP disposent de 40 octets. Quatre blocs SACK sont le maximum théorique, souvent trois lorsque l'horodatage occupe aussi l'en-tête. Le standard privilégie alors le bloc formé par le segment le plus récent et répète des blocs déjà signalés. La redondance compense la perte possible des accusés, mais elle révèle la nature du compromis: le récepteur n'envoie pas un état complet, il envoie les fragments jugés les plus utiles.

RFC 2018 n'imposait pas une stratégie de récupération détaillée. Il exigeait surtout que SACK ne contourne pas les règles de congestion. RFC 3517, en avril 2003, a apporté une méthode prudente côté émetteur. Celui-ci maintient un « scoreboard » des plages reconnues, décide quels trous sont vraisemblablement perdus, estime avec Pipe les octets encore dans le réseau et choisit le prochain segment sans dépasser la fenêtre de congestion.

Ce montage conserve une division claire du travail. Le récepteur décrit ce qu'il voit dans sa file. L'émetteur décide, garde la copie et supporte le coût d'une erreur. Une meilleure information permet de réparer plusieurs pertes sans attendre un tour complet pour chacune, mais elle n'abolit ni la réduction de fenêtre ni la prudence face au réordonnancement.

RFC 6675 a remplacé RFC 3517 en août 2012. Il a intégré l'information SACK nouvelle dans la définition des accusés dupliqués, ajusté la détection des pertes lorsque les segments sont plus petits que la taille maximale et ajouté RescueRxt. Cette variable autorise une seule retransmission optimiste par phase de récupération lorsque la perte se situe en fin de fenêtre et que l'horloge des accusés risque de s'arrêter. La concession est encadrée: un seul segment, d'une taille au plus égale au maximum de l'émetteur.

L'évolution de SACK raconte donc moins la conquête d'une vitesse gratuite que la mise en forme d'une confiance limitée. Le récepteur sait ce qu'il détient à l'instant présent, pas ce qu'il gardera toujours. L'émetteur contrôle la réparation, mais ne connaît le chemin qu'à travers des messages retardés et incomplets. Le format réduit la carte; un délai d'expiration peut invalider l'histoire accumulée.

Le progrès vient de cette précision institutionnelle. TCP n'a pas confié toute la décision au poste qui voit les blocs reçus. Il a enrichi les preuves disponibles, puis imposé à l'émetteur de conserver la responsabilité du débit, de la copie et du risque. SACK a transformé un accusé de réception de simple frontière en carte partielle, sans faire de cette carte un titre de propriété.

Sources