La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Communication entre processus - UDP From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre.

Présentations similaires


Présentation au sujet: "Communication entre processus - UDP From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre."— Transcription de la présentation:

1 Communication entre processus - UDP From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre 4

2 Plan zCaractéristiques des protocoles de communication entre processus dans un système réparti yPrincipes généraux ycommunication xpar datagrammes Client-serveur Communication de groupe xpar flots (streams) Client-serveur yconstruction de protocoles pour les patterns de communication xclient-serveur : requête-réponse xgroupe : même message est envoyé à plusieurs processus ydonnées xreprésentation des objets dans les messages xréférences à des objets distants

3 Interface de programmation pour UDP zabstraction la plus simple pour la transmission de messages zpermet au processus émetteur d ’envoyer un message au processus destinataire zles paquets indépendants sont appelés datagrammes zspécification de la destination via un socket ysocket : référence indirecte à un port spécifique du processus destination sur son ordinateur hôte

4 Communication par datagrammes zUn datagramme ytransmis par UDP ( User Datagram Protocol) ypas d ’accusé de réception ypas de ré-émission yle message peut ne pas arriver

5 Fonctionnement zÉmetteur :processus client ycréer un socket lié à une adresse Internet et un port quelconque libre xpour recevoir la réponse zRécepteur : processus serveur ycréer un socket lié à une adresse Internet et un port serveur prédéterminé connu des clients  la méthode receive rend xl ’adresse Internet de l ’émetteur xle numéro de port de l ’émetteur xle message

6 Communication par datagrammes exemple simple : le serveur import java.net.*; import java.io.*; // UDP server repeatedly receives a request and sends it back to the client public class UDPServer { public static void main(String args[]){ DatagramSocket aSocket = null; try{ aSocket = new DatagramSocket(6789); // port convenu avec les clients byte[] buffer = new byte[1000]; while(true){ DatagramPacket request = new DatagramPacket(buffer, buffer.length); aSocket.receive(request); // réception bloquante DatagramPacket reply = new DatagramPacket( request.getData(), request.getLength(), request.getAddress(), request.getPort()); aSocket.send(reply); // émission non-bloquante } }catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e) {System.out.println("IO: " + e.getMessage());} } finally {if(aSocket != null) aSocket.close();} }}

7 import java.net.*; import java.io.*; // UDP client sends a message to the server and gets a reply public class UDPClient{ public static void main(String args[]){ // args give message contents and server hostname DatagramSocket aSocket = null; try { // socket + port quelconque pour envoyer et recevoir la réponse aSocket = new DatagramSocket(); byte [] m = args[0].getBytes(); InetAddress aHost = InetAddress.getByName(args[1]); int serverPort = 6789; // port convenu avec le serveur DatagramPacket request = new DatagramPacket(m, args[0].length(), aHost, serverPort); aSocket.send(request); byte[] buffer = new byte[1000]; DatagramPacket reply = new DatagramPacket(buffer, buffer.length); aSocket.receive(reply); System.out.println("Reply: " + new String(reply.getData())); }catch (SocketException e){System.out.println("Socket: " + e.getMessage()); }catch (IOException e){System.out.println("IO: " + e.getMessage());} }finally {if(aSocket != null) aSocket.close();}}} Communication par datagrammes exemple simple : le client

8 Contraintes liées à l ’usage de datagrammes zTaille des messages yle récepteur doit spécifier un vecteur d ’octets d ’une taille déterminée pour recevoir le message xle message peut être tronqué à l ’arrivée xsous IP taille des paquets maximale 2**16 octets xdans la plupart des environnements, max 8Kb, en général zSynchronicité yÉmission non-bloquante xsend rend le contrôle dès que le message est transmis aux protocoles UDP et IP xà l ’arrivée, le message est placé dans une file sur le socket associé au port de destination si aucun processus ne possède de socket associé à ce port, le message est écarté yRéception bloquante xjusqu ’à l ’arrivée d ’un message à moins qu ’un timeout n ’existe sur le socket xutilisation de threads distincts pour contrôler ce problème zTimeouts yServeur xattente infinie peut être acceptable yautres applications xmoins acceptable ou praticable xfixer un timeout sur le socket la valeur doit être suffisamment élevée par rapport au temps de transmission des messages zÉmetteurs multiples yLa méthode receive xne permet pas de spécifier une origine pour le message à lir xrend l ’adresse Internet et le port de l ’émetteur le destinataire peut savoir d ’où provient le message xpossible de connecter un socket pour datagramme à une adresse Internet et un port remote spécifique le socket ne peut recevoir et émettre que vers cette adresse

9 Modélisation des fautes zCommunication fiable ypropriété d ’intégrité : un message ne doit pas être corrompu, ni dupliqué xutilisation de checksum pour la détection de messages corrompus : responsabilité de l ’application yPropriété de validité: tout message est éventuellement livré xdes messages peuvent ne pas être livrés (faute par omission) erreur de checksum ou tampon plein à la source ou la destination yNote: des messages peuvent aussi ne pas être livrés dans le bon ordre zOn peut construire un système de communication fiable fondé sur les datagrammes : accusé de réception + checksums

10 Utilisation de UDP zPour certaines applications, il est acceptable d ’utiliser un système où il peut survenir des fautes par omission zExemple : DNS est implémenté à l ’aide de UDP zAvantage ypas de overhead lié à la garantie de livraison, à savoir xle besoin d ’emmagasiner de l ’état de la communication à la source et à la destination xla transmission de messages supplémentaires xle temps d ’attente (latency) chez l ’émetteur

11 zjava.net.DatagramPacket //sending data public DatagramPacket(byte[] buf, int length, InetAddress address, int port)InetAddress //receiving data public DatagramPacket(byte[] buf, int length) //accessors public InetAddress getAddress()InetAddress public int getPort() public byte[] getData() public int getLength() API Java pour les datagrammes

12 zjava.net.DatagramSocket public DatagramSocket(int port) public void send(DatagramPacket p) throws IOExceptionDatagramPacketIOException public void receive(DatagramPacket p) throws IOExceptionDatagramPacketIOException //If the timeout expires, a java.io.InterruptedIOException is raised, public void setSoTimeout(int timeout) throws SocketExceptionSocketException //When a socket is connected, receive and send will not perform any security checks on incoming and outgoing packets, other than matching the packet's and the socket's address and port. public void connect(InetAddress address, int port)InetAddress

13 Implémentation de la communication de groupe via UDP zIP multicast ydisponible seulement via UDP au niveau application ymulticast xsur un réseau local xsur une zone Internet plus grande (multicast routers) ttl (time to live) –nombre de routers qu ’un datagramme peut traverser –valeur = 1 --> réseau local yun group multicast est spécifié par une adresse IP de classe D xgroupes permanents : 224.0.0.1 à 224.0.0.255 xgroupe temporaire : besoin d ’une adresse libre yl ’appartenance à un groupe est dynamique yon peut envoyer un datagramme à un groupe multicast sans en être membre

14 import java.net.*;import java.io.*; public class MulticastPeer{ public static void main(String args[]){ // args give message contents and destination multicast group (e.g."228.5.6.7") MulticastSocket s =null; try { InetAddress group = InetAddress.getByName(args[1]); s = new MulticastSocket(6789); s.joinGroup(group); byte [] m = args[0].getBytes(); DatagramPacket messageOut ; messageOut = new DatagramPacket(m, m.length, group, 6789); s.send(messageOut); byte[] buffer = new byte[1000]; for(int i=0; i< 3;i++) { // get messages from others in group DatagramPacket messageIn ; messageIn = new DatagramPacket(buffer, buffer.length); s.receive(messageIn); System.out.println("Received:" + new String(messageIn.getData())); } s.leaveGroup(group); }catch (SocketException e){ System.out.println("Socket: " + e.getMessage()); }catch (IOException e){ System.out.println("IO: " + e.getMessage()); }finally {if(s != null) s.close();}} }

15 Communication par datagrammes Broadcasting : MulticastClient public static void main(String[] args) throws IOException { MulticastSocket socket = new MulticastSocket(4446); InetAddress address = InetAddress.getByName("230.0.0.1"); socket.joinGroup(address); DatagramPacket packet; for (int i = 0; i < 5; i++) { // get a few quotes byte[] buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String received = new String(packet.getData()); System.out.println("Quote of the Moment: " + received); } socket.leaveGroup(address); socket.close(); }

16 Communication par datagrammes Broadcasting : MulticastServer package chapitre4; public class MulticastServer { public static void main(String[] args) throws java.io.IOException { new MulticastServerThread().start(); }

17 Communication par datagrammes Broadcasting : MulticastServerThread public class MulticastServerThread extends QuoteServerThread public void run() { while (moreQuotes) { try {byte[] buf = new byte[256]; // construct quote String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); buf = dString.getBytes(); // send it InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet = new DatagramPacket (buf, buf.length, group, 4446); socket.send(packet); // sleep for a while try {sleep((long)(Math.random() * FIVE_SECONDS)); } catch (InterruptedException e) { } } catch (IOException e) { e.printStackTrace(); moreQuotes = false;}} socket.close();}

18 Communication de groupe zMulticast yenvoi d ’un message par un processus à chaque membre d ’un groupe de processus zinfrastructure pour construire des systèmes répartis tels que ytolérants aux fautes par réplication des services xmulticast de la requête d ’un client à un groupe de serveurs ytrouver des serveurs de découverte dans des systèmes avec réseautage spontané yaméliorer la performance grâce à la réplication de données xchaque fois que les données changent, multicast aux processus qui gèrent les copies ypropager des notifications d ’événements, xJini lorsque de nouveaux services de lookup annoncent leur existence

19 Modélisation des fautes zIdentique à celle des diagrammes UDP yfaute par omission zsi un routeur multicast tombe yles clients dépendants de ce routeur ne reçoivent plus les messages, même si les clients locaux peuvent les recevoir zordre d ’arrivée n ’est pas garanti

20 Effets de la fiabilité et de l ’ordonnancement des messages zTolérance aux fautes fondée sur la duplication de services ypour demeurer consistants entre eux, les serveurs xont le même état initial xet doivent réaliser les mêmes opérations dans le même ordre xles serveurs doivent tous recevoir (ou non) un message et ce dans le même ordre

21 Effets de la fiabilité et de l ’ordonnancement des messages zDécouverte de serveurs ou services dans un cadre de réseautage spontané yJini : les processus qui recherchent les services de découverte multicastent les requêtes à intervalle périodique pour un certain temps après leur mise en route ypas de conséquence si un message est perdu

22 Effets de la fiabilité et de l ’ordonnancement des messages zAmélioration de la performance grâce à la réplication des données yeffet de la perte de message ou de leur ordonnancement inconsistant dépend xde la méthode de duplication xet de l ’importance que les duplicatas soient totalement à jour yexemple xpas de conséquence dans le cas de la duplication des newsgroups

23 Effets de la fiabilité et de l ’ordonnancement des messages zPropagation de la notification d ’événements yJini : le service de publication utilise le IP multicasting pour informer les parties intéressées à intervalles fréquents de l ’arrivée de nouveaux services disponibles

24 Variation sur le multicast zMulticast fiable ytout message transmis est reçu par tous ou par personne zMulticast totalement ordonné ytous les messages transmis à un groupe rejoignent les membres dans le même ordre zvoir Chapitre 11 de Coulouris et al.

25 API Java pour IP multicast zpublic class MulticastSocket zextends DatagramSocketDatagramSocket


Télécharger ppt "Communication entre processus - UDP From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre."

Présentations similaires


Annonces Google