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

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

Apr 04, 2015

Download

Documents

Laure Salles
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Communication entre processus - UDP From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre.

Communication entre processus - UDP

From Coulouris, Dollimore and Kindberg

Distributed Systems: Concepts and DesignEdition 3, © Addison-Wesley 2001

Chapitre 4

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

Plan

Caractéristiques des protocoles de communication entre processus dans un système réparti

Principes généraux

communication par datagrammes

• Client-serveur• Communication de groupe

par flots (streams)• Client-serveur

construction de protocoles pour les patterns de communication client-serveur : requête-réponse groupe : même message est envoyé à plusieurs processus

données représentation des objets dans les messages références à des objets distants

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

Interface de programmation pour UDP

abstraction la plus simple pour la transmission de messages

permet au processus émetteur d ’envoyer un message au processus destinataire

les paquets indépendants sont appelés datagrammes

spécification de la destination via un socket socket : référence indirecte à un port spécifique du

processus destination sur son ordinateur hôte

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

Communication par datagrammes

Un datagramme transmis par UDP (User Datagram Protocol)

pas d ’accusé de réception pas de ré-émission le message peut ne pas arriver

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

Fonctionnement

Émetteur :processus client créer un socket lié à une adresse Internet et un port

quelconque libre pour recevoir la réponse

Récepteur : processus serveur créer un socket lié à une adresse Internet et un port

serveur prédéterminé connu des clients la méthode receive rend

l ’adresse Internet de l ’émetteur le numéro de port de l ’émetteur le message

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

Communication par datagrammesexemple 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();}}}

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

import java.net.*; import java.io.*;

//UDP client sends a message to the server and gets a replypublic class UDPClient{ public static void main(String args[]){

// args give message contents and server hostnameDatagramSocket 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 datagrammesexemple simple : le client

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

Contraintes liées à l ’usage de datagrammes Taille des messages

le récepteur doit spécifier un vecteur d ’octets d ’une taille déterminée pour recevoir le message le message peut être tronqué à l ’arrivée sous IP taille des paquets maximale 2**16 octets dans la plupart des environnements, max 8Kb, en général

Synchronicité Émission non-bloquante

send rend le contrôle dès que le message est transmis aux protocoles UDP et IP à 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é Réception bloquante

jusqu ’à l ’arrivée d ’un message à moins qu ’un timeout n ’existe sur le socket utilisation de threads distincts pour contrôler ce problème

Timeouts Serveur

attente infinie peut être acceptable autres applications

moins acceptable ou praticable fixer un timeout sur le socket

• la valeur doit être suffisamment élevée par rapport au temps de transmission des messages Émetteurs multiples

La méthode receive ne permet pas de spécifier une origine pour le message à lir rend l ’adresse Internet et le port de l ’émetteur

• le destinataire peut savoir d ’où provient le message possible 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

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

Modélisation des fautes

Communication fiable propriété d ’intégrité : un message ne doit pas être corrompu, ni dupliqué

utilisation de checksum pour la détection de messages corrompus : responsabilité de l ’application

Propriété de validité: tout message est éventuellement livré

des messages peuvent ne pas être livrés (faute par omission)• erreur de checksum ou tampon plein à la source ou la destination

Note: des messages peuvent aussi ne pas être livrés dans le bon ordre

On peut construire un système de communication fiable fondé sur les datagrammes : accusé de réception + checksums

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

Utilisation de UDP

Pour certaines applications, il est acceptable d ’utiliser un système où il peut survenir des fautes par omission

Exemple : DNS est implémenté à l ’aide de UDP

Avantage pas de overhead lié à la garantie de livraison, à savoir

le besoin d ’emmagasiner de l ’état de la communication à la source et à la destination

la transmission de messages supplémentaires le temps d ’attente (latency) chez l ’émetteur

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

java.net.DatagramPacket//sending data

public DatagramPacket(byte[] buf, int length, InetAddress address, int port)

//receiving data

public DatagramPacket(byte[] buf, int length)

//accessors

public InetAddress getAddress()

public int getPort()

public byte[] getData()

public int getLength()

API Java pour les datagrammes

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

API Java pour les datagrammes

java.net.DatagramSocketpublic DatagramSocket(int port)

public void send(DatagramPacket p) throws IOException

public void receive(DatagramPacket p) throws IOException

//If the timeout expires, a java.io.InterruptedIOException is raised,

public void setSoTimeout(int timeout) throws SocketException

//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)

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

Implémentation de la communication de groupe via UDP

IP multicast disponible seulement via UDP au niveau application

multicast sur un réseau local sur une zone Internet plus grande (multicast routers)

• ttl (time to live) – nombre de routers qu ’un datagramme peut traverser– valeur = 1 --> réseau local

un group multicast est spécifié par une adresse IP de classe D groupes permanents : 224.0.0.1 à 224.0.0.255 groupe temporaire : besoin d ’une adresse libre

l ’appartenance à un groupe est dynamique

on peut envoyer un datagramme à un groupe multicast sans en être membre

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

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();} } }

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

Communication par datagrammesBroadcasting : 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();

}

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

Communication par datagrammesBroadcasting : MulticastServer

package chapitre4;

public class MulticastServer

{

public static void main(String[] args)

throws java.io.IOException

{

new MulticastServerThread().start();

}

}

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

Communication par datagrammesBroadcasting : 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();}

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

Communication de groupe

Multicast envoi d ’un message par un processus à chaque membre d ’un groupe de

processus

infrastructure pour construire des systèmes répartis tels que tolérants aux fautes par réplication des services

multicast de la requête d ’un client à un groupe de serveurs

trouver des serveurs de découverte dans des systèmes avec réseautage spontané

améliorer la performance grâce à la réplication de données chaque fois que les données changent,

multicast aux processus qui gèrent les copies

propager des notifications d ’événements, Jini lorsque de nouveaux services de lookup annoncent leur existence

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

Modélisation des fautes

Identique à celle des diagrammes UDP faute par omission

si un routeur multicast tombe les clients dépendants de ce routeur ne

reçoivent plus les messages, même si les clients locaux peuvent les recevoir

ordre d ’arrivée n ’est pas garanti

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

Effets de la fiabilité et de l ’ordonnancement des messages

Tolérance aux fautes fondée sur la duplication de services

pour demeurer consistants entre eux, les serveurs ont le même état initial

et doivent réaliser les mêmes opérations dans le même ordre

les serveurs doivent tous recevoir (ou non) un message et ce dans le même ordre

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

Effets de la fiabilité et de l ’ordonnancement des messages

Découverte de serveurs ou services dans un cadre de réseautage spontané

Jini : 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

pas de conséquence si un message est perdu

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

Effets de la fiabilité et de l ’ordonnancement des messages

Amélioration de la performance grâce à la réplication des données

effet de la perte de message ou de leur ordonnancement inconsistant

dépend de la méthode de duplication et de l ’importance que les duplicatas soient totalement à jour

exemple pas de conséquence dans le cas de la duplication des

newsgroups

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

Effets de la fiabilité et de l ’ordonnancement des messages

Propagation de la notification d ’événements

Jini : 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

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

Variation sur le multicast

Multicast fiable tout message transmis est reçu par tous ou

par personne

Multicast totalement ordonné tous les messages transmis à un groupe

rejoignent les membres dans le même ordre

voir Chapitre 11 de Coulouris et al.

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

API Java pour IP multicast

public class MulticastSocket extends DatagramSocket