1. Objectifs

Dans ce second TP, nous allons d’abord plonger plus en profondeur dans le fonctionnement du protocole TCP, et plus spécifiquement les mécanismes qui permettent la fiabilité.  Nous observerons également UDP à travers Wireshark.  

Ce TP comporte 4 étapes : 

  1. Un échauffement (15 min) permettant de mettre en oeuvre les notions vues au TP précédent dans une nouvelle trace.  
  2. Les retransmissions (20 min) : Observations de traces montrant des scénarios de pertes de segments TCP et illustrant les deux manières dont TCP peut restaurer le transfert fiable.  
  3. Les options TCP (20 min) : TCP comportent de nombreuses options qui permettent d’optimiser son fonctionnement si les deux entités les supportent.  
  4. Découverte d’UDP (20 min) : Analyse de l’en-tête du protocole UDP

A la fin de ce TP, vous devrez : 

  • Sur base d’une trace présentant des problèmes de transmission TCP, proposer une explication cohérente de ce qu’il s’est passé (perte isolée avec fast retransmit, perte avec expiration du RTO, …)
  • Sur base d’une trace, indiquer les options TCP négociées dans une connexion TCP  données et illustrer le rôle et l’apport de ces options dans la trace.  
  • Pouvoir expliquer en quelques mots les champs d’en-tête UDP et les différences avec l’en-tête UDP

2. Echauffement

Temps indicatif : 15 minutes

Soit la trace disponible ici .  Téléchargez-la, puis ouvrez-la avec Wireshark.  Répondez ensuite aux questions ci-dessous.  

  1. Combien de connexions TCP sont contenues dans la trace? Utilisez le menu statistics -> conversations pour répondre à cette question. 
  2. Isolez la connexion débutant à la trame 1.  
    • Quel est son contenu? 
    • Quels sont les numéros des trames débutant cette connexion (3 way handshake)? 
  3. Toujours pour la même connexion TCP, affichez les numéros de séquence et numéros d’ACK en tant que colonne.  Pour cela, dans la fenêtre détaillant le contenu de la trame sélectionnée, cliquez sur le champ souhaité et choisissez “Apply as column”. 
    • Quels sont les numéros de séquence utilisés dans la direction client=> serveur?  Combien de données par segment?  A quoi correspondent ces données? 
    • Même question dans le sens serveur => client
    • Quand les segments ACK sont-ils envoyés?  Discutez les différents cas de figure.   
  4. Toujours pour la même connexion TCP, comment évolue la taille de fenêtre, dans le client vers serveur?  Et dans le sens serveur vers client?  Utilisez pour cela le menu Statistics => TCP stream graphs => Window Scaling. Qu’est ce qui déclenche ces variations?
  5. Comment se termine cette connexion TCP?  Donnez le numéro de la/les trames impliquée(s).  

Remarque : Vous pouvez visualiser l’échange de manière graphique grâce au menu Statistics => Flow Graph (sélectionnez les options ad-hoc).

3. Retransmissions

Temps indicatif : 20 minutes

  1. Ouvrez la trace tcp_retransmission.pcapng (src : Chris Sanders).  Cette trace montre une retransmission TCP.  Sélectionnez une des trames surlignée en noir.  Remarquez que Wireshark vous propose une section “SEQ/ACK analysis”, dans laquelle il est mentionné que la trame est une possible retransmission.  
    • D’après vous, sur quoi se base Wireshark pour cela? 
    •  Que signifie le RTO indiqué?  
    • Comment évolue-t’il au fur et à mesure des retransmissions? 
    • Quel type de problème semble indiquer cette trace? 
  2. Ouvrez à présent la trace tcp_dupack.pcapng (source : Chris Sanders).  Observez également les informations données dans la section “SEQ/ACK analysis”.  
    • Combien y a-t’il de segments identiques?  
    • Pourquoi y a-t’il duplication d’ACK?  
    • Le problème finit-il par se résoudre? 
    • Comment s’appelle le mécanisme montré dans cette trace?
    • Quelle est la différence entre ce scénario et le précédent?
  3. Essayez, sur base d’une trace que vous avez vous-même capturée, de retrouver des retransmissions de segments, des segments perdus, ou des segments dupliqués. Quels filtres pouvez-vous utiliser pour cela?  (indice : tcp.analysis.*).  Essayez d’expliquer vos observations.    

Référence sur les analyses TCP disponibles dans Wireshark : Voir le chapitre 7 du Wireshark User Guide

4. Les options TCP

Temps indicatif : 20 minutes

Introduction

Nous allons à présent examiner de plus près les options TCP, présents de manière facultative à la fin de l’en-tête d’un segment. Pour déterminer si l’en-tête TCP contient des options, il faut examiner le champ “Data Offset”. Ce dernier permet d’identifier où se situe le début des données, et donc, par extension, identifie la longueur de l’en-tête. Si sa valeur est supérieure à 20 octets (somme des tailles des champs obligatoires), alors l’en-tête contient un ou plusieurs champs d’options.

Options TCP Dans l’image ci-dessus, le champ “Data Offset” (dénommé “Header Length” par Wireshark) vaut 32 octets. On en déduit donc qu’il y a des options TCP, et qu’elles occupent 12 octets.

On peut les observer quelques lignes plus bas :

  • No-Opération (octet de remplissage)
  • No-Opération (octet de remplissage)
  • Timestamp

Questions

Pour chaque option listée ci-dessous, essayez de trouver dans une trace : 

  • des segments portant  cette option
  • la longueur de l’en-tête TCP avec cette option
  • le type de segment contenant cette option (ex : ouverture de connexion, ou bien échange de données)
  • Quelques exemples de valeurs pour les champs de l’option
  • Une explication de l’utilisation de l’option et la signification de ses différents champs

Options à investiguer : MSS, SACK, Timestamp, Window Scale, No Operation

Conseils : 

  • Exploitez les filtres Wireshark (préfixe : tcp.options)
  • N’hésitez pas à travailler à plusieurs pour augmenter le nombre de traces analysées

5. Découverte d’UDP

Temps indicatif : 20 minutes

Essayez de trouver des segments UDP dans vos traces.  Si vous n’en avez pas, capturez la trace de la navigation vers une page web qui ne se trouverait pas dans vos caches (ex : figaro.fr).  

Observez alors l’en-tête UDP des segments capturés.  Pour chaque champ ou flag : 

  1. Quel est son nom?
  2. Sur combien de bits est-il encodé? 
  3. Donnez quelques exemples de valeur pour ce champ
  4. Faites une hypothèse sur son usage
  5. Validez/invalidez cette hypothèse par une courte recherche Web
  6. Reformulez en deux lignes la signification et l’usage de ce champ

Faites ensuite une comparaison entre l’en-tête TCP et l’en-tête UDP : Qu’est ce qui justifie ces différences?  

Vous pouvez également remarquer l’existence du menu “Follow UDP stream”.  Sur quoi se base Wireshark pour ce filtre?