Aller au contenu principal

1. Introduction

Le Transmission Control Protocol (TCP) est destiné à être utilisé comme un protocole hôte-à-hôte (host-to-host protocol) hautement fiable entre des hôtes dans des réseaux de communication informatique à commutation de paquets, et dans des systèmes interconnectés de tels réseaux.

Ce document décrit les fonctions à exécuter par le Transmission Control Protocol, le programme qui l'implémente, et son interface avec les programmes ou les utilisateurs qui nécessitent ses services.


1.1. Motivation

Les systèmes de communication informatique jouent un rôle de plus en plus important dans les environnements militaires, gouvernementaux et civils. Ce document se concentre principalement sur les exigences de communication informatique militaire, en particulier la robustesse en présence d'une communication peu fiable et la disponibilité en présence de congestion, mais beaucoup de ces problèmes se retrouvent également dans le secteur civil et gouvernemental.

À mesure que les réseaux de communication informatique stratégiques et tactiques sont développés et déployés, il est essentiel de fournir des moyens de les interconnecter et de fournir des protocoles de communication interprocessus (interprocess communication protocols) standards qui peuvent prendre en charge une large gamme d'applications. En prévision du besoin de telles normes, le sous-secrétaire adjoint à la Défense pour la recherche et l'ingénierie a déclaré que le Transmission Control Protocol (TCP) décrit ici serait la base de la standardisation des protocoles de communication interprocessus à l'échelle du DoD.

Caractéristiques clés de TCP

TCP est un protocole fiable de bout en bout orienté connexion (connection-oriented, end-to-end reliable protocol) conçu pour s'adapter à une hiérarchie de protocoles en couches qui prennent en charge les applications multi-réseaux. Le TCP fournit une communication interprocessus fiable entre des paires de processus dans des ordinateurs hôtes attachés à des réseaux de communication informatique distincts mais interconnectés.

TCP fait très peu d'hypothèses sur la fiabilité des protocoles de communication en dessous de la couche TCP. TCP suppose qu'il peut obtenir un service de datagramme simple et potentiellement peu fiable (datagram service) des protocoles de niveau inférieur. En principe, le TCP devrait pouvoir fonctionner au-dessus d'un large spectre de systèmes de communication allant des connexions câblées aux réseaux à commutation de paquets ou à commutation de circuits.

Fondement théorique

TCP est basé sur des concepts décrits pour la première fois par Cerf et Kahn dans [1]. Le TCP s'inscrit dans une architecture de protocole en couches juste au-dessus d'un protocole Internet de base (Internet Protocol, [2]) qui fournit un moyen pour le TCP d'envoyer et de recevoir des segments d'informations de longueur variable enfermés dans des « enveloppes » de datagrammes internet (internet datagram). Le datagramme internet fournit un moyen d'adresser les TCP source et destination dans différents réseaux. Le protocole Internet gère également toute fragmentation (fragmentation) ou réassemblage (reassembly) des segments TCP nécessaires pour réaliser le transport et la livraison à travers plusieurs réseaux et passerelles interconnectées. Le protocole Internet transporte également des informations sur la priorité (precedence), la classification de sécurité (security classification) et le compartimentage (compartmentation) des segments TCP, de sorte que ces informations peuvent être communiquées de bout en bout à travers plusieurs réseaux.

Hiérarchisation des protocoles (Protocol Layering)

+---------------------+
| higher-level | ← Protocoles de couche application (HTTP, FTP, SMTP, etc.)
+---------------------+
| TCP | ← Couche transport (ce protocole)
+---------------------+
| Internet Protocol | ← Couche réseau (RFC 791)
+---------------------+
|communication network| ← Couche liaison/physique
+---------------------+

Une grande partie de ce document est écrite dans le contexte d'implémentations TCP qui coexistent avec des protocoles de niveau supérieur dans l'ordinateur hôte. Certains systèmes informatiques seront connectés aux réseaux via des ordinateurs frontaux (front-end computers) qui hébergent les couches TCP et protocole Internet, ainsi que des logiciels spécifiques au réseau. La spécification TCP décrit une interface vers les protocoles de niveau supérieur qui semble être implémentable même pour le cas frontal, tant qu'un protocole hôte-à-frontal approprié est implémenté.


1.2. Scope (Portée)

Le TCP est destiné à fournir un service de communication processus-à-processus fiable (reliable process-to-process communication service) dans un environnement multi-réseaux (multinetwork environment). Le TCP est destiné à être un protocole hôte-à-hôte couramment utilisé dans plusieurs réseaux.


1.3. About This Document (À propos de ce document)

Ce document représente une spécification du comportement requis de toute implémentation TCP, à la fois dans ses interactions avec les protocoles de niveau supérieur et dans ses interactions avec d'autres TCP. Le reste de cette section offre une vue très brève des interfaces et du fonctionnement du protocole.

Structure du document

  • Section 2 : Résume la base philosophique (philosophical basis) de la conception TCP
  • Section 3 : Offre une description détaillée de :
    • Les actions requises du TCP lorsque divers événements se produisent (arrivée de nouveaux segments, appels utilisateur, erreurs, etc.)
    • Les détails des formats de segments TCP

1.4. Interfaces

Le TCP interagit d'un côté avec les utilisateurs ou les processus d'application (application processes) et de l'autre côté avec un protocole de niveau inférieur tel que le protocole Internet.

Interface TCP/Utilisateur (TCP/User Interface)

L'interface entre un processus d'application et le TCP est illustrée avec des détails raisonnables. Cette interface consiste en un ensemble d'appels très similaires aux appels qu'un système d'exploitation fournit à un processus d'application pour manipuler des fichiers.

Appels d'interface principaux :

  • OPEN : Ouvrir une connexion
  • CLOSE : Fermer une connexion
  • SEND : Envoyer des données sur une connexion établie
  • RECEIVE : Recevoir des données sur une connexion établie

Le TCP peut également communiquer de manière asynchrone (asynchronously communicate) avec les programmes d'application. Bien qu'une liberté considérable soit accordée aux implémenteurs TCP pour concevoir des interfaces appropriées à un environnement de système d'exploitation particulier, une fonctionnalité minimale (minimum functionality) est requise au niveau de l'interface TCP/utilisateur pour toute implémentation valide.

Interface TCP/Protocole de niveau inférieur (TCP/Lower Level Protocol Interface)

L'interface entre TCP et le protocole de niveau inférieur est essentiellement non spécifiée (essentially unspecified) sauf qu'il est supposé qu'il existe un mécanisme par lequel les deux niveaux peuvent transmettre des informations l'un à l'autre de manière asynchrone. En général, on s'attend à ce que le protocole de niveau inférieur spécifie cette interface.

TCP est conçu pour fonctionner dans un environnement très général de réseaux interconnectés. Le protocole de niveau inférieur supposé tout au long de ce document est le protocole Internet (Internet Protocol, [2]).


1.5. Operation (Fonctionnement)

Comme indiqué ci-dessus, l'objectif principal du TCP est de fournir un service de circuit logique ou de connexion fiable et sécurisable (reliable, securable logical circuit or connection service) entre des paires de processus. Pour fournir ce service au-dessus d'un système de communication Internet moins fiable, des facilités sont nécessaires dans les domaines suivants :

Aperçu des fonctions principales

1. Basic Data Transfer (Transfert de données de base)

Le TCP est capable de transférer un flux continu d'octets dans chaque direction entre ses utilisateurs en empaquetant un certain nombre d'octets (octets) dans des segments (segments) pour transmission à travers le système Internet. En général, les TCP décident eux-mêmes du moment où bloquer et transférer les données.

Fonction Push (Push Function) : Parfois, les utilisateurs doivent s'assurer que toutes les données qu'ils ont soumises au TCP ont été transmises. À cette fin, une fonction push est définie. Pour s'assurer que les données soumises à un TCP sont effectivement transmises, l'utilisateur émetteur indique qu'elles doivent être poussées (pushed) vers l'utilisateur récepteur. Un push provoque le transfert et la livraison immédiats des données jusqu'à ce point au récepteur par les TCP. Le point de push exact peut ne pas être visible pour l'utilisateur récepteur et la fonction push ne fournit pas de marqueur de limite d'enregistrement (record boundary marker).

2. Reliability (Fiabilité)

Le TCP doit (must) récupérer des données endommagées, perdues, dupliquées ou livrées dans le désordre par le système de communication Internet. Cela est réalisé en attribuant un numéro de séquence (sequence number) à chaque octet transmis et en exigeant un accusé de réception positif (positive acknowledgment, ACK) du TCP récepteur. Si l'ACK n'est pas reçu dans un intervalle de temporisation, les données sont retransmises. Au niveau du récepteur, les numéros de séquence sont utilisés pour ordonner correctement les segments qui peuvent être reçus dans le désordre et pour éliminer les duplicatas. Les dommages sont traités en ajoutant une somme de contrôle (checksum) à chaque segment transmis, en la vérifiant au récepteur et en rejetant les segments endommagés.

Mécanismes de fiabilité :

  • Temporisation et retransmission : Si l'ACK n'est pas reçu dans l'intervalle de temporisation, les données sont retransmises
  • Séquençage : Au récepteur, les numéros de séquence sont utilisés pour ordonner correctement les segments reçus dans le désordre
  • Élimination des duplicatas : Éliminer les segments en double
  • Somme de contrôle : Gérer les dommages en ajoutant une somme de contrôle à chaque segment transmis, en la vérifiant au récepteur et en rejetant les segments endommagés

Tant que les TCP continuent de fonctionner correctement et que le système Internet ne devient pas complètement partitionné (completely partitioned), aucune erreur de transmission n'affectera la livraison correcte des données. TCP récupère des erreurs du système de communication Internet.

3. Flow Control (Contrôle de flux)

TCP fournit un moyen pour le récepteur de régir la quantité de données envoyées par l'émetteur. Cela est réalisé en renvoyant une « fenêtre » (window) avec chaque ACK indiquant une plage de numéros de séquence acceptables au-delà du dernier segment reçu avec succès. La fenêtre indique un nombre autorisé d'octets que l'émetteur peut (may) transmettre avant de recevoir une autorisation supplémentaire.

Fenêtre glissante (Sliding Window) : La fenêtre indique le nombre d'octets autorisés que l'émetteur peut transmettre avant de recevoir une autorisation supplémentaire.

4. Multiplexing (Multiplexage)

Pour permettre à de nombreux processus au sein d'un seul hôte d'utiliser simultanément les facilités de communication TCP, le TCP fournit un ensemble d'adresses ou de ports (ports) dans chaque hôte. Concaténé avec les adresses réseau et hôte de la couche de communication Internet, cela forme un socket. Une paire de sockets identifie de manière unique chaque connexion. C'est-à-dire qu'un socket peut (may) être utilisé simultanément dans plusieurs connexions.

Liaison de port (Port Binding) :

  • La liaison des ports aux processus est gérée indépendamment par chaque hôte
  • Les processus fréquemment utilisés (par exemple, un « logger » ou un service de partage de temps) sont attachés à des sockets fixes qui sont rendus publics
  • Ces services peuvent être accessibles via des adresses connues
  • L'établissement et l'apprentissage des adresses de port d'autres processus peuvent (may) impliquer des mécanismes plus dynamiques

5. Connections (Connexions)

Les mécanismes de fiabilité et de contrôle de flux décrits ci-dessus exigent que les TCP initialisent et maintiennent certaines informations d'état (status information) pour chaque flux de données. La combinaison de ces informations, y compris les sockets, les numéros de séquence et les tailles de fenêtre, est appelée connexion (connection). Chaque connexion est spécifiée de manière unique par une paire de sockets identifiant ses deux côtés.

Cycle de vie de la connexion :

  1. Établissement : Lorsque deux processus souhaitent communiquer, leurs TCP doivent (must) d'abord établir une connexion (initialiser les informations d'état de chaque côté)
  2. Utilisation : Phase de transfert de données
  3. Terminaison : Lorsque la communication est terminée, la connexion est terminée (terminated) ou fermée (closed) pour libérer les ressources pour d'autres utilisations

Poignée de main à trois voies (Three-Way Handshake) : Étant donné que les connexions doivent (must) être établies entre des hôtes peu fiables et sur le système de communication Internet peu fiable, un mécanisme de poignée de main avec des numéros de séquence basés sur l'horloge (handshake mechanism with clock-based sequence numbers) est utilisé pour éviter l'initialisation erronée des connexions.

6. Precedence and Security (Priorité et sécurité)

Les utilisateurs de TCP peuvent (may) indiquer la sécurité et la priorité de leur communication. Des valeurs par défaut sont prévues pour être utilisées lorsque ces fonctionnalités ne sont pas nécessaires.


Considérations d'implémentation (Implementation Considerations)

Exigences fonctionnelles minimales

Toute implémentation TCP valide doit (must) fournir :

  1. Gestion des connexions (établissement, maintenance, terminaison)
  2. Transfert de données fiable (accusé de réception, retransmission, séquençage)
  3. Contrôle de flux (fenêtre glissante)
  4. Multiplexage (gestion des ports)
  5. Détection d'erreurs (somme de contrôle)

Flexibilité

Bien que cette spécification définisse le comportement TCP, les implémenteurs ont une liberté considérable en ce qui concerne :

  • La conception de la structure de données interne
  • L'approche d'intégration avec les systèmes d'exploitation
  • Les stratégies d'optimisation des performances
  • Les formes spécifiques des interfaces utilisateur

Relation avec d'autres protocoles (Relation to Other Protocols)

Couche application :  HTTP, FTP, SMTP, Telnet, etc.

Couche transport : TCP (ce protocole) | UDP (RFC 768)

Couche réseau : IP (RFC 791)

Couche liaison : Ethernet, Wi-Fi, etc.

TCP réside dans la couche transport de la pile de protocoles, fournissant des services de communication fiables de bout en bout à la couche application, et s'appuie sur le protocole IP de la couche réseau pour le routage et l'adressage.


Suivant : 2. Philosophy (Philosophie) - Exploration approfondie de la philosophie de conception de TCP et des fondements théoriques