logo
Le protocole TCP
Transmission Control Protocol

Quand un programmeur développe une application, prenons l'exemple d'un naviteur Web, il utilise des fonctions de communication de haut niveau du type :

Par exemple:

Envoyer("GET /protocol.html","isnbreizh.fr",80) permet au programmeur d'envoyer le message "GET /proptocol.html" (ici une requête HTTP pour demander la page protocol.html) à destination du port 80 de la machine "isnbreizh.fr".

A_reception(msg,emetteur) Faire Actions permet au programmeur de définir quelles actions son programme doit réaliser lorsqu'il reçoit un message (ici stocké dans la variable msg) en provenance d'une machine (ici le nom est stocké dans la variable emetteur).

Avec ce type de fonction de haut-niveau le programmeur n'a pas à se soucier de comment les données sont envoyées ou recues. En effet, les fonctions Envoyer(...) et A_reception(...) font appel à des fonctions de plus bas niveau dont le rôle va être de gérer et d'optimiser cette transmission.

Une des implémentations possible de ces fonctions de plus bas niveau est défini par le protocol TCP (Transmission Control Protocol), que nous allons détailler maintenant.

Protocol TCP : Transmission Control Protocol

TCP défini un ensemble de principes qui vont permettre d'optimiser la transmission de nos données sur le réseau.

Principe du Multiplexage

Imaginons que nous devions transmettre des données de plusieurs Mo (Méga Octets) vers un autre ordinateur.

On rappelle que les informations sont stockées sous forme binaire.

La première technique consisterait à envoyer d'une seule traite le flot binaire correspondant. Mais, comme on peut le voir sur l'animation ci-dessous, le premier soucis avec cette solution est qu'en cas d'erreur (ici en fin de transmission) il faut transmettre à nouveau l'ensemble des données.

Un deuxième problème, sans doute le plus ennuyeux, est que cette solution monopolise le support de transmission et bloque les échanges entre d'autres équipements, comme nous pouvons le voir sur l'animation ci-dessous :

Une solution pour palier à ces défauts est de découper les données à transmettre en segments :

Et d'envoyer ces différents segments les uns à la suite des autres sur le support.

Cette méthode va permettre d'intercaler les segments de plusieurs équipements sur le même support.

Cet entrelacement de paquets s'appelle le multiplexage.

L'exemple ci-dessous nous montre l'intérêt du découpage en segments qui permet des communication simultanées :

Dans cet autre exemple on voit bien l'entrelacement des paquets qui permet à un même équipement de communiquer avec plusieurs autres :

Principe de l'encapsulation

Nous avons vu comment nos données étaient découpées en segments. Pour que ces segments arrivent correctement à destination, il est impératif de pouvoir indiquer le numéro de port qui doit réceptionner les données. Nous verrons également plus tard que les segments qui circulent sur le réseau peuvent arriver dans un ordre différents que celui dans lequel ils ont été émis. Il est donc indispensable de numéroter chacun de ces segments pour pouvoir les remettre dans l'ordre une fois arrivés à destination. On va également ajouter des "valeurs d'intégrité", appelées sommes de contrôle, qui vont nous permettre à l'arrivée de vérifier que les données n'ont pas subit de détérioration lors du transfert sur le support de communication. Notre segment se voit donc adjoindre des informations complémentaires que l'on appelle des informations de contrôle.

Ces informations sont pour certaines ajoutées au début du segment et d'autres à la fin, comme nous pouvons le voir ci-dessous :

Dans cet exemple, il s'agit du premier segment, à destination du port 80 avec un code de contrôle d'intégrité qui vaut 12.

Remarque : Cette notion de code d'intégrité sera traité plus en détail ultérieurement.

Le fait d'ajouter des information de contrôle devant le segment (entête) et à la fin de celui-ci (en-queue) porte le nom d'encapsulation.

Cette technique est importante à retenir car utilisée à differents niveaux du fonctionneemnt des réseaux informatiques.

Notre flux de données initial sera donc transmis sous la forme suivante :

Remarques :

Fiabilité des transferts

Le protocole TCP permet d'assurer le transfert des données de façon fiable. Pour cela, il possède un système d'accusé de réception permettant au client et au serveur de s'assurer de la bonne réception mutuelle des données. Lors de l'émission d'un segment, un numéro d'ordre (appelé aussi numéro de séquence) est associé. A réception d'un segment de donnée, la machine réceptrice va retourner un segment de donnée dont le drapeau ACK est à 1 (afin de signaler qu'il s'agit d'un accusé de réception) accompagné d'un numéro d'accusé de réception égal au numéro d'ordre précédent. Ce drapeau ACK est en fait une information de contrôle supplémentaire qu'il faudra ajouter au niveau de notre entête. Ce terme de drapeau ou Flag se présente sous forme d'une donnée binaire où chaque bit peut avoir une signification particulière.

De plus, grâce à une minuterie déclenchée dès réception d'un segment au niveau de la machine émettrice, le segment est réexpédié dès que le temps imparti est écoulé, car dans ce cas la machine émettrice considère que le segment est perdu...

Toutefois, si le segment n'est pas perdu et qu'il arrive tout de même à destination, la machine réceptrice saura grâce au numéro d'ordre qu'il s'agit d'un doublon et ne conservera que le dernier segment arrivé à destination...

Etablissement d'une connexion

Etant donné que ce processus de communication, qui se fait grâce à une émission de données et d'un accusé de réception, est basé sur un numéro d'ordre (appelé généralement numéro de séquence), il faut que les machines émettrices et réceptrices (client et serveur) connaîssent le numéro d'ordre initial de l'autre machine.

L'établissement de la connexion entre deux applications se fait souvent selon le schéma suivant :

Les deux machines doivent donc synchroniser leurs séquences grâce à un mécanisme communément appelé three ways handshake (poignée de main en trois temps), que l'on retrouve aussi lors de la clôture de session. Ce dialogue permet d'initier la communication, il se déroule en trois temps, comme sa dénomination l'indique :


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


Suite à cette séquence comportant trois échanges les deux machines sont synchronisées et la communication peut commencer!

Il existe une technique de piratage, appelée spoofing IP, permettant de corrompre cette relation d'approbation à des fins malicieuses !

Fin d'une connexion

Le client peut demander à mettre fin à une connexion au même titre que le serveur. La fin de la connexion se fait de la manière suivante :

Méthode de la fenêtre glissante

L'envoi systématique d"un accusé de réception (ACK) après chaque réception de segement par le destinataire génère un traffic réseau qui peut-être important. Heureusement, dans de nombreux cas, il est possible de limiter le nombre d'accusés de réception, afin de désengorger le réseau, en fixant un nombre de séquence au bout duquel un accusé de réception est nécessaire. Ce nombre est en fait stocké dans le champ fenêtre de l'en-tête TCP/IP.

On appelle cette technique la "méthode de la fenêtre glissante" car on définit en quelque sorte une fourchette de séquences n'ayant pas besoin d'accusé de réception, et celle-ci se déplace au fur et à mesure que les accusés de réception sont reçus.

De plus, la taille de cette fenêtre n'est pas fixe. En effet, le serveur peut inclure dans ses accusés de réception en stockant dans le champ fenêtre la taille de la fenêtre qui lui semble la plus adaptée. Ainsi, lorsque l'accusé de réception indique une demande d'augmentation de la fenêtre, le client va déplacer le bord droit de la fenêtre.

Par contre, dans le cas d'une diminution, le client ne va pas déplacer le bord droit de la fenêtre vers la gauche mais attendre que le bord gauche avance (avec l'arrivée des accusés de réception).

Structure de l'entête TCP

La structure complète de l'entête TCP est donnée ci-dessous :

Signification des différents champs :



Ressources :

  1. TCP sur site frameip.com.


CC BY NC SA  Christophe Béasse - juin 2019 - largement inspiré de :
https://www.commentcamarche.net/contents/538-le-protocole-tcp