TCP/IP est l'une des implémentations du "packet-switching" (ou commutation de paquet) et constitue la base de notre internet moderne.

Si vous voulez en savoir plus sur l'origine et l'histoire d'Internet, j'ai écrit un article à ce sujet !

Autrement dit c'est une manière de transmettre des données en les découpant en plusieurs paquets de taille réduite pour les envoyer sur le réseau.

Contrairement à ce que l'on entend souvent, TCP/IP n'est pas un protocole, mais une suite de protocole (généralement connue sous le nom de "Internet Protocole Suite").

L'IP contient les informations sur l'adresse de l'expéditeur et du destinataire, afin que le paquet soit bien transmis sur le réseau et arrive à la bonne machine distante. De son côté TCP va s'assurer que la machine expéditrice puisse être tenu au courant si le paquet n'est pas arrivé à destination et gérer le renvoie des données si besoin.

On parle d'encapsulation car le segment TCP est encapsulé (inclus) dans le datagramme IP, car il faut d'abord que le paquet arrive à la bonne machine identifiée par son adresse pour que les données soit distribuées à la bonne application identifiée par son port (80 pour HTTP, 22 pour SSH, 21 pour FTP, etc...)

Afin de pouvoir fournir les informations d'erreur de transmission, TCP doit établir une "connexion" entre l'expéditeur et le destinataire, c'est pour celà que l'on parle de protocole en mode connecté.

Une session TCP fonctionne en trois phases :

  • Ouverture de la connexion
  • Transfert des données et gestion des erreurs
  • Fermeture la connexion

Voici le datagramme de la première couche (IP) :

Datagramme IP (source: wikipedia)

Il y a beaucoup de données différentes mais les plus importantes sont les suivantes :

  • "Protocol" indique le type de protocole utilisé pour acheminer les données contenues dans "data". Par exemple pour le protocole TCP, la valeur de ce champ sera égale à 0110 (6 = TCP).
  • "Source address" contient l'adresse IP de la machine ayant envoyé le paquet
  • "Destination address" contient l'adresse IP de la machine censé recevoir le paquet
  • "Data" contient les données à transporter.

Ici le contenu de "Data" sont les données TCP, dont le datagramme est disponible ci-dessous :

Segment TCP contenu dans la section Data du datagramme IP (source: wikipedia)

La trame TCP contient diverses informations (en plus des données encapsulées) notamment pour le routage (les deux adresses de ports au début de la trame), mais aussi des données de gestion d'erreurs : pour vérifier que les paquets arrivent bien dans le bon ordre, et qu'ils sont tous au complet afin de conserver l'intégrité des données.

Et ensuite ?

Tous les protocoles "applicatifs" utilisent cette suite de protocoles en encapsulant eux-même leur données à l'intérieur de ces datagrammes, qui seront acheminé sur le réseau par les mécaniques expliquées précédemment.

Tout les outils que vous utilisez quotidiennement ont le même fonctionnement sous-jacents : HTTP, FTP, SMTP, etc... car ils ont la même vision du réseau Internet au travers de TCP/IP.

Attention néanmoins, certains protocoles applicatifs utilisent non pas la suite TCP/IP mais UDP/IP dont j'expliquerai la différence dans un prochain article !

Chaque paquet va traverser le réseau, de passerelle en passerelle grâce à l'adresse IP du destinataire qu'il contient, en renvoyant les paquets perdus en chemin. Une fois reçu, le paquet sera acheminé au port contenu dans la trame TCP pour le fournir à la bonne application.

Lorsque chaque paquet constituant une donnée unique aura été reçu, ils seront fusionnés et seront enfin utilisable par l'application en question. Si la machine cible souhaite envoyer une réponse, elle aura l'adresse complète (IP et port) de la machine d'origine, il ne lui suffira plus qu'à renvoyer des paquets dans l'autre sens !

J'espère que cet article vous aura été utile, et à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo by CHUTTERSNAP on Unsplash