Le protocole TCP : fonctionnement et rôle dans Internet

Le protocole TCP : fonctionnement et rôle dans Internet
Sommaire9 sections
  1. 01Ce que fait concrètement TCP
  2. 02Le rôle de TCP entre les applications et le réseau
  3. 03Le multiplexage, ou comment plusieurs applications partagent une ligne
  4. 04La structure d'un segment TCP
  5. 05Comment TCP garantit la fiabilité du transfert
  6. 06Établir une connexion : la poignée de main en trois temps
  7. 07La fenêtre glissante : réguler le trafic sans tout confirmer
  8. 08Comment se termine une connexion TCP
  9. 09Pour aller plus loin

TCP veut dire Transmission Control Protocol, protocole de contrôle de transmission en français. C'est l'un des protocoles principaux de la couche transport du modèle TCP/IP, chargé de gérer les données qui transitent entre les applications et la couche réseau, c'est-à-dire le protocole adresse IP. Quand une application transmet des données au protocole IP, celui-ci les encapsule dans des datagrammes et indique, dans un champ dédié, que le protocole transporté est TCP.

TCP est un protocole orienté connexion : contrairement à un envoi à l'aveugle, il permet à deux machines de vérifier en continu l'état de leur transmission, segment par segment.

Ce que fait concrètement TCP

Le protocole assure plusieurs tâches à la fois :

  • Il remet en ordre les datagrammes reçus du protocole IP, qui peuvent arriver dans le désordre.
  • Il surveille le flot de données pour éviter de saturer le réseau.
  • Il découpe les données en segments de longueur variable avant de les transmettre à IP.
  • Il multiplexe les données, c'est-à-dire qu'il fait circuler sur une même ligne des informations venant de plusieurs applications à la fois.
  • Il gère l'ouverture et la fermeture propres d'une communication.

Le rôle de TCP entre les applications et le réseau

TCP permet à deux applications de communiquer de façon fiable grâce à son système d'accusés de réception, sans que la couche réseau ait besoin de s'en soucier. Les routeurs, qui travaillent au niveau de la couche Internet, se contentent d'acheminer les datagrammes : ils ne vérifient rien, ce travail revient entièrement à la couche transport et donc à TCP.

Une communication TCP met toujours en présence deux rôles, ceux d'un Client-Serveur classique. La machine qui demande la connexion est le client, celle qui la reçoit est le serveur. Les deux communiquent dans les deux sens une fois la connexion établie : on parle alors de mode connecté.

Les données à transmettre sont encapsulées : un en-tête vient s'ajouter à chaque paquet pour synchroniser la transmission et confirmer sa bonne réception. TCP régule aussi le débit grâce à des messages de taille variable, appelés segments.

Le multiplexage, ou comment plusieurs applications partagent une ligne

schéma représentant plusieurs flux d'applications regroupés sur une seule ligne de transmission

Le multiplexage consiste à faire transiter, sur une seule ligne, des données venant de plusieurs applications différentes. Le démultiplexage fait l'inverse à l'arrivée : il répartit les données reçues vers la bonne application. Cette opération repose sur le système des ports, ou sockets, un numéro associé à un type d'application qui, combiné à une adresse IP, identifie de façon unique une application précise tournant sur une machine donnée.

La structure d'un segment TCP

Un segment TCP suit une structure fixe, résumée dans le tableau suivant :

012345678910111213141516171819202122232425262728293031
Port Source Port destination
Numéro d'ordre
Numéro d'accusé de réception
Décalage données réservée URG ACK PSH RST SYN FIN Fenêtre
Somme de contrôle Pointeur d'urgence
Options Remplissage
Données

Chaque champ a un rôle précis :

  • Port source (16 bits) : le port de l'application émettrice.
  • Port destination (16 bits) : le port de l'application réceptrice.
  • Numéro d'ordre (32 bits) : quand le drapeau SYN vaut 0, c'est le numéro du premier mot du segment en cours ; quand SYN vaut 1, c'est le numéro d'ordre initial utilisé pour synchroniser les deux machines.
  • Numéro d'accusé de réception (32 bits) : le numéro du prochain segment attendu, pas celui du dernier segment reçu.
  • Décalage des données (4 bits) : repère le début des données utiles, nécessaire car le champ options a une taille variable.
  • Réservé (6 bits) : champ inutilisé pour l'instant, gardé pour un usage futur.
  • Fenêtre (16 bits) : le nombre d'octets que le récepteur accepte de recevoir sans accusé de réception intermédiaire.
  • Somme de contrôle : calculée à partir des champs de l'en-tête, elle sert à vérifier son intégrité à l'arrivée.
  • Pointeur d'urgence (16 bits) : indique à partir de quel numéro d'ordre les données deviennent urgentes.
  • Options : de taille variable selon les besoins de la connexion.
  • Remplissage : des zéros ajoutés pour que la longueur totale reste un multiple de 32 bits.

Les six drapeaux, ou flags, méritent un mot chacun : URG signale un paquet à traiter en urgence, ACK indique un accusé de réception, PSH déclenche la méthode PUSH, RST réinitialise la connexion, SYN demande l'établissement d'une connexion, et FIN signale la fin d'une connexion.

Comment TCP garantit la fiabilité du transfert

échange d'un segment de données suivi d'un accusé de réception entre deux machines

IP, à lui seul, n'offre aucune garantie de livraison. C'est TCP qui comble ce manque grâce à son système d'accusé de réception : à chaque segment émis correspond un numéro d'ordre, et la machine réceptrice renvoie un accusé de réception avec le drapeau ACK à 1, accompagné du numéro d'ordre suivant attendu.

minuterie déclenchant la réexpédition d'un segment TCP considéré comme perdu

Une minuterie se déclenche dès qu'un segment est envoyé. Si le délai s'écoule sans accusé de réception, la machine émettrice considère le segment comme perdu et le renvoie. Si le segment arrive malgré tout, un peu en retard, la machine réceptrice reconnaît le doublon grâce au numéro d'ordre et ne garde que la version arrivée en dernier.

Établir une connexion : la poignée de main en trois temps

Avant tout échange, les deux machines doivent connaître le numéro d'ordre initial de l'autre. Trois conditions préalables :

  • Les ports TCP concernés doivent être ouverts des deux côtés.
  • Le serveur reste en ouverture passive, à l'écoute d'une connexion.
  • Le client fait la demande de connexion : on parle d'ouverture active de son côté.

La synchronisation se fait en trois échanges, d'où le nom de three way handshake, ou poignée de main en trois temps :

  1. Le client envoie un segment avec le drapeau SYN à 1 et un numéro d'ordre N, son numéro d'ordre initial.
  2. Le serveur reçoit ce segment, puis répond avec un segment portant à la fois ACK et SYN à 1 : le champ accusé de réception contient le numéro d'ordre initial du client incrémenté de 1, et le segment porte aussi le numéro d'ordre initial du serveur.
  3. Le client transmet un dernier accusé de réception, ACK à 1 et SYN à 0 cette fois, avec un numéro d'accusé de réception égal au numéro d'ordre initial du serveur incrémenté de 1.

three ways handshake - poignée de mains en trois temps

Une fois ces trois échanges terminés, les deux machines sont synchronisées et la communication peut vraiment commencer.

La fenêtre glissante : réguler le trafic sans tout confirmer

représentation d'une fenêtre glissante limitant le nombre de segments envoyés sans accusé de réception

Confirmer chaque segment un par un ralentirait beaucoup les échanges. La méthode de la fenêtre glissante fixe à la place un nombre de segments pouvant être envoyés sans attendre d'accusé de réception intermédiaire, cette plage se déplaçant au fur et à mesure que les accusés arrivent. Le champ fenêtre de l'en-tête TCP stocke justement cette valeur.

déplacement de la fenêtre glissante à mesure que les accusés de réception sont reçus

Cette taille de fenêtre n'est pas figée : le serveur l'ajuste dans ses accusés de réception selon ce qui lui semble adapté au moment donné. Quand la fenêtre s'agrandit, le client déplace son bord droit vers l'avant.

agrandissement de la fenêtre glissante suite à une demande du serveur

Dans le cas inverse, une réduction de fenêtre ne fait pas reculer le bord droit : le client attend simplement que le bord gauche avance, au rythme des accusés de réception reçus.

réduction de la fenêtre glissante attendant l'avancée du bord gauche

Comment se termine une connexion TCP

Le client ou le serveur peut demander à mettre fin à la connexion, la procédure est symétrique :

  • Une des deux machines envoie un segment avec le drapeau FIN à 1. Elle termine de recevoir le segment en cours, puis ignore tout ce qui suit.
  • L'autre machine, après réception, répond avec un accusé de réception portant elle aussi FIN à 1, tout en continuant d'envoyer ses propres segments en cours. Une fois cela fait, elle informe son application que le FIN a bien été reçu, avant d'envoyer à son tour un segment FIN pour clôturer définitivement la connexion.

Pour aller plus loin

Le détail complet du protocole, champ par champ et cas par cas, se trouve dans la RFC 793, le document de référence qui définit TCP.

Résumer cet article avec :

Partager :