RFC 9293 - Protocole de Contrôle de Transmission (Transmission Control Protocol)
- Statut: Internet Standard
- Publié: August 2022
- Stream: IETF
- Met à jour: RFC1011, RFC1122, RFC5961
- Remplace: RFC793, RFC879, RFC2873, RFC6093, RFC6429, RFC6528, RFC6691
- Errata: Pas d'errata
Résumé (Abstract)
Ce document spécifie le Protocole de Contrôle de Transmission (Transmission Control Protocol, TCP). TCP est un protocole important de la couche transport dans la pile de protocoles Internet, et il a continuellement évolué au cours de décennies d'utilisation et de croissance d'Internet. Pendant cette période, un certain nombre de changements ont été apportés à TCP tel qu'il était spécifié dans le RFC 793, bien que ceux-ci n'aient été documentés que de manière fragmentaire. Ce document rassemble ces changements avec la spécification du protocole du RFC 793.
Ce document rend obsolètes le RFC 793, ainsi que les RFC 879, 2873, 6093, 6429, 6528 et 6691 qui ont mis à jour des parties du RFC 793. Il met à jour les RFC 1011 et 1122, et il devrait être considéré comme un remplacement pour les portions de ces documents traitant des exigences TCP. Il met également à jour le RFC 5961 en ajoutant une petite clarification dans la gestion des réinitialisations dans l'état SYN-RECEIVED. Les bits de contrôle d'en-tête TCP du RFC 793 ont également été mis à jour sur la base du RFC 3168.
Table des Matières (Table of Contents)
- 1. Objectif et Portée (Purpose and Scope)
- 2. Introduction
- 2.1 Langage d'Exigences
- 2.2 Concepts TCP Clés
- 3. Spécification Fonctionnelle (Functional Specification)
- 3.1 Format d'En-tête
- 3.2 Définitions d'Options Spécifiques
- 3.3 Aperçu de la Terminologie TCP
- 3.4 Numéros de Séquence
- 3.5 Établissement d'une Connexion
- 3.6 Fermeture d'une Connexion
- 3.7 Segmentation
- 3.8 Communication de Données
- 3.9 Interfaces
- 3.10 Traitement des Événements
- 4. Glossaire (Glossary)
- 5. Changements par rapport au RFC 793 (Changes from RFC 793)
- 6. Considérations de Sécurité (Security Considerations)
- 7. Considérations IANA (IANA Considerations)
- 8. Références (References)
- 8.1 Références Normatives
- 8.2 Références Informatives
Annexes (Appendices)
- Annexe A. Diagramme d'État de Connexion TCP
- Annexe B. Résumé des Exigences TCP
- Annexe C. Vérification TCP
Ressources Connexes
- Texte officiel: RFC 9293
- Page officielle: RFC 9293 DataTracker
- Errata: RFC Editor Errata
- STD 7: Ce document fait partie de la Norme Internet 7
Référence Rapide
Qu'est-ce que TCP?
TCP (Transmission Control Protocol, Protocole de Contrôle de Transmission) est un protocole central de la couche transport dans la pile de protocoles Internet, fournissant:
- Orienté Connexion - Établit une connexion avant la communication
- Transmission Fiable - Garantit l'arrivée correcte des données
- Livraison Ordonnée - Reçoit les données dans l'ordre d'envoi
- Contrôle de Flux - Empêche la surcharge du récepteur
- Contrôle de Congestion - Évite la congestion du réseau
Fonctionnalités Principales
- ✅ Poignée de Main à Trois Voies - Établissement de connexion
- ✅ Mécanisme de Numéro de Séquence - Garantit l'ordre et la fiabilité
- ✅ Accusé de Réception - Confirmation de l'arrivée des données
- ✅ Retransmission par Temporisation - Gère la perte de paquets
- ✅ Fenêtre Glissante - Contrôle de flux
- ✅ Contrôle de Congestion - Stabilité du réseau
TCP vs UDP
| Fonctionnalité | TCP | UDP |
|---|---|---|
| Connexion | Orienté connexion | Sans connexion |
| Fiabilité | Fiable | Non fiable |
| Ordonnancement | Garanti | Non garanti |
| Vitesse | Plus lent | Plus rapide |
| Surcharge | Plus élevée | Plus faible |
| Cas d'usage | HTTP, SMTP, FTP, SSH | DNS, Streaming vidéo, Jeux |
Importance du RFC 9293
RFC 9293 vs RFC 793:
- RFC 793 (1981) - Spécification TCP originale
- RFC 9293 (2022) - Norme la plus récente, consolidant 40 ans d'évolution
- Rend obsolète le RFC 793 et plusieurs mises à jour
- Clarifie les exigences d'implémentation TCP modernes
- Met à jour les meilleures pratiques de sécurité et de performance
Améliorations Majeures:
- Consolide toutes les extensions et errata TCP
- Clarifie les options obligatoires
- Met à jour les exigences de contrôle de congestion
- Améliore les considérations de sécurité
- Reflète l'environnement réseau moderne
Ports TCP Courants
- HTTP: 80
- HTTPS: 443
- SMTP: 25
- FTP: 20, 21
- SSH: 22
- Telnet: 23
- POP3: 110
- IMAP: 143
RFC Connexes:
- RFC 768 - UDP (User Datagram Protocol)
- RFC 791 - IP (Internet Protocol)
- RFC 5681 - Contrôle de Congestion TCP
- RFC 7323 - Extensions TCP (Mise à l'échelle de fenêtre, Horodatages)
- RFC 7413 - TCP Fast Open
- RFC 8200 - Spécification IPv6
Annexe B. Résumé des Exigences TCP
Cette annexe résume toutes les exigences d'implémentation marquées avec les mots-clés RFC 2119 (MUST, SHOULD, MAY, etc.) dans RFC 9293.
Exigences de Protocole de Base
Exigences MUST (Obligatoire)
-
Format d'En-tête
- Les implémentations TCP DOIVENT suivre le format d'en-tête défini dans RFC 9293
- Les bits réservés DOIVENT être mis à zéro
- Le champ de somme de contrôle DOIT toujours être calculé et envoyé
-
Traitement des Options
- DOIT prendre en charge l'option de Taille Maximale de Segment (MSS) (Kind 2)
- DOIT ignorer les options non reconnues
- DOIT prendre en charge Fin de Liste d'Options (EOL, Kind 0) et No-Operation (NOP, Kind 1)
-
Numéros de Séquence
- Le Numéro de Séquence Initial (ISN) DOIT être choisi de manière imprévisible
- Les numéros de séquence DOIVENT suivre chaque octet de données
-
Gestion de Connexion
- DOIT utiliser la poignée de main à trois voies pour établir les connexions
- DOIT suivre les transitions d'état appropriées
- DOIT implémenter l'état TIME-WAIT
-
Transmission de Données
- DOIT livrer les données reçues dans l'ordre
- DOIT valider la somme de contrôle des segments
- DOIT respecter la taille de fenêtre
-
Gestion des Erreurs
- DOIT rejeter les segments avec des sommes de contrôle invalides
- DOIT envoyer RST pour les états invalides
Exigences SHOULD (Recommandé)
-
Performance
- Les implémentations DEVRAIENT prendre en charge l'option de Mise à l'échelle de Fenêtre (RFC 7323)
- Les implémentations DEVRAIENT prendre en charge l'option d'Horodatage (RFC 7323)
- Les implémentations DEVRAIENT prendre en charge SACK (Selective Acknowledgment, RFC 2018)
-
Contrôle de Congestion
- Les implémentations DEVRAIENT utiliser des algorithmes de contrôle de congestion appropriés
- DEVRAIT suivre les algorithmes définis dans RFC 5681
-
Sécurité
- Les implémentations DEVRAIENT se protéger contre les attaques ISN prévisibles
- Les implémentations DEVRAIENT atténuer les attaques à l'aveugle dans la fenêtre (RFC 5961)
Exigences MAY (Optionnel)
-
Fonctionnalités Optionnelles
- Les implémentations PEUVENT prendre en charge le mécanisme de pointeur urgent
- Les implémentations PEUVENT prendre en charge des options TCP supplémentaires
-
Optimisations
- Les implémentations PEUVENT implémenter l'algorithme de Nagle
- Les implémentations PEUVENT utiliser le mécanisme d'ACK retardé
Exigences Détaillées par Catégorie
1. Traitement des Options
Obligatoire (MUST):
- Kind 0 (EOL): Fin de Liste d'Options
- Kind 1 (NOP): No-Operation
- Kind 2 (MSS): Taille Maximale de Segment
Recommandé (SHOULD):
- Kind 3: Mise à l'échelle de Fenêtre (RFC 7323)
- Kind 4,5: SACK Autorisé et SACK (RFC 2018)
- Kind 8: Horodatages (RFC 7323)
Optionnel (MAY):
- Autres options standardisées
2. Numéros de Séquence
Obligatoire (MUST):
- L'ISN DOIT être généré en utilisant un générateur de nombres aléatoires cryptographiquement sûr
- Les numéros de séquence DOIVENT suivre chaque octet de données
- DOIT détecter et rejeter les segments dupliqués
Recommandé (SHOULD):
- DEVRAIT se protéger contre les attaques de numéro de séquence (RFC 6528)
3. Gestion de Connexion
Obligatoire (MUST):
- DOIT implémenter la poignée de main à trois voies
- DOIT suivre les transitions d'état de connexion appropriées
- DOIT maintenir l'état TIME-WAIT pendant au moins 2MSL
- DOIT gérer l'ouverture et la fermeture simultanées
Recommandé (SHOULD):
- DEVRAIT atténuer les attaques par inondation SYN avec SYN cookies ou mécanisme équivalent
4. Transmission de Données
Obligatoire (MUST):
- DOIT livrer les données dans l'ordre
- DOIT respecter les limites de taille de fenêtre
- DOIT valider les sommes de contrôle
- DOIT retransmettre les segments perdus
Recommandé (SHOULD):
- DEVRAIT implémenter des mécanismes de temporisation appropriés
- DEVRAIT utiliser des algorithmes de contrôle de congestion
5. Gestion des Erreurs
Obligatoire (MUST):
- DOIT rejeter les segments avec des sommes de contrôle invalides
- DOIT envoyer RST pour les états invalides
- DOIT gérer correctement les ACK hors limites
Recommandé (SHOULD):
- DEVRAIT atténuer les attaques de réinitialisation à l'aveugle (RFC 5961)
Liste de Vérification d'Implémentation
Fonctionnalités de Base
- Traitement complet de l'en-tête TCP
- Poignée de main à trois voies
- Fermeture de connexion à quatre voies
- Gestion des numéros de séquence
- Calcul et validation de somme de contrôle
- Contrôle de flux de base (mécanisme de fenêtre)
- Mécanisme de retransmission
- Gestion de l'état TIME-WAIT
Options Obligatoires
- Option MSS (Taille Maximale de Segment)
- EOL (Fin de Liste d'Options)
- NOP (No-Operation)
Fonctionnalités Recommandées
- Mise à l'échelle de Fenêtre (RFC 7323)
- Option d'Horodatage (RFC 7323)
- SACK (Selective Acknowledgment, RFC 2018)
- Contrôle de Congestion approprié (RFC 5681)
- ECN (Explicit Congestion Notification, RFC 3168)
Fonctionnalités de Sécurité
- Génération sûre d'ISN
- Protection contre l'inondation SYN
- Atténuation des attaques à l'aveugle dans la fenêtre (RFC 5961)
- Validation des numéros de séquence
Optimisations de Performance
- ACK retardé
- Algorithme de Nagle
- Retransmission rapide et récupération rapide
- Mesure RTT appropriée
Définitions des Niveaux d'Exigence
Comme défini dans RFC 2119:
- MUST / REQUIRED / SHALL: Exigence absolue
- MUST NOT / SHALL NOT: Interdiction absolue
- SHOULD / RECOMMENDED: Devrait être suivi sauf raison valable
- SHOULD NOT / NOT RECOMMENDED: Devrait être évité sauf raison valable
- MAY / OPTIONAL: Élément véritablement optionnel
Note: Pour les détails complets des exigences et le contexte, référez-vous au corps de RFC 9293. Cette annexe fournit un résumé pratique mais ne remplace pas la spécification officielle.