Travaux Pratiques de Réseaux DUT 2 eme année



Documents pareils
M1 MIAGE - Réseau TP1

Le modèle client-serveur

Flux de données Lecture/Ecriture Fichiers

II/ Le modèle OSI II.1/ Présentation du modèle OSI(Open Systems Interconnection)

Couche application. La couche application est la plus élevée du modèle de référence.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Internet - Outils. Nicolas Delestre. À partir des cours Outils réseaux de Paul Tavernier et Nicolas Prunier

Présentation du modèle OSI(Open Systems Interconnection)

L3 informatique Réseaux : Configuration d une interface réseau

Intérêt du NAT (Network Address Translation) Administration Réseau Niveau routage. Exemple d Intranet. Principe NAT

Computer Networking: A Top Down Approach Featuring the Internet, 2 nd edition. Jim Kurose, Keith Ross Addison-Wesley, July ENPC.

Programmation Internet en Java

RMI le langage Java XII-1 JMF

Cours 6 : Programmation répartie

Rappels réseaux TCP/IP

Figure 1a. Réseau intranet avec pare feu et NAT.

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Introduction. Adresses

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Cisco Certified Network Associate

Le filtrage de niveau IP

Sécurité des réseaux Firewalls

Internets. Informatique de l Internet: le(s) Internet(s) Composantes de l internet R3LR RENATER

Remote Method Invocation (RMI)

Plan. Programmation Internet Cours 3. Organismes de standardisation

Traitement de données

Introduction aux Technologies de l Internet

Programme formation pfsense Mars 2011 Cript Bretagne

Réseaux et protocoles Damien Nouvel

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

DIFF AVANCÉE. Samy.

Systèmes et Réseaux (ASR 2) - Notes de cours Cours 14

TP4 : Firewall IPTABLES

Cours 1: Java et les objets

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

L3 informatique TP n o 2 : Les applications réseau

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

Foucart Digeon SISR1-CH7 Mise en place d'un serveur FTP BTS SIO 08/04/2013. SISR1 CH7 Mise en place d'un serveur FTP. - Page 1 -

Polycopié de TPs réseaux v.1.2

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

2 Chapitre 1 Introduction

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

TCP/IP, NAT/PAT et Firewall

Serveur de messagerie sous Debian 5.0

N o t i o n s d e b a s e s u r l e s r é s e a u x C h a p i t r e 2

Service de noms des domaines (Domain Name System) Cours administration des services réseaux M.BOUABID,

LAB : Schéma. Compagnie C / /24 NETASQ

CONFIGURATION DE BASE. 6, Rue de l'industrie BP130 SOULTZ GUEBWILLER Cedex. Fax.: Tel.:

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

GRETA SISR1 TP Installation et mise en place d un serveur FTP sous Windows Server 2013

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP 1 : LES COMMANDES RESEAUX Matière: RESEAUX LOCAUX

Packet Tracer : configuration des listes de contrôle d'accès étendues, scénario 1

Réseaux M2 CCI SIRR. Introduction / Généralités

Réalisation d un portail captif d accès authentifié à Internet

Année Universitaire session 1 d automne Parcours : CSB5 Licence 3 STS Informatique

Services Réseaux - Couche Application. TODARO Cédric

Formation Iptables : Correction TP

Multicast & IGMP Snooping

LA COUCHE TRANSPORT CONTRÔLE LE FLOT DE DONNEES TRANSMISES par la couche Réseau

Configuration de base de Jana server2. Sommaire

Ethernet Industriel Réseaux Ethway Coupleur Ethernet sur Automates Programmables. Plan. Contexte

Réseaux Locaux. Objectif du module. Plan du Cours #3. Réseaux Informatiques. Acquérir un... Réseaux Informatiques. Savoir.

Programmation client-serveur sockets - RPC

18 TCP Les protocoles de domaines d applications

Rapport du projet Qualité de Service

Dis papa, c est quoi un bus logiciel réparti?

Serveur FTP. 20 décembre. Windows Server 2008R2

ECOLE POLYTECHNIQUE DSI. Utilisation des serveurs mandataires («proxy») avec les protocoles d usage courant

VoIP et "NAT" VoIP et "NAT" 1/ La Traduction d'adresse réseau. 1/ La traduction d'adresse réseau. 1/ La traduction d'adresse réseau

FILTRAGE de PAQUETS NetFilter

Réseaux. 1 Généralités. E. Jeandel

Network musical jammin

CONFIGURATION FIREWALL

Filtrage IP MacOS X, Windows NT/2000/XP et Unix

6605 MFP 3615 MFP. Sommaire : Paramètres généraux. Réglages de l Horloge et des Bacs. Paramètre Copie (par défaut) Paramètres Réseaux (IP)

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

Gestion distribuée (par sockets) de banque en Java

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Premiers Pas en Programmation Objet : les Classes et les Objets

Sécurité et Firewall

L identité numérique. Risques, protection

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

GUIDE D UTILISATION ADSL ASSISTANCE

Le protocole TCP. Services de TCP

Microsoft Internet Security and Acceleration Déploiement et gestion de Microsoft Internet Security and Acceleration Server 2000

Chapitre I. La couche réseau. 1. Couche réseau 1. Historique de l Internet

2. DIFFÉRENTS TYPES DE RÉSEAUX

Administration réseau Firewall

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

SQUID P r o x y L i b r e p o u r U n i x e t L i n u x

Pré-requis installation

Master d'informatique 1ère année Réseaux et protocoles

Internet Protocol. «La couche IP du réseau Internet»

Introduction à HTTP. Chapitre HTTP 0.9

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Transcription:

Travaux Pratiques de Réseaux DUT 2 eme année Copyright c Emmanuel Nataf

Chapitre 1 Programmation réseaux 1.1 Communication avec UDP - package java.net Le but de ce TP est de réaliser deux programmes permettant le transfert d un fichier. Un programme devra lire un fichier depuis le disque dur et l envoyer en utilisant le protocole UDP. Le deuxième programme devra recevoir le fichier par le réseau et l enregistrer sur le disque dur 1. Pour les expérimentations, on utilisera des fichiers de tailles différentes, allant de 10Ko à 1 Mo, de préférence d un format binaire comme une image ou un document pdf. 1.1.1 Les classes nécessaires Dans les programmes émetteur et récepteur, il faut utiliser les classes : DatagramSocket : qui représente le point d accès des programmes avec le réseau. L émetteur doit en créer un sans paramètre, alors que le récepteur doit en creer un et indiquer sur quel port (entre 1024 et 65535) il recevra les données. DatagramPacket : qui représente un datagramme respectant le protocole UDP. L émetteur doit en créer un et le remplir des données provenant du fichier avec la méthode setdata(byte[]) puis l envoyer par le DatagramSocket vers le programme récepteur. Pour cela, il faut que le programme émetteur donne au DatagramPacket l adresse IP de la machine sur laquelle le programme récepteur s exécute ainsi que le numéro de port de réception (méthodes setaddress(inetaddress) et setport(int)). L adresse IP est obtenue par l appel de la méthode statique : InetAddress.getByName( nom machine ) ; 1 Comme il est possible de faire ce TP sur une seule machine, il faut faire attention à soit écrire les deux programmes dans des répertoires différents soit ne pas donner le même nom au fichier envoyé et reçu 1

2 Chapitre 1. Programmation réseaux où nom machine peut être localhost pour le cas où les deux programmes sont sur la même machine. FileInputStream : pour lire le fichier à transmettre, avec la métode read(byte[]). FileOutputStream : pour créer et écrire le fichier reçu avec la méthode write(byte[]). 1.1.2 Description du fonctionnement Le byte[] lu depuis le fichier devra être mis dans le DatagramPacket avec sa méthode setdata(byte[]). Le datagramme sera envoyé par la méthode send(datagrampacket) du DatagramSocket. Le byte[] contenant les données ne devrait pas excéder la taille maximale d un datagramme UDP qui est théoriquement de 65536 octets. Le système généralement se garde quelques octets et donc il faut trouver la taille maximale d un byte[] à envoyer dans un DatagramPacket. C est au moment de l émission ( méthode send(datagrampacket)) qu un exception java signale un paquet trop grand. Le datagramme sera reçu dans le programme du récepteur par la méthode receive(datagrampacket) et le byte[] contenu sera récupéré par la méthode getdata() du DatagramPacket reçu. Ce byte[] pourra enfin être écrit dans le fichier reçu. Le programme émetteur peut ajuster la taille du byte[] à envoyer car il connait la taille du fichier. En revanche, le récepteur doit prévoir la taille maximale car il ne peut pas savoir à l avance la taille du fichier. Un effet secondaire est que le récepteur créera un fichier de la taille maximale, même si le fichier reçu est plus petit. Attention, la grande majorité des méthodes utilisées peuvent générer des exceptions java, il est possible de toutes les prendre en compte par exemple en le signalant de la manière suivante : public static void main(string[] args) throws Exception { Ainsi, tout message d erreur s affichera à l écran. 1.1.3 Tests et mesures Dans le programme émetteur récupérer le temps du système avec la méthode statique : System.nanoTime() avant et après l émission du datagramme. Faire 10 fois chaque mesure pour des fichiers allant de 10 Ko à 60 Ko par tranche de 10 Ko. Comme il y a une limitation dans la taille des datagrammes, on se limitera à des fichiers dont la taille est inférieure ou égale à celle des datagrammes. Tracer

1.2. Communication avec TCP 3 la courbe obtenue avec les moyennes de chaque série de mesures. Vérifier que le fichier reçu est bien le même que le fichier émis. Si on lance le programme émetteur sans lancer le programme récepteur, que se passe-t-il? 1.2 Communication avec TCP Dans ce TP, tout comme le précédent, il faut écrire deux programmes ; un émetteur et un récepteur, pour s échanger un fichier, mais cette fois en utilisant le protocole TCP. 1.2.1 Classes à utiliser ServerSocket : Cette classe représente le point d accès d un serveur au réseau. Le programme récepteur doit créer un ServerSocket avec un entier représentant le numéro de port de réception (entre 1024 et 65535). La méthode accept() met le programme en attente d une connexion TCP demandée par un autre programme. Socket : Cette classe représente le point d accès d un client au réseau vers un serveur donné. Le programme émetteur doit créer un Socket avec l adresse IP de la machine où s exécute le programme serveur ( localhost par exemple) et le numéro de port de réception. Attention, un objet de la classe Socket est également retourné par la méthode accept() du récepteur lorque la demande de connexion TCP à été faite. 1.2.2 Description du fonctionnement Le récepteur doit créer un ServerSocket et attendre un demande de connexion par l émetteur. Ce dernier la réalise en créant un Socket qui va entrainer la création dans le programme récepteur de l autre Socket. Les deux Socket sont maintenant reliés par l intermédiaire du protocole TCP. Tout ce qui sera envoyé sur un des deux Socket sera reçu par l autre. Pour émettre et recevoir des données d un Socket, il faut utiliser les flux entrant et sortant des Socket (méthodes getinputstream() et getoutputstream()). Les flux permettent d envoyer et de recevoir des byte[]) avec les méthodes également appelées read(byte[]) et write(byte[]). Le programme émetteur devra donc lire un fichier avec un read(byte[]) puis écrire avec un write(byte[]) sur le Socket. De son coté, le récepteur devra lire depuis le Socket avec un read(byte[]) et écrire dans le fichier avec un write(byte[]). A noter que l émission d un byte[] n entraine pas forcément la réception d un byte[] de la même taille, mais plutôt la réception de plusieurs byte[] de plus petite taille. En effet, comme

4 Chapitre 1. Programmation réseaux dans la plupart des cas le réseau local est de l Ethernet (avec ou sans fil) dont la taille maximale des trames est d environ 1500 octets 2, TCP va découper à l émission le byte[] pour générer plusieurs segments TCP de cette taille. Dans le TP précédent, les datagrammes UDP, qui avaient une taille supérieure à 1500, ont été découpés par IP et son mécanisme de fragmentation. UDP n a pas eu conscience de ce fait. Des problèmes de synchronisation peuvent se poser entre l émetteur et le récepteur : Une fois que le récepteur a reçu la demande de connexion (passage de méthode accept()) et a récupéré le Socket lui permettant de communiquer avec l émetteur, il faut attendre que les premières données soient arrivées. Pour cela la méthode available() de la classe InputStream peut être utilisée. Le résultat de cette méthode retourne le nombre d octets pouvant être lu ; si le résultat est 0, c est que le flux n est pas encore prêt, ou que le transfert est terminé. Le résultat de la méthode available() doit aussi servir à diensionner correctement le byte[] de réception. Durant le transfert, une condition d arrêt possible est la surveillance de la présence de données dans le flux (la méthode read(byte[]) retourne ne nombre d octets lus). Lorsque le récepteur reçoit plusieurs segments (la plupart du temps), il est souvent nécessaire d ajouter un arrêt d une miliseconde (Thread.sleep(1)) 3 dans la boucle de réception. Le récepteur lisant trop rapidement par rapport à l émetteur, il ne trouve plus rien à lire et quitte la boucle de réception. Comme l émetteur continue d émettre, il se retrouve en situation d erreur. 1.2.3 Tests et mesures Faire les mêmes mesures que pour UDP et les comparer. Que se passe-t-il si on ne lance pas le programme récepteur, ou si on l arrête en cours de fonctionnement? 1.2.4 Sockets et Flux Dans ce TP les données ont été envoyées comme étant des octets. Si cela fonctionne bien avec des fichiers quelconques (texte ou image par exemple), ce n est pas facile d utilisation si on transmet des données formatées, comme des objets ou des chaînes de caractères. Java offre la possiblité de spécialiser des flux d octets qui sont à utiliser pour lire et écrire les données formatées. 2 Si émetteur et récepteur sont sur la même machine, la taille maximale est généralement plus grande 3 Pour des transferts de fichiers plus important, cet arrêt doit être plus long (5 par ex.)

1.2. Communication avec TCP 5 Flux de chaîne de caractères L utilisation de flux spécialisés dans les chaînes de caractères est très utililisé dans des applications standards de l internet, comme le mail (SMTP), le web (HTTP) ou le transfert de fichier (FTP). Les flux java spécialisés pour le traitement des chaines sont les classes java.io.inputstreamreader, java.io.bufferedreader et java.io.printwriter 4. Dans ce TP, on ne réalisera en premier que le programme recevant des chaînes de caractères qu il devra afficher à l écran. Les programmes émetteurs seront les navigateurs internet à disposition. Pour que le navigateur envoient à votre programme ses données, il faut vérifier qu un proxy ne sera pas utilisé pour le réseau local ou pour la machine courante (localhost). Enfin, deux cas sont possibles : Le récepteur attend sur le port 80 et l adresse à mettre dans le navigateur sera : http ://localhost. Le récepteur attend sur un autre port, par exemple le 8080 et l adresse à mettre sera : http ://localhost :8080 Losrque vous affichez toutes les lignes que génèrent les navigateurs, vous pouvez constater que le navigateur attend une réponse indéfiniement, jusqu à indiquer une erreur. Le programme récepteur peut lui envoyer une simple chaîne de caractères comme : <HTML>Hello World</HTML> qui s affichera sur le navigateur. Pour que cela fonctionne, il faut retourner cette chaîne de caractères dès que la première ligne envoyée par le navigateur est reçue par votre programme. Flux d objets Les classes java.io.objectinputstream et java.io.objectoutputstream représentent des flux spécialisés dans l émission et la réception d objets java. Une contrainte sur ces objets pouvant ainsi être déplacés d un programme à l autre est qu il doivent implémenter l interface java.io.serializable 5. Créer une classe simple, contenant un entier publique, et qui soit sérialisable. En vous inspirant des programmes précédents, faites un programme créant une instance de votre classe simple et l envoyant à un autre programme via une connexion TCP. Le programme recevant l objet devra afficher l entier qu il contient. Noter que la méthode de lecture d un objet readobject() de la classe java.io.objectinputstream retourne une intance de la classe Object. Il faudra donc faire un cast de cet objet reçu avec la classe simple. 4 Il en existe d autres, mais ici nous avons limités celles qui traitent des lignes de caractères se terminant par un \n. 5 Ce qui n entraîne pas plus de code car cette interface ne définit aucune méthode!

6 Chapitre 1. Programmation réseaux Ci dessous un exemple de classe simple : 1 import java. i o. S e r i a l i z a b l e ; 2 3 p u b l i c c l a s s WalkingClass implements S e r i a l i z a b l e { 4 5 p r i v a t e i n t count ; 6 7 p u b l i c WalkingClass ( i n t c ){ 8 count = c ; 9 } 10 p u b l i c void i n c ( ) { 11 count++; 12 } 13 p u b l i c void dec ( ) { 14 count ; 15 } 16 p u b l i c i n t getcount ( ) { 17 return count ; 18 } 19 } 1.3 Communication multicast La communication en multicast est une communication entre un ou plusieurs émetteurs et un ou plusieurs récepteurs, l ensemble représentant ce que l on appelle un groupe multicast. Les adresses IP ayant leur premier octet à une valeurs supérieure ou égale à 224 sont des adresses multicast. Pour réaliser un groupe multicast, il faut que les émetteurs et récepteurs s abonnent à une même adresse IP multicast. A partir de ce moment, tout ce qui envoyé par un émetteur est reçu par tous les récepteurs (et également les autres émetteurs s ils désirent écouter). En plus de l adresse IP multicast, les récepteurs doivent tous attendre sur un même numéro de port et les émetteurs doivent envoyer leurs informations vers ce numéro de port (il n y a pas de numéro de port réservés pour le multicast). La classe MulticastSocket est utilisée pour envoyer ou recevoir des données d une adresse multicast. Un socket multicast est un DatagramSocket avec des propriétés supplémentaires pour se connecter à un groupe multicast sur l internet. Un groupe multicast est représenté par une

1.3. Communication multicast 7 adresse IP de classe D, ce qui fait que les adresses multicast sont comprises entre 224.0.0.1 et 239.255.255.255, et un numéro de port. Pour créer un socket multicast, il est nécessaire d instancier la classe MulticastSocket grâce à son constructeur MulticastSocket(int port). Si l on est récepteur, il faut préciser dans le constructeur le numéro de port sur lequel on écoute. Si l on est client, ce numéro de port sera nécessaire pour construire et envoyer les datagrammes vers les récepteurs. Une fois un socket multicast créé, il est possible d exécuter quatre méthodes sur lui qui sont : Joindre un groupe multicast. Cela est nécessaire pour recevoir des données d un groupe multicast et se réalise à l aide de la méthode joingroup(inetadress i) à laquelle on passe en paramètre une InetAdress représentant l adresse multicast. Envoyer des données aux membres du groupe multicast grâce à la méthode send(datagrampacket dp, byte ttl) à laquelle on passe en paramètre un DatagramPacket contenant la donnée à envoyer et son Time-To-Live afin d empêcher les boucles de routage. Recevoir des donnée des membres du groupe multicast grâce à la méthode receive(datagrampacket dp) à laquelle on passe en paramètre un DatagramPacket destiné à recevoir la donnée envoyée par un des autres membres du groupe. Quitter le groupe multicast à l aide de la méthode leavegroup(inetadress i) à laquelle on passe en paramètre l adresse multicast à quitter. 1.3.1 Programme de discussion interactive Un programme de discussion interactive (un chat) permet à plusieurs utilisateurs de s envoyer des messages. Avec le multicast, faire en sorte que chaque message soit reçu par tous les utilisateurs.

Chapitre 2 Applications 2.1 Un serveur Web Réaliser un serveur qui puisse répondre à des requêtes d un client utilisant le protocole HTTP. Pour avoir une idée de ce qui est envoyé par un navigateur, on peut faire un programme avec un serversocket qui affiche à l écran tout ce qu il reçoit. D un autre coté, on peut faire un programme avec un Socket qui affiche tout ce qu un serveur HTTP, retourne après une requête. Comme le protocole HTTP utilise le retour chariot (CR/LF) pour séparer ses différents champs, il est plus simple d utiliser les classes java.io.bufferedreader et java.io.printwriter pour lire ou écrire dans les sockets. 2.2 Un serveur d application En partant du serveur précédent, modifier le afin qu il puisse faire s exécuter des classes java à la demande des clients. Les exécutions se font sur le serveur à la manière des servlet java. Onpeut s inspirer des interface et classe java donné en exemple. 2.3 Serveur d accès à distance Le but de ce TP est de réaliser un serveur qui permettent à un client d effectuer des commandes MSDOS sur la machine du serveur. On pourra utiliser la classe Process et ses flux d entrée / sortie. 8