--- title: "Le protocole TCP : fonctionnement et rôle dans Internet" url: https://www.dico-micro.com/internet-le-protocole-tcp/ author: "Dico Micro" date_published: 2023-07-01T14:08:44+00:00 date_modified: 2026-09-26T16:32:35+00:00 categories: ["Actus high-tech"] image: https://www.dico-micro.com/wp-content/uploads/2026/09/internet-le-protocole-tcp.jpg description: "TCP est le protocole qui fiabilise le transport des données sur Internet, grâce à un système d'accusés de réception qui vérifie chaque segment reçu." site: "Dico Micro" license: "Reproduction autorisée avec lien vers la source." --- # Le protocole TCP : fonctionnement et rôle dans Internet > TCP est le protocole qui fiabilise le transport des données sur Internet, grâce à un système d'accusés de réception qui vérifie chaque segment reçu. 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](https://www.dico-micro.com/glossaire/c/#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. **Un protocole, deux rôles bien distincts** Dans une connexion TCP, le client ouvre la communication de façon active, le serveur reste en écoute passive jusqu'à ce qu'une demande de connexion arrive. ## 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](https://www.dico-micro.com/images/mux.gif) 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](https://www.dico-micro.com/quest-ce-quune-adresse-ip-et-comment-fonctionne-t-elle/), 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 : | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 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. **Un en-tête TCP de 20 octets minimum** Sans options, l'en-tête TCP occupe 160 bits, soit 20 octets, avant même le premier octet de données utiles. ## Comment TCP garantit la fiabilité du transfert ![échange d'un segment de données suivi d'un accusé de réception entre deux machines](https://www.dico-micro.com/images/ACK1.gif) 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](https://www.dico-micro.com/images/ACK2.gif) 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](https://www.dico-micro.com/images/3way.gif) Une fois ces trois échanges terminés, les deux machines sont synchronisées et la communication peut vraiment commencer. **Une faille connue : le spoofing IP** Une technique de piratage appelée spoofing IP exploite ce mécanisme de confiance entre les deux machines pour usurper l'identité de l'une d'elles. C'est une des raisons pour lesquelles TCP seul ne suffit pas à sécuriser une communication sensible. ## 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](https://www.dico-micro.com/images/gliss.gif) 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](https://www.dico-micro.com/images/fenetre.gif) 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](https://www.dico-micro.com/images/plus.gif) 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](https://www.dico-micro.com/images/moins.gif) ## 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. **La fermeture reste symétrique** Chaque machine ferme sa propre moitié de la connexion indépendamment, ce qui permet à l'une de continuer à envoyer des données pendant que l'autre a déjà signalé qu'elle avait fini d'émettre. ## Pour aller plus loin Le détail complet du protocole, champ par champ et cas par cas, se trouve dans la [RFC 793](http://www.ietf.org/rfc/rfc793.txt), le document de référence qui définit TCP. --- ## À propos de l'auteur **Dico Micro** — La rédaction de Dico Micro : matériel, logiciels et culture geek, expliqués sans jargon.