Menu Fermer

L’établissement d’une connexion TCP/IP

Cette entrée fait partie d'une série de 5 sur 14 dans la série Internet - comment ça marche : le dossier

Dans l’article précédent Le protocole TCP/IP : définition, architecture et couches, je présentais ce protocole de communication sur internet.
Mais comment s’effectue l’établissement de la connexion ?
Comment les données transitent en TCP/IP ?
Qu’est-ce qu’un paquet IP ?

Cet article répond à toutes ces questions et vous explique comment les données sont transmises au sein d’un réseau TCP/IP.

L'établissement d'une connexion TCP/IP

L’établissement d’une connexion TCP/IP

TCP permet la communication dans les deux sens.
On peut donc envoyer et recevoir des données en même temps via TCP.

Pour que la communication puisse s’établir, la couche IP doit répondre à ces deux prérogatives :

  • Les équipements sont physiquement reliés au même réseau. Par exemple par des câbles Ethernet avec un switch ou sur connecté à un même concentrateur Wi-Fi
  • Chaque équipement doit posséder une adresse IP unique afin de pouvoir l’identifier au sein du réseau
  • Une route doit exister entre la machine source et la machine de destination
TCP fonctionne en créant une connexion puis un flux de données passe dans cette dernière.
Le principe est similaire à une communication téléphonique.
Vous composez le numéro puis la connexion s’établit et les données transitent dans les deux sens.

Voici les caractéristiques d’une connexion TCP/IP :

  • La connexion se fait avec une adresse IP et un port source et adresse IP et port de destination. On parle alors de TCP socket.
  • L’établissement de la connexion se fait par poignée de main
  • La communication se fait par paquets que l’on peut fragmenter (fragmentation)
  • Une somme de contrôle (checksum) permet de vérifier que les données ne sont pas altérées ou corrompues

Le protocole IP utilise des segments (paquets) comme unités de base de transmission de données. En plus de la charge utile, les segments peuvent également contenir des informations de contrôle et sont limités à 1 500 octets.
La couche réseau du système d’exploitation est responsable de l’établissement et de la terminaison des connexions de bout en bout ainsi que du transfert des données.

Ports TCP/IP et Sockets

Un port est un point de terminaison de d’une connexion TCP/IP.
Au niveau logiciel, dans un système d’exploitation, un port est une construction logique qui identifie un processus spécifique ou un type de service réseau.

Ainsi une connexion TCP/IP se caractérise par un port source vers un port de connexion sortant.
Lorsque la connexion est établie, on parle alors de socket.

Un numéro de port utilise 16 bits et peut donc avoir une valeur de 0 à 65535 décimal.
Les numéros de port sont divisés en plages comme suit:

  • Numéros de port 0-1023 – Ports bien connus. Ceux-ci sont attribués aux services de serveur par l’Autorité des numéros attribués à Internet (IANA). Par exemple, les serveurs Web utilisent normalement le port 80 et les serveurs SMTP utilisent le port 25 (voir schéma ci-dessus)
  • Ports 1024-49151- Port enregistré – Ceux-ci peuvent être enregistrés pour des services auprès de l’IANA et doivent être traités comme semi-réservés. Les programmes écrits par l’utilisateur ne doivent pas utiliser ces ports
  • Ports 49152-65535– Ils sont utilisés par les programmes clients et vous êtes libre de les utiliser dans les programmes clients. Lorsqu’un navigateur Web se connecte à un serveur Web, le navigateur s’attribue un port dans cette plage. Aussi connu sous le nom de ports éphémères

Voir la page :

Voici un schéma d’un PC qui se connecte sur deux serveurs WEB.
On voit alors les ports locaux supérieurs 1024 et les ports des services réseaux inférieurs à 1024.

Établissement d'une connexion avec les ports locaux et distants

Par convention, chaque service internet et application ont un port standard.
Par exemple, le service HTTP utilise le port 80, HTTPs 443, SMTP 25, etc.

Liste des ports TCP et services réseaux

Ainsi un service réseaux en écoute, par exemple, un serveur WEB ouvre un socket en écoute sur le port 80 et 443.
Le port est dit alors ouvert. J’en parle dans cet article :

Les étapes de l’établissement d’une connexion TCP/IP

Voici les différentes étapes durant l”initialisation et l’établissement de la connexion TCP/IP.
Un échange entre les deux parties pour mettre en place la connexion se fait alors.
On parle alors de TCP three-way handshake :

L'établissement de la connexion TCP/IP poignée de main : TCP three-way handshake
  • Le serveur doit être prêt à accepter une connexion entrante. Ainsi, une application doit ouvrir un port en écoute. Cela se fait normalement en appelant socket, bind et listen et s’appelle un open passif.
  • Le client émet une ouverture active en appelant connect. Cela amène le client TCP à envoyer un segment de «synchronisation» (SYN), qui indique au serveur le numéro de séquence initial du client pour les données que le client enverra sur la connexion. Normalement, aucune donnée n’est envoyée avec le SYN; il contient juste un en-tête IP, un en-tête TCP et des options TCP possibles (dont nous parlerons bientôt).
  • Le serveur doit acquitter (ACK) le SYN du client et le serveur doit également envoyer son propre SYN contenant le numéro de séquence initial pour les données que le serveur enverra lors de la connexion. Le serveur envoie son SYN et l’ACK du SYN du client dans un seul segment.
  • Le client doit accuser réception du SYN du serveur.

Voici la version simplifiée du TCP three-way handshak.
On voit alors le client avec le port source et le port de destination.

L'établissement de la connexion TCP/IP : TCP three-way handshake
http://library.mobrien.com/Manuals/MPRM_Group/tcp_connections_101.htm

Une fois la connexion établit et créé, le flux de données peut s’effectuer.
Ainsi des échanges par paquets TCP s’effectue.

Enfin la terminaison de la connexion, c’est à dire mettre fin à la connexion se fait avec le même type d’échange.

L’état de connexion TCP/IP

Ainsi la connexion TCP/IP peut avoir plusieurs états :

  • SYN_SENT : Le client tente d’établir une connexion. Pour cela, il envoie une demande de synchronisation à la cible
  • SYN_RECV : Une demande de connexion a été reçue du réseau
  • ESTABLISHED : La connexion est établie et les données transitent
  • TIME_WAIT : Le socket attend après la fermeture pour gérer les paquets toujours dans le réseau.
  • LAST_ACK : L’extrémité distante s’est arrêtée et le socket est fermé
  • LISTEN : La prise écoute les connexions entrantes. Le port est ouvert en attente de connexion
  • CLOSING : Les deux sockets sont fermés mais nous n’avons toujours pas toutes nos données expédié
  • CLOSE_WAIT : L’extrémité distante s’est arrêtée, attendant la fermeture du socket
Les états de la connexion TCP
Diagramme de transition de l'état TCP

La commande netstat disponible sur Windows et Linux permet de lister les connexions avec l’adresse source et de destination.
On trouve aussi respectivement les ports avec leur numéro :443, :1031, etc.
Enfin cette commande réseau CMD indique aussi les états de connexion

netstat liste les connexions établies avec l'état

Plus bas, on trouve des connexions en cours de fermeture (ClOSE_WAIT, TIME_WAIT, …).

netstat liste les connexions établies avec l'état

Bien sûr, il existe d’autres outils et logiciels pour lister les connexions réseaux :

La fragmentation des paquets IP

La communication se fait ensuite par paquet IP.
Ce dernier possède une taille maximale défini par le MTU (Maximum Transmission Unit) de chaque équipement qu’il traverse.
La valeur diffèrent selon les équipements ou liaison. Par exemple en Ethernet la taille maximal est de 1500 octets.
Si le paquet est supérieur il est alors fragmenté.

La fragmentation consiste à découper un paquet IP en plusieurs messages. Ce sont des fragments IP qui sont en réalité des paquets IP plus petits.
Ainsi le message est fragmenté et passe par différentes itinéraires pour arriver à sa destination.
Ce dernier s’occupe alors de rassembler chaque fragment retrouver le paquet IP initial.

Naviguer dans la série<< Le protocole TCP/IP : définition, architecture et couchesL’établissement d’une connexion sur internet >>