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
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
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 !!!
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).
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
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:
A l’aide de sock en mode TCP générez un trafic passant par le routeur entre les deux réseaux.
Faire maintenant un test de génération de trafic à l’aide de plusieurs machines sources vers une même destination.
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.
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.
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.
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
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.
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 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:
n’oubliez pas d’utiliser également les fonctions de conversion htons() et htonl() pour toutes les conversions d’adresses dans les structures sockaddr.
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.
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.
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.
ne pas oublier de fermer dans le père, le socket retourné par accept().