2. Vue d'ensemble du protocole (Protocol Overview)
Ce chapitre décrit le flux de travail complet de TCP Fast Open, incluant les processus de demande, d'octroi et d'utilisation du cookie.
2.1. Demande de cookie TFO (Cookie Request)
Lors de la première connexion à un serveur, le client doit d'abord obtenir un cookie TFO.
Flux de messages
Client Serveur
| |
| SYN + demande cookie TFO (vide) |
|---------------------------------->|
| |
| SYN-ACK + cookie TFO |
|<----------------------------------|
| |
| ACK |
|---------------------------------->|
| |
| Données applicatives |
|<--------------------------------->|
Format de l'option TCP
Option de demande de cookie :
- Kind : 34 (TCP Fast Open)
- Length : 2 (en-tête d'option uniquement, sans données de cookie)
- Cookie : vide (indique une demande de cookie)
Points clés
- Transparence : les serveurs ne supportant pas TFO ignorent cette option, la connexion s'établit normalement
- Compatibilité : le client DOIT être prêt à revenir à la triple poignée de main TCP standard
- Mise en cache du cookie : le client DEVRAIT mettre en cache le cookie reçu pour les connexions ultérieures
2.2. Réponse au cookie TFO (Cookie Response)
Après réception d'une demande de cookie, le serveur génère et retourne le cookie.
Algorithme de génération du cookie
Le serveur utilise les informations suivantes pour générer le cookie :
- Adresse IP du client
- Clé secrète du serveur (Server Secret)
- Horodatage (Timestamp) (pour l'expiration du cookie)
Exemple de fonction de chiffrement :
Cookie = AES-128(ServerSecret, ClientIP || Timestamp)
Format de l'option TCP
Option d'octroi de cookie :
- Kind : 34
- Length : 6 à 18 (2 octets d'en-tête + 4 à 16 octets de cookie)
- Cookie : jeton chiffré généré par le serveur
Comportement du serveur
- DOIT : inclure l'option cookie TFO dans le SYN-ACK
- DEVRAIT : utiliser un algorithme de chiffrement suffisamment robuste pour générer le cookie
- DOIT : renouveler périodiquement la clé secrète du serveur pour renforcer la sécurité
2.3. Connexion TCP Fast Open (Fast Open Connection)
Le client utilise le cookie mis en cache lors des connexions suivantes pour réaliser le Fast Open.
Flux de messages
Client Serveur
| |
| SYN + cookie TFO + données |
|---------------------------------->|
| | (vérification du cookie)
| | (traitement des données)
| SYN-ACK + données |
|<----------------------------------|
| |
| ACK |
|---------------------------------->|
| |
| Données supplémentaires |
|<--------------------------------->|
Avantages clés
Économie de latence :
- TCP traditionnel : 1 RTT (poignée de main) + 1 RTT (requête-réponse) = 2 RTT
- TCP Fast Open : 1 RTT (poignée de main + requête-réponse) = économie de 1 RTT
Limitation des données SYN
Pour prévenir les attaques par amplification, les données dans le paquet SYN sont limitées :
-
Longueur maximale des données :
- Implémentation Linux : limite par défaut au MSS (Maximum Segment Size)
- Valeur typique : environ 1460 octets (MTU Ethernet 1500 - en-têtes IP/TCP)
-
Exigences sur les données :
- DOIT : les données doivent être idempotentes (peuvent être retransmises en toute sécurité)
- DEVRAIT : les données devraient constituer une requête complète (par exemple, une requête HTTP complète)
Flux de validation du serveur
Lorsque le serveur reçoit un SYN Fast Open :
1. Vérification du cookie TFO
├─ Valide → accepter les données SYN, entrer dans l'état SYN-RECEIVED
└─ Invalide → rejeter les données SYN, traiter selon la poignée de main TCP standard
2. Si le cookie est valide
├─ Transmettre les données SYN à la couche applicative
├─ L'application peut traiter immédiatement et générer une réponse
└─ Transporter les données de réponse dans le SYN-ACK (optionnel)
3. Compléter la triple poignée de main
└─ Après réception de l'ACK, la connexion entre dans l'état ESTABLISHED
2.4. Réutilisation du cookie (Cookie Reuse)
Cycle de vie du cookie
Gestion de la validité :
- Durée de validité typique : de quelques heures à quelques jours
- Stratégie de mise à jour : le client peut demander périodiquement un nouveau cookie
- Gestion de l'expiration : après expiration du cookie, le serveur refuse le Fast Open, le client revient à la poignée de main standard
Scénarios d'invalidation du cookie
Le cookie peut devenir invalide dans les situations suivantes :
- Expiration temporelle : dépassement de la durée de validité définie par le serveur
- Rotation de la clé du serveur : le serveur fait tourner sa clé de chiffrement
- Changement d'adresse IP : l'adresse IP du client change (réseau mobile)
- Politique du serveur : le serveur révoque activement le cookie (raisons de sécurité)
Stratégie de mise en cache côté client
Fonctionnalités que le client DEVRAIT implémenter :
- Mettre en cache un cookie distinct pour chaque IP:Port de serveur
- Implémenter la gestion de l'expiration des cookies
- Redemander automatiquement un cookie lorsque celui-ci expire
- Gérer les cookies pour plusieurs serveurs
Mécanisme de repli
Lorsque le Fast Open échoue, le client DOIT pouvoir revenir en arrière :
Tentative de Fast Open
├─ Succès → continuer à utiliser
├─ Cookie rejeté → compléter la poignée de main standard, demander un nouveau cookie
└─ Délai d'attente → retransmettre SYN (éventuellement sans données)
2.5. Résumé des interactions du protocole (Protocol Interaction Summary)
Cycle de vie complet
Phase 1 : Initialisation
Client ──SYN(demande cookie)──> Serveur
Client <──SYN-ACK(cookie)─── Serveur
Client ──ACK──────────────> Serveur
[Client met en cache le cookie]
Phase 2 : Fast Open (plusieurs fois)
Client ──SYN(cookie+données)──> Serveur
Client <──SYN-ACK(données)───── Serveur
Client ──ACK──────────────> Serveur
[Économie de 1 RTT]
Phase 3 : Mise à jour du cookie (si nécessaire)
Répéter la phase 1
Indicateurs de performance
| Type de connexion | Début de transmission des données | Performance relative |
|---|---|---|
| TCP standard | 1,5 RTT | Référence |
| TFO (première fois) | 1,5 RTT | Identique au TCP standard |
| TFO (suivantes) | 0,5 RTT | Amélioration de 66 % |
Matrice de compatibilité
| Client | Serveur | Résultat |
|---|---|---|
| Supporte TFO | Supporte TFO | Fast Open réussi |
| Supporte TFO | Ne supporte pas TFO | Repli vers TCP standard |
| Ne supporte pas TFO | Supporte TFO | TCP standard |
| Ne supporte pas TFO | Ne supporte pas TFO | TCP standard |
Section suivante : 3. Détails du protocole (Protocol Details) présentera en profondeur le format des options TFO, la machine à états et les détails d'implémentation.