Processus de connexion TCP (Three-Way Handshake)
Définition
Le Three-Way Handshake est le processus en trois étapes par lequel deux hôtes établissent une connexion TCP fiable avant d'échanger des données. Il synchronise les numéros de séquence et confirme que les deux extrémités sont prêtes à communiquer.
Contexte
La certification CCST couvre le handshake TCP car il est fondamental pour comprendre comment les connexions fiables sont établies et pourquoi TCP garantit la livraison des données, contrairement à UDP. C'est aussi la base pour comprendre les attaques de type SYN flood.
Détails techniques
Les 3 étapes du handshake
Client Serveur
| |
|---- SYN (seq=100) ----------->| Étape 1
| |
|<--- SYN-ACK (seq=300,ack=101)-| Étape 2
| |
|---- ACK (seq=101,ack=301) --->| Étape 3
| |
|==== Connexion établie ========|
| Étape | Drapeau | Description |
|---|---|---|
| 1 | SYN | Le client envoie un segment SYN avec son numéro de séquence initial (ISN) |
| 2 | SYN-ACK | Le serveur répond avec son propre ISN et acquitte le SYN du client (ACK = ISN client + 1) |
| 3 | ACK | Le client acquitte le SYN du serveur. La connexion est ESTABLISHED |
Numéros de séquence et d'acquittement
| Champ | Rôle |
|---|---|
| Sequence Number | Identifie le premier octet de données dans ce segment |
| Acknowledgment Number | Indique le prochain octet attendu de l'autre côté |
| Window Size | Nombre d'octets que le récepteur peut accepter avant un ACK |
Drapeaux TCP (flags)
| Flag | Bit | Usage |
|---|---|---|
| SYN | Synchronize | Initiation de connexion |
| ACK | Acknowledgment | Acquittement de données reçues |
| FIN | Finish | Demande de fermeture de connexion |
| RST | Reset | Réinitialisation forcée de la connexion |
| PSH | Push | Livraison immédiate à l'application |
| URG | Urgent | Données prioritaires |
Fermeture de connexion (Four-Way Termination)
Client Serveur
|---- FIN --------------------->|
|<--- ACK ---------------------|
|<--- FIN ---------------------|
|---- ACK --------------------->|
Chaque côté envoie un FIN et reçoit un ACK. Le client entre en état TIME_WAIT pendant 2 × MSL (Maximum Segment Lifetime) avant de libérer le socket.
Attaque SYN Flood
Un attaquant envoie des milliers de SYN sans compléter le handshake. Le serveur maintient des connexions half-open qui consomment de la mémoire jusqu'à épuisement. Contre-mesure : SYN cookies sur le serveur.
Exemple concret
Un navigateur ouvre https://www.example.com. Le client envoie un SYN vers le port 443 du serveur. Le serveur répond SYN-ACK. Le client complète avec ACK. La connexion TCP est établie. Ensuite, le handshake TLS commence par-dessus cette connexion TCP. Si le SYN-ACK n'arrive jamais (pare-feu, serveur down), le client retransmet le SYN 3 fois avant d'abandonner avec un timeout.