PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Réseau : analyse d’une connexion TCP et de ses options avec Wireshark

vendredi 27 octobre 2023 à 13:00

I. Présentation

Dans cet article, nous allons aborder le principe da connexion TCP qui est appelé communément le « tree way-handshake » et les options présentés lors de cette connexion, le tout grâce à une analyse Wireshark.

Mais avant d’aborder cette partie, il faut savoir que le protocole TCP existe depuis 1981 avec la RFC 793. Afin de répondre à l’augmentation des débits et de la latence sur les réseaux, le protocole TCP a eu le droit à des améliorations, dont l’une des plus importantes est la RFC 7323  appelé « TCP for High Performance ». Pour information, la dernière RFC liée à TCP date d'août 2022 (RFC 9223).

Pour rappel, il existe déjà un article sur le protocole TCP sur notre site :

Retrouvez tous les articles sur l'utilisation et la configuration de Wireshark sur cette page :

II. Le principe de la connexion TCP

La connexion TCP permet d’établir une connexion à un service comme un serveur web par exemple. La connexion TCP va permettre d’établir plusieurs paramètres entre les deux hôtes :

Pour rappel, voici une illustration de la demande de connexion TCP :

TCP three-way handshake

Les options TCP sont présentes dans les segments « SYN » et « SYN ACK » donc il est important de capturer la demande de connexion TCP dans le cadre d’une analyse de performance.

Les champs flags valides lors d’une connexion TCP sont « SYN » qui est la demande de connexion, « SYN ACK » qui est la réponse du serveur distant et « ACK » pour valider la connexion de la part du client.

Dans certains cas, le flag « ECN-setup » (Explicit Congestion Notification) est utilisé pour informer l’hôte distant d’une congestion réseau. Elle est définie dans la RFC 3168.

Le flag « ECN-Setup » comprend les flags suivants :

La particularité du flag ECE, c’est que ce sont les routeurs qui informent d’une congestion au niveau du paquet IP.

Pourquoi je mentionne ce point, car des outils comme NMAP peuvent ajouter des flags comme « URG » (le flag urgent permet d’envoyer des données de manière prioritaire) mais celui-ci ne doit pas apparaitre lors du processus de demande de connexion TCP.

III. Les options disponibles

Les options TCP présentées par les différents hôtes ne sont pas une négociation lors de la connexion TCP. Si une option TCP n’est pas présente sur l’un des hôtes de la connexion, celle-ci ne sera pas utilisée.

Dans ce chapitre je vais présenter les options les plus couramment utilisées, bien qu'il en existe d’autres.

A. La MSS

La MSS (Maximum Segment Size) est la taille maximum des données que peut contenir un segment. Si celui-ci n’est pas spécifié par un hôte, la valeur par défaut est égale à 536 octets.

Voici un extrait de la dernière RFC 9223 à ce sujet :

La taille de la MSS va dépendre de plusieurs facteurs :

Dans l’entête TCP, la MSS est de 2 octets.

B. Windows Scaling

Avant de rentrer dans le détail de cette option, nous allons faire un rappel sur la fenêtre TCP. Qu’est-ce que la fenêtre TCP ?

La fenêtre TCP est le buffer de réception des données reçu lors des échanges TCP, ce buffer permet de stocker les données reçues avant de les envoyer vers l’application. Par défaut la fenêtre TCP est de 64 Ko octets, donc on peut recevoir 64 Ko de données avant d’envoyer un acquittement TCP.

La fenêtre TCP joue un rôle primordial dans la performance d’un transfert de données, car nous pouvons calculer le débit consommé avec la fenêtre TCP de réception et le RTT réseau.

Voici le calcul théorique :

Débit = fenêtre TCP en octets * 8 bits / RTT réseau en secondes

Voici un exemple de calcul : prenons notre fenêtre TCP de base 64 Ko avec un RTT réseau de 5 ms

Débit  = 64000 * 8 / 0.005 sec
Débit = 102 Mb/s

Cela signifie que nous pourrons au maximum consommer 102 Mb/s de bande passante (débit), donc nous seront bridé par la fenêtre TCP de réception.

Avec l’augmentation des bandes passantes et de la latence, il a fallu adapter le protocole TCP pour répondre à l’évolution des réseaux, c’est pour cela que la RFC 7323 (qui a remplacé la RFC 1323) a été publié.

Dans cette RFC, on implémente l’option « Windows Scaling » qui va permettre de mettre en place un facteur de mise à l’échelle de la fenêtre TCP par des puissances de deux. La taille de la fenêtre TCP avec cette option peut atteindre 1 Gigaoctet au maximum.

TCP Windows Scaling

C. SACK

L’option TCP « SACK » signifie Select Acknowledge. Elle permet, en cas de perte de paquets, de demander seulement les paquets perdus et d’informer l’hôte distant des paquets reçus.

Pour plus d’informations, vous pouvez aller voir la RFC 2018.

D. Timestamps

L’option Timestamps a aussi vu le jour sous la RFC 7323 (anciennement 1323). Cette option permet de calculer le RTT réseau en utilisant les flags « TSval » et « TSecr » : ce sont des chiffres effrayants à regarder ! 😉

L’autre utilisation de l’option Timestamps, est de rejeter les anciens segments dupliqués pour éviter une corruption de la session TCP. L’option Timestamps occupe 12 octets dans l’entête TCP.

Pour plus d’information, vous pouvez vous référer à la RFC 7323, au chapitre 5.

IV. Wireshark et les options TCP

A. Affichage dans Wireshark

Au sein de l'interface de Wireshark, les options TCP apparaissent dans la colonne « info » dans le panneau liste des paquets.

Voici un exemple de connexion TCP :

Aperçu connexion TCP dans Wireshark

Dans cette connexion TCP, on remarque que les deux hôtes supportent seulement deux options TCP.

N.B : la valeur WS ne doit jamais être à UN, car 64 ko multiplié par 1 est toujours égal à 64 Ko.

La seule exception que j’ai remarquée lors de mes analyses de performance avec une valeur à 1, c’est avec un load balancer du constructeur F5 qui met la valeur WS à 1, mais qui augmente sa fenêtre TCP malgré tout.

La fenêtre TCP de réception de base à une valeur de « 64240 octets » pour les deux hôtes et une MSS de « 1460 octets ».

Examinons maintenant en détail la trame « numéro 1 » au niveau de l’entête TCP :

Analyse trame TCP avec Wireshark - Les différentes options

Quelques commentaires sur cette image :

Concernant l’option « Windows scale » Wireshark indique qui faut multiplier par 256 la valeur qui se situe dans « Window » qui est égal à 64240 octets. Enfin, la dernière option activée est « SACK permitted ».

Passons à la trame « numéro 2 »

Sur la trame numéro 2, on peut noter seulement deux différences :

Je vous laisse calculer la taille de la fenêtre de réception de chaque hôte, en indiquant votre méthode de calcul et le résultat dans les commentaires de l’article 😊 ! À vous de jouer !

B. Les filtres associés

Maintenant que nous avons vu les options TCP et les flags, voici quelques filtre d’affichage qui peuvent vous aider à analyser une connexion TCP.

Filtre affichage pour analyse connexion TCP Wireshark

V. Le RTT réseau

A. Définition

Le RTT signifie Round Trip Time : c’est le temps pour aller d’un point A à un point B et faire le chemin inverse. Ce temps est mesuré en millisecondes (ms).

Il va permettre de déterminer la latence. En effet, la latence du réseau : c’est le temps qu’effectue un paquet pour aller d’un point A à un point B, ce temps est mesuré en millisecondes (ms), donc on divisera le RTT par deux.

B. Comment calcule-t-on le RTT réseau ?

Le RTT réseau se calcul sur la demande de connexion TCP, pour en déduire la latence du réseau.

L’emplacement de votre point de capture est très important pour connaitre le RTT réseau, voici un schéma qui va illustrer le calcul du RTT réseau par Wireshark ou des équipements comme des boitiers de QoS ou des sondes réseau.

Calcul RTT réseau

C. Wireshark et le RTT

Dans Wireshark, le calcul du RTT réseau sur la connexion TCP s’appelle iRTT (Initial Round Trip Time) car Wireshark va prendre des mesures du RTT réseau tout au long de la session TCP. Nous reviendrons sur cette notion dans un prochain article qui sera publié sur IT-Connect.

Le iRTT réseau se situe dans l’analyse détaillée du protocole TCP dans la partie « SEQ/ACK analysis ».

Ma capture réseau a été prise sur mon poste de travail, donc il faut aller sur la réponse du serveur à la demande de connexion TCP pour avoir le iRTT.

Wireshark iRTT réseau

Dans mon cas, le temps d’un aller-retour avec l’hôte 178.32.126.188 est à « 14ms » donc une latence de 7 ms.

Voici un filtre que vous pouvez utiliser pour voir les RTT réseau élevées :

Filtre iRTT Wireshark

VI. Conclusion

Maintenant vous avez les cartes en main pour analyser une demande de connexion TCP, et calculer le RTT réseau associé ! J’espère que cet article vous a plu, car d’autres vont suivre sur TCP, notamment sur l'analyse de problèmes de performances. Toutefois, le prochain article sera théorique et portera sur le RTT réseau avant d’explorer l’univers de TCP avec Wireshark.

The post Réseau : analyse d’une connexion TCP et de ses options avec Wireshark first appeared on IT-Connect.