Previous Up

Annexe B  Travaux pratiques

NET– TP 1: Installation, configuration de réseaux IP, outils





1 Votre premier réseau : un cas simple


1.1 Objectifs

Vous devez construire deux réseaux IP de 2 stations chacun (cf. schéma).

Cette manipulation doit vous permettre de mettre en évidences les mécanismes fondamentaux du fonctionnement de TCP/IP.


1.2 Mise en oeuvre

Vous disposez de 4 systèmes hôtes par paillasse. Convenez de leur répartition en deux groupes. Chaque système doit posséder son paramètrage IP, adresse et masque. Convenez d’un plan d’adressage. Paramètrez les systèmes. Testez les commandes comme ifconfig, route, netstat, etc. pour :


1.3 Résultats

  1. Expliquez le plan d’adressage retenu.
  2. Quels paramètres avez-vous donné à chaque système hôte ?
  3. Expliquez pourquoi la communication entre des machines dans des réseaux IP différents ne peut être effectuée malgré la présence d’un réseau Ethernet commun.
  4. Expliquez comment le destinataire d’un datagramme est trouvé par l’émetteur.
  5. Vérifiez la présence de communications entre les systèmes hôtes d’un même réseau et leur absence entre les systèmes hôtes des 2 réseaux différents. Citez les tests que vous effectuez.
  6. Utilisez les captures de trame pour mettre en évidence les communications ARP.
  7. Utilisez également les captures de trames pour la fragmentation (en envoyant des datagrammes ICMP de taille suffisamment grande).



2 Routage élémentaire


2.1 Objectifs
Tous les systèmes hôtes qui composent ce nouveau réseau doivent dialoguer entre eux au moyen de TCP/IP. Une des machines doit être configurée au moyen de deux cartes ethernet pour appartenir aux deux réseaux. Cette machine doit servir de routeur et permettre aux 4 machines de communiquer en même temps. Cette manipulation doit vous permettre de mettre en évidence les mécanismes de routage de TCP/IP.


2.2 Mise en oeuvre
Vous disposez de 4 systèmes hôtes par paillasse. Convenez d’affecter à un de ces systèmes hôtes la fonction de routeur. Chaque système doit posséder, dans son paramètrage IP, la connaissance de la façon d’atteindre tous les systèmes hôtes du nouveau réseau. Paramètrer les systèmes hôtes.


2.3 Résultats

  1. Quels paramètres avez-vous donné à chaque système hôte ?
  2. Expliquez comment le destinataire sur le réseau IP 2 d’un datagramme est trouvé par l’émetteur présent sur le réseau IP 1.
  3. Vérifiez la présence de communications entre les systèmes. Citez les tests que vous effectuez.
  4. Effectuez des captures de trafic sur le réseau pour retrouver toutes les trames échangées.
  5. Quels sont les contenus des tables arp une fois les premières transactions effectuées ?
  6. A l’aide de la commande ping, faite un capture de datagramme ICMP fragmenté sur le réseau Ethernet.
Remarque:

la machine ayant deux cartes ethernet nécéssite une configuration spéciale pour agir en tant que routeur. Sans cette configuration les paquets lui seront bien délivrés mais la machine ne les réémettra pas. Pour activer la fonction de routage il faut, sous Linux modifier la valeur de la variable du noyaux ip_forward:
echo 1 > /proc/sys/net/ipv4/ip_forward

Ajouter du routage, faire des boucles !!!

NET– TP 2: TCP et UDP



Le bute de ce TP est de vous familiariser avec les analyses de traces des protocoles réseaux ainsi qu’avec des analyses de performances simples.
[]0.9@percent A l’issue de ce TP vous devrez rendre un compte rendu écrit présentant les analyses et mesures que vous aurez effectué lors du TP. Vous devrez mettre en évidence les résultats obtenus à partir des mesures.
La première étape est de remonter la plate-forme du TP précédent en mettant en place le routage IP sur la machine à cheval entre les 2 réseaux Ethernet. Vous devez configurer un réseau IP par réseau Ethernet. Pour ce montage vous ferez attention à mettre un réseau ethernet à
100Mb/s et un réseau ethernet à 10Mb/s. Pour avoir une connexion à 100Mb/s entre deux machines vous devez soit utiliser un câble croisé, soit passer par un des switchs 24 ports disponibles (tous les hubs 4 ou 8 ports sont à 10Mb/s).


Figure B.1: montage de la plate-forme



1 Analyses simples et vérification des performances

Pour vérifier les performances des réseaux que vous venez de monter vous devez faire une première mesure de flux UDP et TCP entre les machines de votre réseau.

Vous devez mesurer le temps d’exécution avec la commande time et mesurer la quantité de données reçues par le serveur en effectuant une redirection de la sortie standard vers un fichier (et en enlevant le paramètre -i sur le serveur uniquement).

Vous ferez les mesures entre les machines

  1. Quels sont les débits que vous avez observés dans chacun des cas pour UDP et TCP ?
  2. Expliquez vos résultats et justifiez chacuns des débits.
  3. Quel est le principal mécanisme mis en avant par cette vérification simple des débits ?
  4. Estimez la taille maximale des buffers utilisés pour la pile réseau de la machine qui sert de routeur.
  5. Justifiez votre réponse précédente en indiquant clairement quelle est l’expérience qui vous permer de trouver la valeur.
  6. Dans ce dernier cas, donnez une estimation (à la louche) de la séquence des paquets qui sont arrivés au serveur.



2 Analyse des dialogues protocolaires

Vous devez réaliser une connexion de type TCP depuis votre poste de travail vers une application distante (telnet par exemple) en traversant le routeur. Vous provoquez un peu de trafic et vous vous déconnectez. Pendant toute la manipulation, vous capturez les dialogues protocolaires entre votre poste de travail et le serveur. Vous pouvez utiliser d’autres commandes pour souligner le dialogue protocolaire comme ping ou encore étudier les trames échangées lors d’une résolution d’adresse (ARP).

Vous pouvez lancer le serveur apache présent sur les machines:

knoppix@0[knoppix]$ su
root@0[knoppix]# apachectl start
[Fri Oct 20 14:03:21 2006] [warn] module ssl_module is already loaded, skipping
/usr/sbin/apachectl start: httpd started

Analysez le dialogue entre les deux systèmes hôtes et mettez en évidence la récupération de la page index.html sur le serveur. Lors de cette récupération vous mettrez retrouver les parties suivantes:

  1. les différentes phases de la connexion avec les valeurs utilisées par Linux;
  2. le bon fonctionnement du séquencement des paquets.
  3. le bon fonctionnement de la retransmission si elle apparaît;
  4. Quelle est la taille totale de la page index.html présente sur le serveur ?
  5. Comment cette page est-elle transportée sur le réseau ?
Configuration du slow start de TCP

A l’aide de sock en mode TCP générez un trafic passant par le routeur entre les deux réseaux.

  1. Mettez en évidence le mécanisme de slow start et indiquez comment il est paramétré sous Linux (vitesse de progression dans la fenêtre).
  2. Quelles sont les tailles de fenêtre maximale déclarées lors de la transaction ?
Partage de connexion TCP

Faire maintenant un test de génération de trafic à l’aide de plusieurs machines sources vers une même destination.

  1. Essayez avec deux sources vers une destination : quel est le débit moyen ?
  2. Même question pour une configuration avec 3 sources.
  3. Refaites maintenant les mesures avec 2 et 3 sources mais en rajoutant à chaque fois l’option -N sur sock. Quels sont les résultats obtenus ?
  4. Commentez en quelques lignes le fonctionnenement et les résultats des mesures que vous venez d’effectuer.



3 Analyse de performance

[]0.9@percent Vous devez Monter un réseau avec 2 routeurs. Vous aurez donc au final 3 réseaux IP (A+B), (B+C) et (C+D) : la machine C est transformée en routeur. Les trafics générés pourront donc être entre deux réseaux locaux avec la possibilité de passer par un troisième réseau intermédiaire.

L’analyse de performance à l’aide de commandes simples (ping, sock) va permettre de retrouver certains paramètres du réseau que vous avez monté. Ces performances devront mettre en évidence les paramètres suivants:


3.1 Influence de la fragmentation

Faites varier la MTU des liens ethernet (à l’aide de la commande ifconfig) pour mesurer l’influence de celle-ci sur la fragmentation d’un paquet IP. Essayez également avec une connexion TCP et reporter les tailles de MSS annoncées lors de l’ouverture de session.

Mesure de débit utile

Mesurez les débits utiles obtenus pour les protocoles UDP et TCP en présence de fragmentation. Vous devrez mesurer les débits entre deux machines sur le même LAN, puis entre deux machines en utilisant du routage.

  1. Tracez une courbe (taille de paquet IP, débit) en utilisant sock en UDP et son option -W pour générer du trafic. Essayez de mettre en avant l’influence de la MTU sur le débit (tâchez d’éviter à la perte des paquets pour ne pas fausser les mesures : faites des tests entre A et B et entre C et D).
  2. Tracez une courbe (taille de MTU, débit) en utilisant sock dans le mode que vous voulez pour mettre en évidence l’influence de la MTU dans le débit lorsque la taille des paquets est constante.


3.2 Temps de latence du réseau

A l’aide des outils, dont ping et netperf (voir td sur les outils), effectuez des mesures de temps de latence pour trouver la latence du réseau (paquet de taille 0). Comme il n’est pas possible d’envoyer un paquet de taille 0 vous devez faire une série de mesure permettant d’extrapoler ce temps de latence.

  1. Faites les mesures entre deux machines dans un même réseau local et donnez une estimation du temps de latence.
  2. Faites la même série de mesures en traversant un routeur. Donner une estimation de la décomposition des temps lors du trajet du paquet (réseau, machine, routeur, etc...).
  3. Justifiez votre réponse en traversant maintenant une deuxième routeur sur le trajet et en effectuant de nouvelles mesures.
  4. Quelle est l’influence du débit du réseau dans le temps de latence. Justifiez et commentez par rapport aux résultats obtenus dans les précédentes mesures.
NET– TP 3: Liaison modem et PPP



A. Fraboulet, S. Frénot



1 Présentation

L’objectif du TP est de réaliser des connexions point à point entre client et serveur en utilisant le protocole standard ppp (rfc 1661). Ce TP est une version simplifiée des approches proposées pour les connexions aux fournisseurs d’accès à Internet.

Note : Ce TP fait l’objet d’un compte rendu. Vous devrez rendre un rapport d’au maximum 5 pages sur les manipulations que vous avez effectué pendant le TP. La dernière question de ce TP doit être rédigée et détaillée dans votre compte-rendu.


1.1 Présentation de ppp

PPP (Point To Point Protocol) est un protocole négocié entre client et serveur. La négociation permet de définir d’une part les caractéristiques de la ligne physique et les caractéristiques de la couche réseau d’autre part avec des possibilités d’authentification et d’autoconfiguration pour le client.

Les critères sont négociés en deux phases :

L’établissement d’une liaison spécialisée entre un client et un serveur se fait en utilisant une liaison point à point entre ces deux entités. Dans notre approche le serveur ppp attribue au client appelant une adresse IP qu’il possède sur le réseau. Puis le serveur se fait passer sur le réseau local pour la machine cliente concernant les trames ppp (usurpation d’identité arp).


1.2 Fonctionnement d’une connexion par modem

Prise en main des modems

Pilotez les modems avec les outils (minicom sous Linux) et trouvez, en s’aidant de la documentation, les commandes permettant : de réinitialiser, de numéroter, de raccrocher, de reprendre la main sur une ligne établie, quitter l’outil sans raccrocher le modem, de demander à un modem de décrocher, de sauver une configuration de restaurer une configuration. (Attention aux fausses manipulations).

Une fois que vous aurez commencé à bien comprendre le fonctionnement des modems vous pouvez établir une liaison entre un modem client et un modem serveur sur le banc. Raccrocher et rappeler. Cette connexion est établie lorsque les deux modems se sont entendus sur les paramètres de base. Vous pourrez vérifier en restant dans minicom que la liaison, sans autre configuration logicielle, permet de faire passer des caractères tapé au clavier et les affiche dans la fenêtre minicom distante. Cette liaison bidirectionnelle servira de base aux montages suivants.



2 Réalisation d’une liaison PPP simple

Nous allons dans un premier temps monter une liaison point à point simple permettant d’échanger des informations entre 2 machines comme dans la partie précédente mais au lieu d’échanger des caractères tapés au clavier ce seront les programmes pppd qui pourront s’échanger des informations et mettre en place un réseau IP.

Pour mettre en place votre première connexion vous devez piloter les modems pour établir la connexion entre les machines (une machine numérote et appelle l’autre, la machine qui reçoit l’appel se contente de décrocher). Une fois la connexion établie, assurez vous que la liaison en mode caractère fonctionne bien. Vous devez alors quitter minicom sans réinitialiser les modems (Ctrl-A puis Q). Une fois revenus sur la ligne de commande vous pourrez lancer le démon pppd à la main avec la ligne de commande suivante :

pppd /dev/ttyS0

Vous devrez changer ttyS0 par ttyS1 suivant votre branchement. Cette commande est à lancer simultanément sur les deux machines.

Question : Que constatez vous si vous exécuter le programme ifconfig ?
Question : Finissez la configuration de vos machines pour permettre une communication IP passant par les modems, quelles commandes devez vous taper ?



3 Réalisation d’une liaison PPP client-serveur

Ce type de configuration est celui rencontré lorsqu’on se connecte par modem à un fournisseur d’accès à Internet (FAI ou ISP Internet Service Provider). Le serveur est la machine recevant les appels et sert à un client appelant à se connecter à Internet. Le démon ppp est donc en attente permanente de demande de connexion et le modem associé doit être configuré pour décrocher automatiquement et laisser la main à pppd pour qu’il puisse envoyer les paramètres de configuration au client.


3.1 Configuration du serveur

Installer le modem sur le serveur Linux afin qu’il réponde aux appels et qu’ils attribuent une adresse réseau au client. Pour cela le démon pppd utilise les fichiers suivants :

        /etc/ppp/options
        /etc/ppp/options.ttyS0

Les options courantes pour le fichier option sont les suivantes :

        asyncmap 0
        netmask 255.255.255.0
        lock
        crtscts
        modem
        debug
        kdebug 5
        noauth 

Expliquez la signification de ces options

Le fichier options.ttyS0 permet d’associer chaque sortie série à une liste d’options spécifiques à la ligne.

Question : Quels est l’intérêt ?
Question : Combien de port série y a-t’il sur la machine ? Donc ?
Un exemple d’options pour le fichier d’option de ligne sont :

        192.168.75.210:192.168.75.214 # adresse_locale:adresse_distante

Question : Une de ces options permet de récupérer les traces issues du noyau. Visualisez ces traces et indiquez sur ces traces comment se fait l’établissement de la connexion.

Remarques

les traces d’exécution passent par un démon (syslogd) qui se charge à partir d’un fichier de configuration d’écrire dans des fichiers adaptés les traces générés par les démons (où les simples exécutables). Dans le cas de ppp il faut ajouter les lignes

        daemon.*,kern.* /var/log/ppplog

dans le fichier syslog.conf, afin d’indiquer à ppp de générer les traces dans un fichier /var/log/ppplog. (Ne pas oublier de relancer le serveur syslogd en faisant un kill -HUP).

Une fois la configuration prête, ouvrir une fenêtre listant le fichier de traces:

       tail -f /var/log/ppplog

Enfin, lancez le serveur sous linux afin qu’il soit à l’écoute du port:

       pppd /dev/ttyS0

Question : Lancer l’émulateur de terminal et contactez le serveur. Que vous répond t-il ?
Question : Une fois la connexion établie. Donnez les tables de routage constituant la configuration de la communication sur chacune des machines. Comment fonctionne l’intéraction entre le niveau IP et le niveau PPP ?
Question : Donnez sur un schéma temporel les échanges de trames entre client et serveur ?

3.2 Configuration du client

Dans le cas d’un client Linux, comme pour Windows, l’approche est la même. Le client doit d’aboid établir la connexion téléphonique puis reprendre la main avec la mise en place du protocol ppp.

Question : Essayez de vous connecter sur le serveur et analyser la réponse de celui-ci.
Question : Une fois la connexion avec le serveur établie, quitter l’application de contrôle du modem sans le raccrocher et lancer le programme pppd sur la ligne série du modem. Observer les informations envoyées dans les fichiers de log.
Question : Réaliser un schéma temporel des échanges.


4 Configuration et raccord sur un réseau local

Réaliser le montage suivant à l’aide de la liaison modem et de la configuration du premier TP. Dans un premier temps la liaison modem et la liaison Ethernet ne sont pas dans le même réseau local.

Question : Mettez en place le réseau sur la ligne modem et les tables de routage appropriées.
Question : Essayez de mettre en place un mécanisme de proxyarp sur la machine serveur de connexion. (voir la page du manuel de pppd)
Question : A quoi sert ce mécanisme et comment fonctionne t’il ? Que faut’il changer dans les configurations des machines.


5 Questions sur le mode de communication point à point

Le mode de communication qui est proposé dans ce TP est un mode de communication point à point utilisant une connexion série. Ce mode de communication n’est pourtant pas limité à une utilisation simple comme nous venons de le voir.

N’importe quel moyen de communication peut être utilisé comme liaison de base pour mettre en place ppp à condition qu’elle soit bi-directionelle. On peut donc mettre en place une liaison ppp sur une liaison telnet ou ssh.

Proposez une utilisation d’une liaison ppp utilisant une liaison ssh comme support.

Questions:

  1. Quelles sont les piles de protocoles mises en œuvre aux extrémités de la communication ?
  2. Détaillez les datagrammes en transit sur le réseau.
  3. Quelles sont les adresse IP visibles sur le réseau ?
  4. Décrire les tables de routage utilisées par le machines ?
NET– TP 4: Programmation d’un serveur web (simple)





1 Introduction

HTTP est un protocole de niveau application spécifiquement conçu pour l’échange de fichiers hypertexte. Deux versions ont été normalisées à ce jour HTTP 1.0 [RFC 1945] et HTTP 1.1 [RFC2616]. la version1.1 offre une compatibilité ascendante avec la version1.0 en y ajoutant de nombreuses fonctionalités. Dans le cadre de ce TP nous nous concentrerons sur les fonctionnalités fondamentales de la version 1.0

On se propose d’adopter, pour la réalisation de ce serveur, une démarche incrémentale, ajoutant progressivement des fonctionnalités à un squelette de base. Toutefois, pour ne pas avoir à réécrire tout le programme à chaque nouvelle fonctionnalité ajoutée, il est important d’avoir bien en tête dès le départ l’ensemble des fonctionnalités à implémenter dans le serveur final et pour cela il est vivement recommandé de lire cet énoncé plusieurs fois et de procéder à une étape de conception préliminaire.



2 Serveur TCP séquentiel

Au moyen de l’API socket, construisez un premier squelette de serveur TCP séquentiel. Constitué d’une boucle sans fin, ce serveur se placera en attente de connexion et répercutera sur la sortie standard l’adresse IP du client et tout ce qu’il reçoit jusqu’à ce que ce dernier termine la connexion. Vous utiliserez pour cela les fonctions:

Attention :

n’oubliez pas d’utiliser également les fonctions de conversion htons() et htonl() pour toutes les conversions d’adresses dans les structures sockaddr.

Attention :

toutes les fins de ligne dans les entêtes doivent impérativement être codées par la séquence CR LF (Carriage Return/Line Feed, ASCII 13,10), il est déconseillé d’utiliser la séquence d’échappement \n dont la traduction ASCII est variable d’une plate-forme à l’autre.

14cm
14cm
14cm
Note :

Comme le protocole HTTP est un protocole dont la syntaxe orientée ligne de texte, l’utilisation de la bibliothèque standard stdio peut se révéler intéressante. Pour pouvoir utiliser les fonctions de stdio (fgets, fprintf, etc...) il faut néanmoins disposer d’un identificateur de type FILE * . La fonction fdopen() permet de construire un tel identificateur à partir d’un descripteur de fichier ou de socket.


3 Serveur HTTP séquentiel

A partir du squelette précédent il est assez simple d’implémenter les premières fonctionnalités d’un serveur HTTP. Le travail consiste à interpréter la requête puis à formuler une réponse. Le RFC 1945 contient la description des formats utilisés. Il est vivement conseillé de vous y référer pour une description exhaustive.

14cm
14cm



4 Serveur parallèle
Le serveur séquentiel précédent ne peut répondre qu’à une requête à la fois. On se propose de dépasser cette limitation en implémentant un serveur parallèle. Pour cela on utilise l’appel système fork() qui permet de créer un nouveau processus fils du processus courant. Le processus fils partage les descripteurs de fichiers de son père et peut donc travailler avec les socket créés par le père.

Important:

ne pas oublier de fermer dans le père, le socket retourné par accept().


Previous Up