Résumé

  • La poignée de main TCP en trois temps sert d’abord à empêcher qu’un ancien SYN dupliqué ne crée une nouvelle connexion par erreur.
  • Chaque extrémité choisit son numéro initial. Le répondant réunit son propre SYN et l’accusé du SYN reçu ; le troisième message montre ensuite que l’initiateur a vu le défi actuel du répondant.
  • Le silence après redémarrage, TIME-WAIT, les ISN à décalage secret et les SYN cookies traitent des risques voisins — vieux segments, prédiction et mémoire — sans authentifier une personne ni une organisation.

Le segment d’une conversation disparue

Dans un internet, un paquet peut être retardé, reproduit et remis dans le désordre. Une arrivée correcte ne suffit donc pas à établir son actualité. Après la fermeture d’une connexion, les mêmes adresses et ports peuvent être réutilisés alors qu’un SYN de l’ancienne incarnation circule encore.

Le récepteur ne dispose dans ce segment d’aucune date de naissance fiable. Le quadruplet semble juste, le drapeau SYN est présent, mais ces éléments décrivent aussi bien une demande périmée qu’une demande nouvelle.

RFC 761, en janvier 1980, posa le problème en termes d’espaces de séquence. Chaque TCP choisit son numéro d’émission initial et apprend celui du pair. Avant de classer les octets ou de supprimer les doublons, il faut savoir à quelle incarnation ces nombres appartiennent.

Quatre affirmations, trois transmissions

La synchronisation contient quatre faits. A annonce X à B ; B confirme X ; B annonce Y à A ; A confirme Y. TCP fusionne les deux faits centraux : SYN X, puis SYN Y, ACK X+1, enfin ACK Y+1.

Le SYN consomme un numéro de séquence, d’où le +1. L’ACK pur n’en consomme pas : si chaque accusé devait lui-même être accusé, l’échange ne finirait jamais. RFC 793 fixa en septembre 1981 ce dialogue et les états SYN-SENT, SYN-RECEIVED et ESTABLISHED.

Aucun registre mondial n’attribue une identité aux connexions. Les deux hôtes font des choix locaux et rendent ces choix compatibles en s’envoyant des preuves interprétables par la même règle.

Le troisième temps engage l’initiateur

Après le SYN-ACK, A a reçu la réponse de B. B, en revanche, ignore encore si A reconnaît cette réponse aujourd’hui. Le premier SYN peut être une copie ancienne ; la machine qui l’avait émis peut avoir perdu tout souvenir de l’échange.

Le dernier ACK nomme le Y choisi par B. Il démontre que l’état actuel du côté A a reçu le défi et sait y répondre. RFC 761 présente ce mécanisme comme un compromis entre mémoire et messages : plutôt que conserver l’historique complet de toutes les séquences antérieures, le récepteur demande une vérification supplémentaire.

Cette preuve ne va pas jusqu’à l’identité. Elle indique qu’un état TCP courant a observé les nombres attendus. Elle ne certifie ni l’utilisateur, ni son droit d’agir, ni l’absence d’un adversaire situé sur le chemin.

Les nombres ont aussi une durée

Un ancien SYN n’est qu’une partie du problème. Les données et accusés d’une liaison fermée peuvent également revenir. Le numéro reste donc occupé, au sens de la sûreté, tant qu’un segment qui le porte peut survivre dans l’internet.

Les premières spécifications retinrent deux minutes comme durée de vie maximale d’un segment, MSL. Après un crash ayant effacé la mémoire des séquences, la machine devait garder le silence pendant un MSL. Avec une mémoire persistante, elle pouvait reprendre au-delà des nombres récents.

TIME-WAIT protège une fermeture normale pendant deux MSL. Il laisse mourir les doublons et permet de renvoyer le dernier ACK. Ce délai n’est pas une file administrative : il conserve précisément le contexte qui empêche un vieux segment de devenir une donnée neuve.

Le texte courant, RFC 9293, maintient ce raisonnement mais juge le silence de redémarrage généralement superflu aujourd’hui. Ports éphémères et ISN sont mieux diversifiés, les paquets s’épuisent plus vite et un redémarrage dure souvent assez longtemps. Pour les débits qui font rapidement boucler les 32 bits, les horodatages et PAWS apportent une barrière supplémentaire.

Lorsque TIME-WAIT fut assassiné

Une protection temporelle disparaît si un raccourci efface l’état trop tôt. RFC 1337 étudia l’« assassinat de TIME-WAIT ». Un vieux segment provoque un ACK ; l’autre hôte, qui ne conserve plus la connexion, renvoie un RST ; ce RST peut tuer prématurément le TIME-WAIT restant.

Une réouverture immédiate expose alors la nouvelle incarnation à d’anciens octets et accusés. Les expériences décrites montrent des données erronées acceptées, une désynchronisation durable et des échecs d’ouverture.

La conclusion n’est pas que trois messages étaient inutiles. Chaque rempart répond à une question différente : le handshake écarte un vieux SYN, les fenêtres de séquence protègent la connexion vivante, TIME-WAIT sépare deux usages successifs du même quadruplet.

Un nombre frais ne donne pas un nom fiable

La lutte contre les doublons n’empêche pas l’usurpation. Un attaquant hors chemin capable de prévoir l’ISN du serveur peut fabriquer l’accusé attendu sans voir la réponse.

RFC 6528 combine un compteur temporel et une fonction secrète du quadruplet. Deux relations différentes n’exposent plus une progression facilement comparable, tandis que le temps continue d’éloigner les incarnations.

La garantie reste limitée. Le calcul rend une devinette aveugle plus difficile ; il ne cache rien à l’observateur du chemin et ne transforme pas TCP en protocole d’authentification. Une identité applicative exige une preuve cryptographique distincte.

Mettre l’état en attente avec le défi

Un serveur public rencontre une autre asymétrie : dès le premier SYN, il peut réserver de la mémoire à une demi-connexion. Le client apparent n’a encore rien confirmé. Une rafale de SYN falsifiés suffit alors à remplir cette ressource.

RFC 4987 retrace la publicité des SYN floods en 1996 et leurs premières conséquences opérationnelles. Le SYN cookie reporte l’allocation. Le serveur encode dans son numéro de SYN-ACK une fonction du quadruplet, du numéro client, du temps, de quelques paramètres et d’un secret. Le dernier ACK permet de vérifier puis de reconstruire l’état nécessaire.

Le défi devient une promesse compacte que le serveur n’a pas besoin de garder en mémoire. Lorsque la preuve revient, l’engagement devient possible. Le nombre de bits limite toutefois certaines négociations, et les mises en œuvre ne font pas toutes le même choix.

Ainsi, l’histoire dépasse la formule scolaire des « trois paquets ». Elle distingue plusieurs autorités : le réseau transporte, chaque extrémité choisit, l’accusé réciproque synchronise, le temps borne le passé, le secret gêne la prédiction et le cookie retarde le coût. Aucune de ces fonctions ne délivre un titre général sur l’identité du pair.

Sources et limites des preuves

Ces RFC établissent des règles, leurs motifs déclarés et quelques analyses de panne ; elles ne fournissent pas une date mondiale d’adoption. L’idée selon laquelle une preuve réciproque transforme deux choix locaux en état partagé est une lecture architecturale de ces mécanismes.