Le protocole TCP (Transmission Control Protocol)

DéfinitionLe protocole TCP

TCP (pour Transmission Control Protocol ou Protocole de Contrôle de Transmissions) est un protocole de transport de données qui assure la fiabilité de la connexion : toutes les données arrivent et sont intègres.

Une session TCP permet d'acheminer des messages (ou segment dans la terminologie TCP) en suivant une procédure de trois étapes :

  • Établissement de la connexion

  • Transferts des données

  • Fermeture de la connexion

DéfinitionSegments TCP

Les messages échangés via TCP sont appelés des segments TCP. Ils contiennent les données que les processus veulent échanger mais aussi diverses informations propres au fonctionnement de TCP.

Ces informations propres à TCP sont contenus une partie spéciale du segment, appelée en-tête.

Segment TCPInformations[1]

Parmi ces informations, les éléments notables décrits par la suite sont :

  • les numéros de ports des processus du client et du serveur

  • le numéro de séquence du paquet.

  • le numéro acquittement du paquet.

MéthodeComment assurer le transfert sûr et intègre de données ?

Afin de garantir que les segments arrivent dans le bon ordre, les deux participants utilisent des numéros de séquence et des numéros d'acquittement .

Le numéro de séquence contient le numéro du dernier segment envoyé et le numéro d'acquittement contient le numéro du prochain segment attendu.

Les numéros sont calculés à partir de la taille des segments, en nombre d'octets.

Lorsque l'une partie reçoit un segment, il ajoute au numéro de séquence le nombre d'octets reçus et obtient ainsi le numéro du prochain octet attendu, c'est à dire le numéro d'acquittement.

Pour chaque segment à envoyer, l'émetteur calcule et transmet une somme de contrôle (checksum) à partir du segment. Le destinataire calcule à son tour la somme de contrôle et vérifie que les deux correspondent, garantissant ainsi que les données n'ont pas été altérées par erreur sur la route.

Échange de données avec TCPInformations[2]

Sur cet exemple :

  • Le client commence par envoyer 8 octets de données : son numéro de séquence est laissé à 1, puisqu'il s'agit du numéro du dernier message envoyé.

  • Le serveur reçoit les données et renvoie un acquittement après avoir mis à jour son numéro d'acquittement en additionnant la taille des données reçues.

  • Le serveur envoie à son tour 3 octets de données.

  • Le client répond par un acquittement et met à jour son numéro d'acquittement. Noter qu'il a mis à jour son numéro de séquence à ce stade.

  • Le client envoie enfin 12 octets de données.

DéfinitionPort

Les ordinateurs peuvent avoir de multiples sessions TCP simultanées. Pour ne pas les mélanger, une session TCP est associée à des ports sur les deux machines.

On parle de port source pour le port du processus émetteur et de port de destination pour le port du processus destinataire. Le nombre maximum de ports est 65535.

Les ports numérotés de 0 à 1023 sont réservés pour des protocoles communs comme HTTP (80), SSH (22), HTTPS (443), FTP (20 et 21), etc. Une même machine peut donc recevoir un fichier avec FTP en même temps qu'elle transmet une page web via HTTPS.

ExempleDe port à porte, il n'y qu'un pas...

On peut faire l'allégorie suivante pour comprendre le concept et l'intérêt d'un port.

Si on identifie une machine à un immeuble, et un processus de cette machine à un appartement de cette immeuble, le port du processus peut-être vu comme le numéro de cet appartement.

Un courrier adressé à l'appartement (au processus) est d'abord adressé à l'immeuble (la machine). Ce n'est qu'ensuite qu'il est distribué dans la boîte aux lettres de l'appartement grâce à son numéro d'appartement (son port).

Ports d'une machine clienteInformations[3]

À retenir

  • TCP permet à deux processus d'ouvrir un canal de communication fiable en 3 étapes.

  • Un segment TCP contient les données à envoyer dans un paquet et des informations utiles à sont acheminement dans son en-tête.

  • Les processus communiquant sont identifiés par les machines grâce à leur port.