communication par diffusion : multicast application clientn serveur application client1 application...

49
Communication par diffusion : Multicast application Client n Serveur application Client 1 application Client 2 Gr

Upload: chloe-chartier

Post on 03-Apr-2015

117 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Communication par diffusion : Multicast

application

Clientn

Serveur

application

Client1

application

Client2

Gr

Page 2: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Ouvrir un socket = demander à se Connecter

Les clients demandent seulement à joindre un groupe

Page 3: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple de multicast

Un serveur de citation qui envoie une citation toutes les minutes à tous les clients qui écoutent (multicast)

Page 4: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Créer un paquet de sortiePréparer et Envoyer une donnée

Scénario d’un serveur

Fermer le socket d ’entrée

Créer le socket d ’entrée

Page 5: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Scénario d’un client

Création d ’un paquet d ’entréeAttente de données en entréeRéception et traitement des données en entrée

Fermer le socket d ’entrée

Créer le socket d ’entrée

Page 6: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Classe MulticastServer

Des constructeurs : par défaut, port à utiliser

Des accesseurs en lecture : adresse du groupe (getInterface…)

Des méthodes : pour envoyer un paquet datagramme, pour joindre ou quitter un groupe (send, joinGroup, leaveGroup)

Page 7: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Multicast: MulticastSocket

Type de socket utilisé côté client pour écouter des paquets quele serveur « broadcast » à plusieurs clients. .

Une extension du QuoteServer : broadcast à intervalle régulier à tous ses clients

Le serveur a un nouveau nom et crée un MulticastServerThreadqui contient le cœur du serveur.

import java.io.*; public class MulticastServer { public static void main(String[] args) throws IOException { new MulticastServerThread().start(); } }

Page 8: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

public class MulticastServerThread extends QuoteServerThread { ... }

utilisation du constructeur par héritage et héritage de variables et de la méthode getNextQuote

Page 9: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Une nouvelle méthode RUN

public void run() { while (moreQuotes) { try { byte[] buf new byte[256]; // don't wait for request...just send a quote

String dString = null; if (in == null) dString = new Date().toString(); else dString = getNextQuote(); buf = dString.getBytes(); InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet; packet = new DatagramPacket(buf, buf.length, group, 4446); socket.send(packet);

try {sleep((long)Math.random() * FIVE_SECONDS); } catch (InterruptedException e) { } } catch (IOException e) { e.printStackTrace(); moreQuotes = false;} } socket.close();}

Page 10: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Différences principales

Le DatagramPacket est construit à partir de de « l’adresse de plusieurs clients »

L ’adresse et le no de port sont câblés

no de port 4446 (tout client doit avoir un MulticastSocket lié à ce no). L’adresse InetAddress "230.0.0.1" correspond à un identificateur de groupe et non à une adresse Internet de la machine d’un client

Le DatagramPacket est destiné à tous les clients qui écoutent le port 4446 et qui sont membres du groupe "230.0.0.1".

Page 11: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Un nouveau Client

Pour écouter le port 4446, le programme du client doit créer son MulticastSocket avec ce no. Pour être membre du groupe "230.0.0.1" le client adresse la méthode joinGroup du MulticastSocket avec l’adresse d’identification du groupe.

Le serveur utilise un DatagramSocket pour faire du broadcast à partirde données du client sur un MulticastSocket. Il aurait pu utiliser aussiun MulticastSocket. Le socket utilisé par le serveur pour envoyer leDatagramPacket n’est pas important. Ce qui est important pour lebroadcast est d’adresser l’information contenue dans le DatagramPacket, et le socket utilisé par le client pour l’écouter.

Page 12: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

MulticastSocket socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joinGroup(group);

DatagramPacket packet; for (int i = 0; i < 5; i++) { 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(group);

socket.close();

Page 13: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Synthèse

Client Serveur

TCP aSocket aServerSocketconnecté write read

read write

UDP aDatagramSocket aDatagramSocketnon connecté send receive

receive send

Multicast aMulticastSocket aDatagramSocket/aMulticastSocket

receive send

I/O Stream I/O Stream

aDatagramPacket

Page 14: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Définir un nouveau type de socket

Pourquoi ?Préparer les données avant de les envoyerPréparer les données reçues

ExempleJava RMI Sockets spécialisées (marshalling et unmarshalling)

Images : Compression et Décompression

Comment ?En spécialisant les classes de base

Page 15: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Comment Définir un nouveau type de Sockets

La classe CompressionSocket et ses classes relatives4 étapes

1. Etendre java.io.FilterOutputStream pour créer un output stream pour ce type de Socket. Surcharge de méthodes si nécessaire. 2. Etendre java.io.FilterInputStream 3. Etendre java.net.Socket . Implémenter les constructeurs appropriés et surchargergetInputStream, getOutputStream et close. 4. Etendre java.net.ServerSocket Implémenter le constructeur et surcharger acceptpour créer un socket du bon type.

Page 16: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Conclusion

Une large bibliothèque pour traiter les sockets et différents types de communication entre Clients et Serveurs dans Java

Une extension naturelle par abstraction à l’appel de méthodes à distance - Java RMI

et une normalisation Corba avec l’intégration d’un ORB

et maintenant les EJB : Entreprise Java Beanset JINI …..

Page 17: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Retour sur RMI

Page 18: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple

CLIENT Essifun SERVEUR de Surnoms

oter

infrastructure

Page 19: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Communication client serveur

CLIENT SERVEUR

Préparation de la requêteEnvoi de la requêteAttente du résultat….

Analyse du résultat reçu

Connexion au serveur Attente de requêtes

Analyse de la requête…..Exécution….Préparation de la réponseEnvoi de la réponse

Page 20: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple : annuaire des surnoms

EssiFun SERVEUR de Surnoms

enregistrer(« paul », »bug »)

marshalling

marshalling

unmarshalling

unmarshalling

0111000101000..

101..

enregistrer(« paul », »bug »)TRUE

TRUE

1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Seriablizable

Page 21: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Que peut on automatiser ?

Au minimum, la phase de marshalling/unmarshalling(hétérogéneité des langages, des systèmes, etc)

Selon les cas, le squelette du serveur les appels distants du client

Page 22: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple : annuaire des surnomset RMI

enregistrerlisteroter

AnnuaireEssi

listePersonnes

Enregistrer(AnneMarie,AM)lister()

Page 23: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple : annuaire des surnoms

• interface : partie visible de l’objet (enregistrer, oter, lister, …)

• implémentation : partie privée inaccessible depuis d’autres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….)

• interface = contrat entre l’objet et le monde extérieur (save impossible par exemple)

Page 24: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

RMI

public interface Surnoms extends java.rmi.Remote{public Boolean enregistrer(String nom, String surnom) throws

java.rmi.RemoteException, ServeurSurnoms.surnoms.ExisteDeja ;

…. }

Page 25: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Générateurs

RMIC / Orbix...

IDL Int. JavaSpécificationsdes données

Générateurs

Fichiersgénérés Stubs Skeletons Proxy

(mise en œuvre de la sérialisationet désérialisation…)

Page 26: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

RMI

Classes et Interfaces

ClasseLocale

Souche Squelette

ClasseDistante

InterfaceDistante

Remote

Appel méthode m() Appel méthode m()

Machine locale Machine distante

InterfaceDistante

Page 27: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Interaction Client Enregistreur

client serveur

client registreLookup : où est objetDistant ?

stub

Il est ici

Envoyez le stub

Le voicistub squelette

objetDistant

result = objetDistant.m()

result

RMIRegistry + ClassLoader

Page 28: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Exemple : annuaire des surnoms

XDR et RPC de SUN

Protocole := CHOICE { enregistrerReq [0] SEQUENCE{PrintableString nom,

PrintableString surnom} enregistrerRep[1] BOOLEAN, listerReq [2] NULL, listerRep [3] SET OF Personnes, ….}

Programme surnoms { version {

boolean enregistrer(nomSurnom) = 1; listePersonnes lister(void)=2 }= 1} = 10000

ASN.1 et norme ISO

Page 29: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Générateurs de Stubs

RPCGEN / MAVROS

ASN1 XDR

Librairie marshalling et unmarshalling

squelettes du client et du serveur

Spécificationsdes données

Générateurs

Types de donnéesC Lisp Java

Types de données

C

Fichiersgénérés

Page 30: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Les points communs des approches distribuées

Adressage : à tout serveur (objet ou programme)doit être affecté une référence unique

Transport : pour établir une communication entre 2 nœuds

et transmettre une requêteMarshalling :

transformation de la requête pour passer sur leréseau

Page 31: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

points communs

Protocol :transmission des requêtes entre exécutables

Dispatching :gestion des threads

Des services communsServices de nommageInterface repository.....

Page 32: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Reste à approfondir

Page 33: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Communication réseaux et Internet

Couches de transport

Différences entre UDP et TCP(Développement d’un serveur multicast Ack/NoAck pour gérer laperte des paquets UDP)

D’autres protocoles (RTP/RTCP)(introduction du routage multicast ou du tunelling)

principes du IP / protocole ICMP

Service de nommage

DNS Configuration services réseau, routage IP et DNS d’une machine

.....

Page 34: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Introduction au Réseaux Locaux LANs Configuration carte réseau d’une machine,Développement d’un analyseur de trafic

et standards IEEE 802 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)

Réseaux LocauxRseaux Locaux

Spécificités des Réseaux Locaux

Page 35: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802TD 6 : Configuration carte réseau d’une machine,Développement d’un analyseur de trafic

Réseaux Locaux cours 7 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)

Réseaux Locaux cours 8 : IEEE 802.3 et Ethernet

TP Evalué

Page 36: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

La communication réseaux et InternetInternet cours 1 : IPTD 1 : Introduction aux sockets BSD (et winsock sous windows) (NNN)

Internet cours 2 : TCP/UDPTD 2 : Développement d’un serveur multicast Ack/NoAck pour gérer laperte des paquets UDP (NNN)

Internet cours 3 : TCP/UDP (suite) et exemple d’autres protocoles (RTP/RTCP)TD 3 : Développement d’un serveur multicast Ack/NoAck (suite),introduction du routage multicast ou du tunelling (NNN)

Internet cours 4 : Routage IP / protocole ICMPTD 4 : Programmation du ping (messages ICMP) + export (JNI) en Java

Internet : cours 5 : DNSTD 5 : Configuration services réseau, routage IP et DNS d’une machine

Page 37: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Réseaux Locaux cours 6 : Introduction aux LANs et standards IEEE 802TD 6 : Configuration carte réseau d’une machine,Développement d’un analyseur de trafic

Réseaux Locaux cours 7 : IEEE 802.3 et EthernetTD 7 : Configuration d’un Firewall : IPTables,Développement d’un analyseur de trafic (suite) (101)

Réseaux Locaux cours 8 : IEEE 802.3 et Ethernet

TP Evalué

Page 38: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Conclusion

• Problèmes d’intégration et d’interopérabilité

entre le monde Microsoft et le reste

• Arrivée de internet – Effort d’interopérabilité et d’efficacité– RMI et Corba en Java

• Des nouveautés avec les composants– les Enterprise Java Beans – Corba Components– et aussi C# et net Affaire à suivre

Page 39: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Quelques interrogations ?

Comment choisir le bon middleware (intergiciel) ?Il y en a de plus en plus

Corba, RMI, DCOM, DSA + CCM, J2EE + Web Services, .net ....

Savoir les comparerIdentifier les points communsInteropérabilité : XML une solution suffisante ?

Page 40: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Des Critères de Comparaisons

Autour du concept objet ?Communication synchrone ou asynchrone ?Description via des interfaces ou des messages ?Communication directe ou indirecte ?Spécifique ou indépendant langage ?Possibilité de transformation de messages ou non ?Protocole de communication binaire ou textuelle ?Prise en compte de QoS ou non ?(transaction, sécurité ....)

Page 41: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Comment faire interopérer les middlewares ?

Aller vers un middleware standard ? (J2EE / Corba)

Construire une couche au dessus des middlewares ? des familles de middlewares, des middlewaresgénériques (Jonathan, PolyOrb, ...)Avoir une approche architecturale ?

des design patternsFaire interopérer des middlewares existants?

M2M

Page 42: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

L’avenir ?

Après les approches par composants,des middlewares au dessus de JMS

Une réflexion de plus haut niveau poursortir les schémas communsextérioriser quand et comment on les utilise

ne pas confondre les problèmes avec XML

Page 43: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Les points communs des middlewares en objets distribués

Adressage : à tout objet doit être affecté une référence unique

Transport : pour établir une communication entre 2 nœuds

et transmettre une requêteMarshalling :

transformation de la requête pour passer sur leréseauProtocol :

transmission des requêtes entre exécutables

Page 44: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Les points communs des middlewares en objets distribués

Activation :activer les implémentations des objets

Dispatching :gestion des threads

Des services communsServices de nommageInterface repository.....

Page 45: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Un bref comparatif

Origine Microsoft OMG JavaSoft

Archi COMDCOM

IDL ORBIIOP

Java RMIApplet

Interfaces IUNKnownprédéfinies

Définies enIDL

Définies enJava

Page 46: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Un bref comparatif

Interface+ Agrégationcomposition

Héritage Héritageextends

Langage C++ C C++Smalltalk

Java

Infrastr. Proxystub

Stubskeleton

ProxyR O

Page 47: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Un bref comparatif

Serveur AppliDLL

AppliBiblioBDD

Appli Java

Client AppliDLL

AppliBiblioBDD

Appli JavaApplets

Création IFactory Instanciéen LOO

InstanciéEn Java

Page 48: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Un bref comparatif

Appeldyn.

IDispatch DII Introsp.beans

Ident. Reg. OLE Service denommage

URL

Comm. DCOMDCE

IIOP RMI(TCP/IP)

Page 49: Communication par diffusion : Multicast application Clientn Serveur application Client1 application Client2 Gr

Conclusion

• Problèmes d’intégration et d’interopérabilité

entre le monde Microsoft et le reste

• Arrivée de internet – Effort d’interopérabilité et d’efficacité– RMI et Corba en Java

• Des nouveautés avec les composants– les Enterprise Java Beans – Corba Components– et aussi C# et net Affaire à suivre