RESEAUX Communications dans les systèmes Centralisés vs Répartis Espace utilisateur P1 P2 P1 P2 Programmation par sockets Espace noyau Systèmes centralisés Systèmes répartis Nécessité d avoir une mémoire partagée ex : pipe sous Unix Communications par envoie de messages USTL / IUT A - Réseaux - 2003/2004 Jean Carle 2 Plan Modèles sous-jacents OSI, TCP-UDP/IP Sockets Connexion TCP Connexion UDP Port de connexion API Socket Java Le modèle OSI : 7 couches Open System Interconnexion 7 Application - Ensemble de services standard : terminal virtuel, transfert de fichiers, 6 Présentation - Codage de l information formatage, compression, cryptage 5 Session -Gestion complète d une session de communications entre 2 utilisateurs. 4 Transport - Transport de l information entre deux processus : découpage en paquet, multiplexage 3 Réseau - Transport de l information entre deux points du réseau (Routage) 2 Liaison de données - Transport de l information entre deux points des blocs de données (trames) 1 Physique - Transport de l information comme une suite de bits USTL / IUT A - Réseaux - 2003/2004 Jean Carle 3 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 4 Modèle TCP/IP TCP/IP : Passerelle 5 Application 4 Transport telnet, ftp, smtp pop, http, nntp, TCP tftp, snmp, rip, rpc, dhcp, UDP Application Transport Messages Identiques Paquets Identiques Application Transport 3 2 Accès Réseau 1 Physique ARP RARP ATM Ethernet IP Fibre Optique ICMP IGMP Physique 1 Datagrammes Trames Passerelle Datagrammes Trames Physique 2 LAN 1 LAN 2 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 5 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 6 1
TCP Transmission Control Protocol Transmission avec connexion (type téléphone) Création d un circuit virtuel entre source et destination Mode point à point Gestion séquence Ordonnancement des paquets Gestion des flux afin d éviter l envoie de paquets irrecevable par le destinataire (ex : manque de place). Liaison full-duplex (virtuellement) Orienté flux de données Connexion fiable de bout en bout mais lente (complexe) USTL / IUT A - Réseaux - 2003/2004 Jean Carle 7 UDP User Datagram Protocol Transmission sans connexion (modèle Postal) Pas de contrôle de séquencement L ordre d arrivée des messages peut être différent de l ordre d envoie Pas de garantie d arrivée Mais les données reçues sont garanties non corrompues Non fiable mais rapide Applications audio/vidéo Petits flux de données USTL / IUT A - Réseaux - 2003/2004 Jean Carle 8 Ce ne sont pas des ports physiques comme les ports séries ou parallèles, ce sont des ports logiques. Un port de connexion est un nombre sur 16 bits 65536 possibilités Ports réservés en standard : de 0 à 1023 http://www.iana.org/assignments/port-numbers, RFC 1700 Permet d avoir sur une même machine, plusieurs services accessibles simultanément (web, email, ftp, ) Identification locale d un service : S1 : @IP1:x S2 : pas d accès réseaux S3 : @IP1:y S1 S2 S3 @IP1 x y z t P1 P3 @IP2 Une liaison entre deux machines est identifiée par la connaissance de deux couples (@machine / port cnx) : Identification de l application cliente et de l application serveur. P2 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 9 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 10 0 Exemples Plage de port 1024 49151 65536 Ports réservés Ports déclarés mais utilisables Ports libres Zone utilisateurs Remarque : Le port 0 est spécial Certaines applications réservent des ports en zone utilisateurs ex : X11 se réserve le port 6000 http ftp telnet smtp https Appli. dédiée dns chargen 80 20/21 23 25 443 3435 53 19 Machine A 1345 Machine B Machine C Liste des ports réservés : RFC 1700 http://www.iana.org/assignments/port-numbers USTL / IUT A - Réseaux - 2003/2004 Jean Carle 11 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 12 2
Les Sockets Le modèle Les sockets = interface (point de communication) = API (Application Program Interface) Interface entre les programmes d applications et les couches réseaux Le terme Socket (embout) désigne aussi un canal de communication par lequel un processus peut envoyer ou recevoir des données L API Socket est proche de l API Fichier d Unix Primitives de d ouverture/fermeture, lecture/écriture, de contrôle Histoire 1982 : BSD implémente une interface Socket Winsock de Trumpet pour windows API Réseau de Java java.net et javax.net Niveau application (couches OSI 5,6,7) URL, URLConnection, HttpURLConnection, JarURLConnection, URLDecoder, URLEncoder, Adresse IP InetAddress Sockets TCP Socket, ServerSocket Sockets UDP DatagramSocket, DatagramPacket Multicast MulticastSocket USTL / IUT A - Réseaux - 2003/2004 Jean Carle 13 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 15 Classe java.net.inetaddress Représente une adresse IP Utilisé par les classes Socket et DatagramSocket public static InetAddress getbyname(string host), public static InetAddress [ ] getallbyname(string host), public static InetAddress getlocalhost(), Exception : UnknownHostException, IOException Sous classe : Inet4Address, Inet6Address. Classe java.net.inetaddress Exemple : InetAddress adresse; if (args.length > 0) adresse=inetaddress.getbyname(args[0]); else adresse=inetaddress.getlocalhost(); System.out.println(adresse.toString()); catch (UnknownHostException e) { System.out.println("Adresse inconnue"); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 16 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 17 Sockets TCP Mode connecté La connexion est asymétrique Une machine est client : classe java.net.socket Demandeur d un service Demande l établissement d une connexion avec le serveur Une machine est serveur : classe java.net.serversocket Prestataire d un service Attend les demandes de connexion et les accepte 2 flots de données établis entre les 2 machines Circuit virtuel Sockets TCP - Connexion Connexion client (active) client = new Socket("adresseServeur", portservice); Derrière : Demande de connexion au serveur ; Création de deux canaux de communications. Connexion serveur (passive) serveur = new ServerSocket(portService); socketclient = serveur.accept(); // attente d une demande de connexion // l appel est bloquant USTL / IUT A - Réseaux - 2003/2004 Jean Carle 18 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 19 3
Sockets TCP - Dialogue Récupération des canaux d entrée et de sortie InputStream is = client.getinputstream(); OutputStream os = client.getoutputstream(); Possibilité d utiliser un reader bufferisé et un writer in = new BufferedReader(new InputStreamReader(is)); out = new PrintWriter(os, true); Réception/Envoie de données String ligne = in.readline(); out.println("j écris dans le tuyau"); D autres méthodes existent pour utiliser différents types de flots de données, RTFM 1 Sockets TCP Création Socket et demande de connexion Ouverture client OK Client 1 Serveur 1 Création ServeurSocket liaison à un port TCP 2 Attente d une demande de connexion Ouverture serveur OK 1 Relis Ton Formidable Manuel : classe java.io.* USTL / IUT A - Réseaux - 2003/2004 Jean Carle 20 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 21 Socket TCP Exemple code client import java.net.*; import java.io.*; public class ClientEcho { public static void main(string[] args) { String ligne, adrserv = args[0]; int portserv = Integer.parseInt(args[1]); BufferedReader in, userinput; PrintWriter out; Socket masocket; // connexion avec le clavier userin = new BufferedReader ( new InputStreamReader( System.in ) ); // Ouverture socket, demande de connexion masocket = new Socket (adrserv, portserv); // connexion au canal de réception in=new BufferedReader ( new InputStreamReader ( masocket.getinputstream() ) ); // connexion au canal d écriture out = new PrintWriter ( masocket.getoutputstreaml() ); Socket TCP Exemple code client // saisie clavier ligne = userinput.readline(); // bloquant // Finie? Oui, alors sortie if (ligne.equals(".")) break; // Non => envoie (écriture) des données au serveur (out) out.println(ligne); // Lecture canal réception (in) et affichage à l écran System.out.println(in.readLine()); // bloquant si canal vide catch (UnknownHostException e) {System.err.println(e); catch(ioexception e) {System.err.println(e); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 22 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 23 Socket TCP Exemple code serveur import java.net.*; import java.io.*; public class ServeurEcho { public static void main(string[] args) { int portmonservice = Integer.parseInt(args[0]); ServerSocket socketecoute; // Creation connexion passive socketecoute = new ServerSocket ( portmonservice ); // Attendre et réalisez le service pour chaque connexion // accès séquentiel (un client servit à la fois) while ( true ) doservice( socketecoute.accept() ); // bloquant catch(ioexception e) {system.err.println(e); Socket TCP Exemple code serveur static void doservice (Socket clientsocket) throws IOException { BufferedReader in; PrintWriter out; // Connexion au flux en lecture in =new BufferedReader(new InputStreamReader( socketclient.getinputstream()) ); // Connexion au flux en écriture out = new PrintWriter( socketclient.getoutputstreaml() ); // Ici, on renvoie ce que l on reçoit // ATTENTION : readline est bloquant while (true) out.println(in.readline()); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 24 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 25 4
Socket UDP Mode non connecté Non fiable, et réception non ordonnée Principe Pas de circuit virtuel définit à l avance L envoyeur envoie un datagramme (paquet de données) sur un socket que le receveur écoute. java.net.datagramsocket Représente le socket local ou distant en mode non connecté java.net.datagrampaquet Représente le paquet à envoyer ou reçu (tableau d octets) Socket UDP Émetteur Création d un socket DatagramSocket dgsocket = new DatagramSocket(); Préparation des données byte[] data = new byte[15];// à remplir!! data = {'H','e','l','l','o','\r','\n'; DatagramPacket outdata = new DatagramPacket(data, data.length, IP_destination, port); Envoie du paquet dgsocket.send(outdata); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 26 USTL / IUT A - Réseaux - 2003/2004 Jean Carle 27 Socket UDP Récepteur Création d un socket lié au port d écoute DatagramSocket dgsocket =new DatagramSocket(port); Préparation du paquet de réception byte[] data = new byte[max];// vide DatagramPacket indata = new DatagramPacket(data, data.length); Réception du paquet dgsocket.receive(indata); // bloquant RAPPEL : l ordre de réception des paquet peut être différent de celui d émission USTL / IUT A - Réseaux - 2003/2004 Jean Carle 28 Socket UDP Exemple code émetteur import java.io.*; import java.net.*; public class ClientUDP { public static void main (String [] args) { InetAddress adrserv = InetAddress.getByName(args[0]); int portserv = Integer.parseInt(args[1]); DataInputStream user = new DataInputStream(System.in); // clavier DatagramSocket dgsocket = new DatagramSocket();//Socket UDP client String ligne = user.readline(); // Lecture clavier if (line.equals(".")) break; // Fin? Oui, alors sortie // Non, alors préparer et envoyer un paquet int ldata = ligne.length(); byte [] data = ligne.getbytes(); DatagramPacket dg=new DatagramPacket(data, ldata, adrserv, portserv); dgsocket.send(dg); // Paquet envoyé catch (IOException e) {System.err.println(e); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 29 Socket UDP Exemple code récepteur import java.io.*; import java.net.*; class ServeurUDP { final static int port = 5555, lgmax=1024; final static byte buffer[] = new byte[lgmax]; public static void main(string argv[]) { // Socket UDP serveur : port d écoute en paramètre DatagramSocket dgsocket = new DatagramSocket(port); // préparation paquet de réception DatagramPacket datareceived=new DatagramPacket(buffer, buffer.length); dgsocket.receive(datareceived); //attente réception : appel bloquant // Affichage de la provenance et du contenu du datagramme System.out.println("Paquet reçu : "+new String(dataReceived.getData())); System.out.println("Emetteur : " + datareceived.getaddress().gethostname() + ":" + datareceived.getport()); catch (IOException e) {System.err.println(e); USTL / IUT A - Réseaux - 2003/2004 Jean Carle 30 5