mardi 16 février 2016

Connexions TCP


TCP est un protocole orienté connexion. Contrairement à UDP par exemple, il est nécessaire d'établir une connexion avant de pouvoir échanger des données.

Cette phase a pour but d'initialiser différents paramètres comme le numéro de séquence initial (ISN), la taille maximale de segment (MSS), ou le support de certaines implémentations (SACK, Window scaling, ...).

Le drapeau SYN est utilisé lors de cette phase appelée "Three Way Handshake".

De même, une fois le transfert de données terminé, il est nécessaire de fermer la connexion entre les 2 hôtes. Le drapeau FIN est utilisé à cette fin lors de cette phase appelée "Four Way Handshake".

Comme indiqué dans l'article d'introduction sur TCP, une connexion TCP entre 2 hôtes est définie de manière unique par le couple de "socket" (terme popularisé par l'université de Berkeley).

Établissement de la connexion


Regardons de plus près l'établissement d'une connexion TCP :

Etablissement d'une connexion TCP - Comoe Networks

  1. Le client initie la communication en envoyant un segment dont le drapeau SYN est activé (couramment appelé segment SYN). Il transmet par la même occasion son ISN, qui sera le numéro de séquence de référence pour le transfert de données dans le sens client vers serveur. De même, il indique ses conditions et ses capacités dans les options.
  2. Le serveur envoie alors son segment SYN, dans lequel il confirme avoir bien reçu l'ISN du client ainsi que ses capacités. Il envoie également son ISN ainsi que ses capacités.
  3. Le client confirme avoir bien reçu le segment SYN du serveur. Le transfert de données peut commencer.
Dans la mesure où l'établissement de la connexion doit être aussi fiable que le transfert de données, le drapeau SYN compte pour un octet dans les numéros de séquence.

On peut voir ici la capture de l'établissement d'une connexion avec le logiciel d'analyse réseau de Comoe Networks.
Etablissement d'une connexion TCP - analyse réseau Comoe Networks
Établissement d'une connexion TCP

Terminaison de la connexion


N'importe quel hôte peut fermer la connexion, ce n'est pas forcément le client. Cela dépend plutôt de l'application de la couche supérieure qui utilise le service TCP.
Il est même possible d'avoir une clôture simultanée, même si dans la pratique, c'est plutôt rare.

Terminaison d'une connexion TCP - Comoe Networks
Terminaison classique d'une connexion TCP
  1. L'hôte qui souhaite indiquer la fin de l'envoi de données (dans une situation normale), le signale en envoyant un segment avec le drapeau FIN (couramment appelé segment FIN).
  2. Son correspondant envoie un segment ACK pour confirmer la réception du segment FIN.
  3. Son correspondant envoie lui aussi un segment FIN pour signaler qu'il n'a plus de données à envoyer.
  4. L'hôte envoie un segment ACK à son correspondant pour confirmer la réception de son segment FIN.
De la même façon, pour confirmer la bonne réception du segment FIN, ce dernier compte pour un octet dans les numéros de séquence.

Note : les étapes 1 et 2 n’entraînent pas obligatoirement les étapes 3 et 4 dans la foulée. Le segment FIN indique juste que son émetteur n'a plus de données à envoyer. Le destinataire de ce segment peut lui avoir encore des données à transmettre.

De la même façon, on peut suivre le déroulement de la fermeture d'une connexion TCP ci-dessous :

Fermeture d'une connexion TCP - Comoe Networks
Fermeture d'une connexion TCP


Pour l'hôte qui a initié la terminaison de la connexion, comment savoir que le correspondant a bien recu le segment de l'étape 4 ci-dessus ?

Dans la pratique, c'est impossible. C'est pourquoi il est instauré un temps d'attente durant lequel, la socket sur cet  hôte ne peut être fermée et reste dans l'état CLOSE_WAIT (sur Linux).
On peut le voir ci-dessous pour la connexion TCP/IPv6

root@LAB-NODE2:~# netstat -nt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address             State     
tcp     0           136       192.168.43.1:22        192.168.43.254:42642    ESTABLISHED
tcp6   1           0           ::1:50516                    ::1:631                            CLOSE_WAIT


Nous verrons plus en détail cet aspect lorsque nous regarderons les différents états d'une connexion TCP.

Merci.

Toutes les copies écrans sont issues du logiciel d'analyse réseau de Comoe Networks.

Aucun commentaire:

Enregistrer un commentaire