TP Pile TCP/IP (1)

Pile TCP/IP (première partie) #

Dans ce TP, nous proposons d’observer et de comprendre certains principes de fonctionnement des réseaux et plus particulièrement d’un réseau TCP/IP. Nous verrons en particulier :

  • l’encapsulation des données et le modèle en couches
  • le routage et l’interconnexion des réseaux
  • les protocoles ARP, HTTP, DNS
  • le protocole de connexion de TCP

Certains faits nouveaux, dont je n’aurais pas eu connaissance, peuvent gêner le bon déroulement de ce TP. Si vous constatez que des manipulations ne fonctionnent pas ou plus, merci de me le signaler.

Afin de faciliter la correction de ce travail, merci d’indiquer clairement les numéros des questions dans votre compte-rendu.

Encapsulation des données #


Capture d’un Ping #

Pour découvrir le fonctionnement du système en couches et de l’encapsulation, nous allons utiliser un logiciel nommé Wireshark qui permet de capturer des trames réseau.

L’exemple qui suit a été obtenu en utilisant le programme ping. La machine source (1) a pour adresse 10.16.90.17 et la machine distante (2) pour adresse 10.16.90.70. Depuis la machine 1, nous pinguons la machine 2 : ping 10.16.90.70 nous utilisons le programme ping (couche application) dont le but est d’envoyer des messages ICMP (couche transport/internet) de type Echo Request. Lorsque la machine distante reçoit un tel message, elle doit y répondre en envoyant à son tour via le protocole ICMP des messages de type Echo Reply. Ceci permet par exemple de tester si la connexion est bonne entre deux machines, au moins au niveau de la couche internet.

Sur la machine 1, le logiciel Wireshark a été lancé, pendant le ping, et nous donne pour résultats :

Dans la partie du haut figurent les trames capturées (elles sont numérotées). Voici comment interprêter ces résultats : La trame 3 est issue de la machine source 10.16.90.17 vers la destination 10.16.90.70, elle utilise le protocole ICMP, et elle est de type Echo Request. La trame 4 est la réponse de la machine 10.16.90.70 à la machine 10.16.90.17. Les trames 5,6 puis 7,8 et 9,10 correspondent aux trois autres ping envoyés (pour un total de 4).

Vous allez reproduire cette manipulation.

Si vous êtes gênés par les pings des autres groupes, notez que dans la case Filtre de Wireshark, vous pouvez entrer un filtre pour les trames qui seront capturées. Par exemple : host 10.16.90.70 ne capturera que ce qui concerne 10.16.90.70, src 10.16.90.70 ne capturera que les trames pour lesquelles 10.16.90.70 est émetteur, et dst 10.16.90.70 ne capturera que les trames pour lesquelles 10.16.90.70 est récepteur. La syntaxe pour les filtres de capture est différente de celle des filtres d’affichage. Vous pouvez par exemple tout capturer puis ne filtrer que certaines trames à afficher. Vous indiquerez par ip.addr==10.16.90.70 que vous ne voulez afficher que ce qui concerne 10.16.90.70 (consultez l’aide et les exemples)

**Question 1-1**

Reproduisez cette manipulation. Pour cela :

  • Recherchez l’IP de votre machine et de la machine que vous «pinguerez» (une machine de la salle)
  • «Pinguez» la machine cible et capturez les trames sur votre machine (vous pouvez utiliser des filtres (voir ci-dessous))
  • Indiquez sur votre rapport votre IP, l’IP cible, une trame echo request et la trame echo reply correspondante (copie d’écran de Wireshark, montrant bien les trames en question).

Rappelez à quoi sert la commande ping.

Contenu du message ICMP #

Question 1-2 Grâce à la capture de Wireshark, pour une message Echo Request, identifiez, dans le message ICMP, les informations qui déterminent que le message est justement un Echo Request.

Quels sont les autres champs contenus dans le message ICMP ? À quoi servent-ils ?

En ce qui concerne les octets du message ICMP, certains proviennent du programme ping (couche application) et d’autres sont ajoutés par le protocole ICMP.

Question 1-3 Indiquez quelles sont les données ajoutées par ICMP et quelles sont les données produites par le programme ping. Autrement dit, quelle est la partie du message ICMP liée au protocole, et quelle est celle liée au programme ping. Justifiez.

Question 1-4 Demandez à l’encadrant à pouvoir intercepter des messages Echo Request provenant d’une machine sous Linux et capturez les trames. Voyez-vous un moyen d’identifier si la machine émettant les messages Echo Request fonctionne sous Linux ou bien sous Windows?

Encapsulation dans un datagramme IP #

Le message ICMP est ensuite encapsulé dans un datagramme IP.

Question 1-5 Faites apparaître, en surbrillance, sur une copie d’écran, le contenu de l’en-tête IP ajouté au message ICMP.

Question 1-6 Qu’est ce qui, dans l’en tête IP, permet de savoir que le message encapsulé est un message ICMP ?

Encapsulation dans une trame Ethernet #

Le datagramme IP est ensuite lui même encapsulé dans une trame Ethernet.

Question 1-7 Faites apparaître, en surbrillance, sur une copie d’écran, le contenu de l’en-tête Ethernet ajouté au datagramme IP. Quelle est sa longueur en octets ?

Question 1-8 Déduisez de l’analyse de l’entête Ethernet l’adresse MAC de votre machine et l’adresse MAC de la machine que vous avez pingué. Présentez ces résultats de manière claire (votre IP - votre adresse MAC, l’adresse IP pinguée, l’adresse MAC de la machine pinguée)

Comment connaître la marque des cartes réseaux utilisées dans la salle ? (https://macvendors.com/%7CMacVendors ou autre)

- Réponse au message #

La trame Ethernet analysée est maintenant lachée sur le réseau, récupérée par la machine cible, qui va y répondre par un Echo Reply

Question 1-9 Faites à nouveau une capture, contenant un Echo Request et un Echo Reply qui se corresponden (donnnez des copies d’écran de ces 2 messages ICMP). Identifiez les différences et les similitudes entre les deux messages Echo Request et Echo Reply et expliquez-les.

Voici le cheminement des informations entre les deux machines :

Parmi les informations qui s’affichent lors d’un ping figure le temps écoulé entre l’émission d’un Echo Request et la réception d’un Echo Reply (1 ms ou moins dans l’exemple qui suit).

Question 1-10 Sachant que les réponses n’arrivent pas forcément dans l’ordre d’émission des requêtes et sachant que sur une seule et même machine, on peut pinguer plusieurs fois et en même temps la même machine cible, comment pensez-vous que le délai entre émission et réception puisse être calculé ? Illustrez vos propos avec des exemples recueillis lors d’un test réel.

Principes du routage #

Nous venons de voir comment les informations transitaient d’une machine 1 vers une machine 2 directement connectées. Que se passe-t-il sur un réseau comme Internet ? Connaître l’adresse IP de la machine destination ne suffit sans doute pas pour la retrouver quelque part dans le monde. C’est là qu’intervient le routage.

Vous pouvez regarder l’IP de votre machine et son masque de sous-réseau à partir d’une console en faisant : ipconfig (Windows, essayez l’option /all) ou /sbin/ifconfig (Linux) Vous devez obtenir quelque chose comme :

Adresse IP ........... : 192.168.81.17
Masque de sous-réseau : 255.255.255.0

Question 2-1

  • Donnez les informations relatives à votre poste (IP, Masque, Classe de réseau, adresse de réseau, adresse de diffusion et passerelle).
  • Donnez la plage d’adresses qui peut être utilisée par les machines du même sous-réseau que vous.

Les explication qui suivent sont données pour une topologie de réseau qui n’est pas la vôtre. Vous devez comprendre les explications qui suivent et les refaire (voyez les questions à la fin) dans votre réseau.

Depuis une machine de votre réseau (par exemple la votre), comment joindre la machine 10.16.83.102 ? Il se peut que, comme dans notre exemple les deux réseaux 10.16.80.0 et 192.168.8X.0 soient reliés par l’intermédiaire d’un routeur. Mais peut-être pas… Il se peut que le premier réseau soit relié à un deuxième, qui lui même est relié à un troisième qui lui même est relié à la destination. La force du protocole IP réside en partie dans cette faculté de trouver sa route «tout seul» ou presque. Il suffit que votre machine connaisse l'@ du premier intermédiaire (routeur) et lui envoie le datagramme. La suite n’est plus de son ressort.

Voici comment pourraient être connectés les postes (les schémas qui suivent illustrent une ancienne configuration du réseau, qui n’est plus d’actualité. Ce sera à vous, dans la prochaine question, de déterminer la manière dont sont actuellement connectées les machines et les réseaux entre eux):

Sur ce schéma, le réseau 192.168.81.0 est en bleu et le réseau 10.16.80.0 est en rouge. La machine 192.168.81.17 appartient bien au réseau bleu et la machine 10.16.83.102 au réseau rouge. La passerelle du réseau bleu (la machine qui permet au réseau de «sortir») est 192.168.81.1 et elle appartient aussi au réseau rouge.

Une partie de cette structure est emmagasinée dans les machines sous la forme de tables de routage. La table de routage de 192.168.81.17 contient essentiellement comme informations (tapez route print (Windows) ou /sbin/route -n (Linux) pour les voir) le fait que :

  • Le réseau 192.168.81.0/255.255.255.0 est accessible directement par l’interface 1
  • Pour les autres réseaux, s’adresser à 192.168.81.1

La machine n’ayant qu’une interface (une seule adresse IP), nous lui avons donné le nom 1.

De son côté, la machine 192.168.81.1 a deux IP (elle a aussi 10.16.83.24) et donc deux interfaces. Disons que la première est celle qui correspond à 192.168.81.1. La table de routage de la machine ressemblera à :

  • Le réseau 192.168.81.0/255.255.255.0 est accessible directement par l’interface 1
  • Le réseau 10.16.80.0/255.255.240.0 est accessible directement par l’interface 2
  • Pour les autres réseaux, s’adresser à …

Les points de suspension signifient que le réseau 10.16.80.0 a sans doute aussi sa passerelle pour sortir vers l’extérieur, mais nous ne l’avons pas faite figurer sur le schéma.

C’est ainsi que la communication se fera de 192.168.81.17 vers 10.16.83.102 :

  • 192.168.81.17 consulte sa table de routage et voit que 10.16.83.102 ne fait pas partie d’un réseau accessible directement. Elle envoie le tout à sa passerelle : 192.168.81.1
  • La passerelle réceptionne et regarde de son côté si 10.16.83.102 fait partie d’un réseau directement accessible : c’est le cas (interface 2) et elle transmet le tout à 10.16.83.102.

Imaginons, pour terminer cet exemple que 192.168.81.17 veuille communiquer avec 194.254.43.242. Reprenons notre schéma et ajoutons les maillons manquants:

Sur ce nouveau schéma la passerelle de 10.16.80.0 apparaît. Il s’agit de 10.16.81.254, qui appartient aussi au réseau 194.254.43.0/255.255.255.0 avec l’adresse 194.254.43.1. Les numéros des interface figurent sur le schéma (lorsqu’il n’est pas indiqué on parlera de l’interface 1). Le passage des données de 192.168.81.17 vers 194.254.43.242 se fera donc ainsi :

  • 192.168.81.17 regarde si 194.254.43.242 appartient à un réseau de sa table de routage. Non. Donc elle transmet à la passerelle 192.168.81.1 sur son interface 1 (en lui indiquant le destinataire final).
  • 192.168.81.1 doit transmettre à 194.254.43.242. Cette machine n’appartient pas à un réseau qui figure dans sa table de routage (elle n’a que 192.168.81.0/255.255.255.0 et 10.16.80.0/255.255.240.0). Donc elle transmet à sa passerelle par défaut 10.16.81.254 en indiquant le destinataire final et l’expéditeur. Elle utilise l’interface 2 pour transmettre puisque le réseau de 10.16.81.254 est sur son interface 2.
  • 10.16.81.254 doit transmettre à 194.254.43.242. Cette machine appartient à un réseau qui figure dans sa table de routage. Elle lui envoie donc les informations directement par l’interface 2 puisque c’est l’interface qui correspond au réseau de destination.

Question 2-2 Donnez la table de routage de votre machine et commentez (ligne correspondant au réseau local et passerelle par défaut).

Question 2-3 Vous pouvez observer le trajet suivi par les paquets IP en utilisant le programme tracert -d (Windows) ou traceroute -n (Linux). En utilisant ce programme, proposez le schéma réel de la portion de réseau que vous pouvez examiner. Les machines suivantes

  • 192.168.8X.XX (au choix)
  • 10.16.83.102
  • 194.254.43.242

doivent impérativement figurer dans vote schéma.

Question 2-4 Essayez un «traceroute» (et un ping) vers google.com ou bien protonmail.com. Le traceroute ne sera peut être pas complet. Donnez ce que vous obtenez, et essayez de situer les routeurs. (Recherchez un service en ligne qui le fait, comme https://gsuite.tools/traceroute ou https://gsuite.tools/whois)

Question 2-5 Pinguez la machine 194.254.43.242 depuis votre poste et réalisez une capture avec Wireshark. Que pouvez-vous dire de l’adresse MAC de 194.254.43.242 ?

Protocole ARP #

Au niveau de la couche accès au réseau la correspondance entre l’adresse IP du premier routeur à joindre et son adresse MAC devait être effectuée. D’où provient cette information ? Il y a deux possibilités :

  • soit la machine émettrice connaît déjà l’adresse MAC de la destination car elle a déjà dialogué avec elle (elle la conserve dans un cache)
  • soit la machine émettrice ne la connaît pas. Dans ce cas, le protocole ARP (Address Request Protocol) est utilisé pour demander quelle adresse MAC correspond à une certaine IP.

Vous pouvez connaître la liste des adresses MAC que conserve votre machine dans son cache en utilisant la commande arp -a (Windows) ou arp -n (Linux).

Question 3-1 Donnez la liste des machines dans le cache ARP de votre machine. Pinguez une machine qui n’est pas actuellement dans votre cache (et qui est allumée….) et constatez son ajout dans le cache ARP (donnez-des copies d’écran montrant le contenu de votre cache ARP avant et après). Pourquoi la machine 10.16.83.102 n’apparaît-elle pas dans le cache même si vous la pinguez ?

Question 3-2 Vous pouvez utiliser Wireshark pour ne capturer que le protocole ARP en entrant dans la case Filtre : arp Essayez et constatez le nombre de messages concernant ARP et leur provenance. Comment expliquez vous une telle affluence ? En particulier, vous voyez peut être des messages concernant d’autres salles, voire d’autres réseaux.

Question 3-3 Ce système de résolution des adresses MAC fait partie des principes utilisés à des fins malveillantes : Que se passe-t-il à votre avis si lorsque la machine A (son IP est A et son adresse MAC est a) veut communiquer avec la machine C (son IP est C et son adresse MAC est c) et qu’une certaine machine B (son IP est B et son adresse MAC est b) envoie sans cesse des paquets de type ARP Reply indiquant à A que la machine qui a l’ip C, c’est elle-même, avec l’adresse MAC b… ?