Décrivez la poignée de main TCP en trois temps.
Réponse courte
TCP ouvre une connexion en trois étapes. Le client envoie un SYN avec un numéro de séquence initial, le serveur répond par un SYN-ACK (accusant réception du numéro du client et envoyant le sien), et le client renvoie un ACK. Après cet échange, les deux parties se sont accordées sur les numéros de séquence de départ et la connexion est établie pour une livraison fiable et ordonnée des octets.
La poignée de main en trois temps existe parce que TCP promet ce qu'UDP ne fait pas : une livraison fiable et ordonnée d'un flux d'octets. Pour tenir cette promesse, les deux extrémités doivent s'accorder sur le point de départ du flux avant tout transfert de données applicatives. Cet accord est la poignée de main.
Les trois étapes
- SYN. Le client choisit un numéro de séquence initial (ISN) aléatoire et envoie un segment avec le drapeau SYN activé, annonçant cet ISN. C'est le client qui dit « je veux parler, et mes octets seront numérotés à partir d'ici ».
- SYN-ACK. Le serveur répond avec son propre SYN (son propre ISN) et un ACK accusant réception de l'ISN du client + 1. En un seul segment, le serveur accepte à la fois la connexion et annonce sa propre numérotation.
- ACK. Le client accuse réception de l'ISN du serveur + 1. Les deux parties connaissent maintenant le numéro de séquence de départ de l'autre, et la connexion passe à l'état ESTABLISHED.
Pourquoi les numéros de séquence comptent
Les numéros de séquence permettent à TCP de détecter les pertes, de réordonner les segments arrivés dans le désordre et de rejeter les doublons. Rendre l'ISN aléatoire rend aussi bien plus difficile pour un attaquant hors chemin de falsifier ou injecter des segments dans le flux, car il devrait deviner les numéros.
L'angle sécurité
La poignée de main est aussi une surface d'attaque. Une attaque SYN flood envoie de nombreux SYN sans jamais compléter la troisième étape, épuisant la table des connexions semi-ouvertes du serveur. Les SYN cookies s'en défendent en encodant l'état de connexion dans l'ISN du serveur, de sorte qu'aucune mémoire n'est réservée jusqu'à l'arrivée de l'ACK final.
Les recruteurs veulent entendre les noms des trois paquets dans l'ordre, que les numéros de séquence sont synchronisés (et non des données envoyées), et idéalement une allusion aux SYN floods.
Questions de suivi probables
- Qu'est-ce qu'une attaque SYN flood et comment un SYN cookie s'en défend-il ?
- Comment TCP ferme-t-il une connexion, et quel est le rôle de TIME_WAIT ?
- Pourquoi TCP rend-il aléatoire le numéro de séquence initial ?