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

1 Chapitre 2 Mode Message Asynchrone (interface Socket)

Présentations similaires


Présentation au sujet: "1 Chapitre 2 Mode Message Asynchrone (interface Socket)"— Transcription de la présentation:

1 1 Chapitre 2 Mode Message Asynchrone (interface Socket)

2 2 Mode Message Asynchrone Basé directement sur le mode de communication par message. Un service comprenant essentiellement deux primitives pour communiquer et se synchroniser. TYPE COM_MESSAGE_ASYNCHRONE; METHOD envoyer (id_émetteur, id_récepteur, message, compléments); METHOD recevoir (id_émetteur, id_récepteur, message); METHOD...; END COM_MESSAGE_ASYNCHRONE. identificateurs : ports de communication messages : zones de données (typées). compléments : selon les sémantiques multiples définissant les qualités de services

3 3 Mode Message Asynchrone Aspect principal pour la communication et la synchronisation l'asynchronisme entre l'émetteur et le récepteur Sémantique de l'activation a)De type activation en parallèle ("fork") b) Interprétable également comme un branchement inconditionnel ("goto"). - Le mode message asynchrone réalise un "producteur-consommateur" réparti entre un émetteur et un récepteur. - Complet parallélisme autorisé entre l'émetteur et le récepteur. Rien n'empêche aussi l'une des entités ('émetteur) de suspendre son exécution.

4 4 Mode Message Asynchrone Aspect d'échange de données Le mode message permet une opération d'affectation de variable à distance: envoyer (M=écrire(v), id_dest) recevoir (M'=lire(v), id-emet). Avec possibilité de gestion de cohérence des types des variables v.. Avec une sémantique de consistance des données entre l'émetteur et le récepteur très faible. Propriété minimale de cohérence des communications point à point: la causalité envoyer (M=écrire) -> recevoir (M'=lire) Si a t1 : émetteur.écrire (v,t1) => il existe t2>t1 : recepteur.lire (v, t2)

5 5 Mode Message Asynchrone Interaction entre processus par échange de message Comportement séquentiel des processus: => Ensemble de processus (entités réseaux) séquentiels communicants (très souvent en mode point à point deux entités seulement). => Les méthodes de spécification de chaque processus utilisent des automates d'état fini Interaction entre processus par échange de message => Les processus communicants se synchronisent par messages asynchrones.

6 6 Mode Message Asynchrone Représentation graphique des applications: automates États : Il est défini par un ensemble significatif de variables locales de chaque processus. Transitions : Elles comportent deux mentions: les conditions, et les actions. –Condition : condition booléenne portant sur les variables locales. condition booléenne portant sur les échanges (requête de service, message entrant). condition booléenne portant sur les signaux internes (horloge). –Action : C'est l'opération réalisée lors du franchissement de la transition.

7 7 Mode Message Asynchrone Représentation des opérations sur les diagrammes (conditions et actions) condition recevoir(M) ?M action envoyer(M) !M Exemple : P1 :P2!M1 P2 :P1?M1 Avec Type[message_émis] = Type [message_reçu]

8 8 Mode Message Asynchrone Exemples

9 9 Mode Message Asynchrone Automate du service Établissement de la liste des unités de service (primitives, SDU) de service échangeables entre le niveau n et le niveau n+1 Définition des enchaînements autorisés de primitives sous la forme d'un automate d'état. => Toutes les successions légales qu'un observateur de l'interface n n+1 peut observer.

10 10 Mode Message Asynchrone Exemple de comportements autorisés du service de connexion de session OSI.

11 11 Mode Message Asynchrone Automate du protocole Établissement de la liste des unités de protocole (messages, PDU) échangés entre deux niveaux n. Définition de tous les enchaînements de PDU qu'un observateur de la voie de communication peut observer).

12 12 Mode Message Asynchrone Une partie du protocole d'ouverture de connexion de session

13 13 Mode Message Asynchrone Automate complet

14 14 Mode Message Asynchrone Problèmes de constructions Réceptions non spécifiées –Dans un état un message peut se présenter dont le cas n'a pas été prévu Interblocages –Dans un état un message (ou une configuration) est attendu qui ne peut jamais se présenter. Définition d'assertions de bon fonctionnement sur le modèle à automates communicants. –assertions portant sur des variables d'état (booléennes) –assertions portant sur des trajectoires (logique temporelle)

15 15 Mode Message Asynchrone Les interfaces de "transport" Existence d'interfaces logicielles pour l'accès à des piles de protocoles : API utilisable de préférence pour plusieurs piles Sockets, TLI, etBEUI…. Sockets: Interface de programmation pour la suite TCP/IP Système UNIX Berkeley. Le standard UNIX de facto. L'API sockets sous Windows est baptisée WinSock

16 16 Mode Message Asynchrone Conclusion C'est le mode le plus basique Comparable à l'assembleur (affectation, branchement). Le moins contraignant il permet aux utilisateurs par des échanges successifs, la construction de tout type de protocole. L'utilisateur n'a pas en général envie d'être obligé de construire ses propres outils d'où: L'enrichissement du mode message en termes de qualité de service par les couches successives des protocoles réseau. Le besoin d'autres schémas prédéfinis plus complexes. Le mode message asynchrone est encore le mode privilégié des interfaces On peut prévoir à terme son "enfouissement" dans les couches internes.

17 17 L'interface SOCKET Introduction Une "socket" est un point d'accès de service pour des couches transport essentiellement TCP/UDP La caractéristique principale d'une socket est donc son type. Une socket possède un nom: un identifiant unique sur chaque site (en fait un entier sur 16 bits) appelé "numéro de port". Un socket = (Numéro de port, Adresse IP). Une socket est caractérisée par un ensemble de primitives de service pour l'accès aux fonctions de transport. Une socket encapsule des données: –un descriptif (pour sa désignation et sa gestion) –des files d'attente de messages en entrée et en sortie.

18 18 representation de socket

19 19 L'interface SOCKET Choix de conception des sockets TCP –TCP est un transport fiable en connexion et en mode bidirectionnel point à point. –Une socket TCP peut être utilisée par plusieurs connexions TCP simultanément. –Une connexion est identifiée par le couple d'adresses socket des deux extrémités. UDP –Un échange UDP est sans connexion (échange de datagrammes). –Les zones de données qui correspondent à des envois successifs sont respectées à la réception.

20 20 L'interface SOCKET Les primitives de l'interface socket: socket() Permet la création d'un nouveau point d'accès de service transport. int socket ( int famille, int type, int protocole); Trois paramètres d'appel –"Famille" d'adresses réseaux utilisées locale, réseau IP, réseau OSI... AF_UNIX : Communication locale (i-node) AF_INET : Communication Internet AF_ISO : Communication ISO –Type de la socket (du service) sémantique de la communication. SOCK_STREAM : Flot d'octets en mode connecté (ne préserve pas les limites de l'enregistrement) SOCK_DGRAM : Datagramme en mode non connecté (préserve les limites de l'enregistrement) –Protocole de transport utilisé. IPPROTO_TCP SOCK_STREAM IPPROTO_UDP SOCK_DGRAM Un paramètre résultat: le numéro de descripteur socket.

21 21 L'interface SOCKET Les primitives de l'interface socket: bind() Primitive pour l'attribution d'une adresse de socket à un descripteur de socket. int bind (int s, struct sockaddr_in *mon_adresse, int longueur_mon_adresse) Trois paramètres d'appel –Numéro du descriptif de Socket (s). –Structure de donnée adresse de socket. Pour internet struct in_addr { u_long s_addr ; } ; s_addr : 32 bits constituants lidentificateur du réseau et de la machine hôte ordonnes selon lordre réseau. struct sockaddr_in { short sin_family ; u_short sin_port ; struct in_addr sin_addr ; char sin_zero[8] ; } ; sin_family : AF_INET ; sin_port : 16 bits de numero de port ( ordonnancement réseau); sin_addr : 32 bits constituants lidentificateur du reseau et de la machine hôte ordonnes selon lordre réseau. sin_zero[8] : inutilisés ; –Longueur de la structure d'adresse.

22 22 L'interface SOCKET Les primitives de l'interface socket: listen() Utilisé dans le mode connecté lorsque plusieurs clients sont susceptibles d'établir plusieurs connexions avec un serveur. int listen(int s, int max_connexion) s : Référence du descripteur de socket max_connexion : Nombre maximum de connexions.

23 23 L'interface SOCKET Les primitives de l'interface socket: accept() Dans le mode connecté la primitive accept permet de se bloquer en attente d'une nouvelle demande de connexion. Après l'accept, la connexion est complète entre les deux processus. int accept (int s, struct sockaddr_in *addr_cl, int lg_addr_cl) retourne ns. –s : Référence du socket qui est en ecoute. –addr_cl : L'adresse du client. –lg_addr_cl: La longueur de l'adresse. –Lappel retourne un descripteur dune nouvelle socket ns. Pour chaque nouvelle connexion entrante la primitive fournit un pointeur sur une nouvelle socket qui est du même modèle que la socket précédemment créée.

24 24 L'interface SOCKET Les primitives de l'interface socket: connect() La primitive connect (bloquante) permet à un client de demander l'ouverture (active) de connexion à un serveur. L'adresse du serveur doit être fournie. int connect (int s, struct sockaddr_in *addr_serv, int lg_addr_serv) –s : La référence de la socket –addr_serv : L'adresse du serveur. –lg_addr_serv : La longueur de l'adresse.

25 25 L'interface SOCKET Les primitives de l'interface socket: send(), recv() Les primitives send, recv (bloquantes) permettent l'échange effectif des données. int send (int s, char *zone, int lg_zone,int options_com) int recv (int s,char *zone, int lg_zone,int options_com) –s : La référence de la socket –zone : La zone à échanger. –lg_zone : La longueur de la zone. –options_com : Les options (données urgentes,....)

26 26 L'interface SOCKET Les primitives de l'interface socket: sendto(), recvfrom() Les primitives sendto, recvfrom permettent l'échange des données plutôt dans le mode non connecté UDP. int sendto ( int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_dest, int lg_addr) int recvfrom ( int s, char *zone, int lg_zone, int options_com, struct sockaddr_in *addr_emet, int lg_addr) –addr_dest : L'adresse du destinataire. –addr_emet : L'adresse de l'émetteur. –lg_addr : La longueur de l'adresse.

27 27 L'interface SOCKET Les primitives de l'interface socket: shutdown(), close() Shutdown; Permet la purge des données en instance sur une socket avant la fermeture. shutdown(s, h); –h = 0 lusager ne veut plus recevoir de données –h = 1 lusager ne veut plus envoyer de données –h = 2 lusager ne veut plus ni recevoir, ni envoyer. Close; Permet la fermeture d'une connexion et la destruction du descriptif. int close ( int s )

28 28 L'interface SOCKET résumé Fonctionnement en TCP –Serveur. socket bind listen accept recv, send close –Client. socket connect recv, send close Fonctionnement en UDP –Socket –Bind –recvfrom, sendto –close

29 29 L'interface SOCKET exemple, TCP Série Parallèle Serveur en mode connecte

30 30 L'interface SOCKET exemple, UDP série Parallèle Serveur en mode doconnecte

31 31 Linterface Socket exemple de serveur itératif int sockfd, newsockfd ; if ( ( sockfd = socket (.....)) < 0 ) err_sys(«erreur de socket«) ; if ( bind ( sockfd,....) < 0 )err_sys («erreur de bind»); if ( listen ( sockfd, 5) < 0 ) ;err_sys (« erreur de listen» ) ; for ( ; ; ) { newsockfd = accept ( sockfd,.....) ; if ( newsockfd < 0) err_sys( «erreur de accept») ; execute_la_demande( newsockfd ) ; close ( newsockfd ) ; }

32 32 Linterface Socket exemple de serveur parallèle int sockfd, newsockfd ; if ( ( sockfd = socket (.....)) < 0 ) err_sys(«erreur de socket«) ; if ( bind ( sockfd,....) < 0 ) err_sys («erreur de bind»); if ( listen ( sockfd, 5) < 0 ) ;err_sys (« erreur de listen» ) ; for ( ; ; ) { newsockfd = accept ( sockfd,.....) ; if ( newsockfd < 0) err_sys( «erreur de accept») ; if ( fork() == 0 ) { close ( sockfd ) ; execute_la_demande( newsockfd ) ; exit (1) ; } close ( newsockfd ) ; }

33 33 Linterface Socket gestion de noms Les primitives gethostname et sethostname –Dans le monde UNIX, la primitive gethostname permet aux processus utilisateurs daccéder au nom de la machine locale. –Dautre part, la primitive sethostname permet à des processus privilégiés de définir le nom de la machine locale. La primitive getpeername –Cette primitive est utilisée afin de connaître le point de terminaison du distant. –Habituellement, un client connaît le point de terminaison (couple port/adresse IP) puisquil se connecte à ce serveur distant; cependant, un serveur qui utilise la primitive accept pour obtenir une connexion, a la possibilité dinterroger le socket afin de déterminer ladresse du distant. La primitive getsockname –Cette primitive rend le nom associé au socket qui est spécifié en paramètre.

34 34 Linterface Socket gestion de noms Lorsque ces fonctions sont exécutées sur des machines ayant accès à un serveur de noms de domaines, elles fonctionnent elles-mêmes en mode client/serveur en émettant une requête vers le serveur de nom de domaines et attendent la réponse. Lorsquelles sont utilisées sur des machines qui nont pas accès à un serveur de noms, elles obtiennent les informations à partir dune base de données ( simple fichier) locale. gethostbyname spécifie un nom de domaine et retourne un pointeur vers une structure hostent qui contient les informations propres à ce nom de domaine. gethostbyaddr permet dobtenir les mêmes informations à partir de ladresse spécifiée. getnetbyname spécifie un nom de réseau et retourne une structure netent renseignant les caractéristiques du réseau. getnetbyaddr spécifie une adresse réseau et renseigne la structure netent

35 35 Linterface Socket fonctions de service Les fonctions getprotobyname et getprotobynumber –Dans la base de données des protocoles disponibles sur la machine, chaque protocole a un nom officiel, des alias officiels et un numéro de protocole officiel. –La fonction getprotobyname permet dobtenir des informations sur un protocole donné en spécifiant son nom; renseigne la structure protoent. –La fonction getprotobynumber permet dobtenir les mêmes informations en spécifiant le numéro de protocole. La fonction getservbyname –Certains numéros de ports sont réservés pour les services sexécutant au-dessus des protocoles TCP et UDP. –getservbyname retourne les informations relatives à un service donné en spécifiant le numéro du port et le protocole utilisé; renseigne la structure servent.

36 36 Linterface Socket Byte ordering TCP/IP spécifie une représentation normalisée pour les entiers utilisés dans les protocoles. Cette représentation, appelée network byte order, représente les entiers avec le MSB en premier. Une application doit renseigner certaines informations du protocole et par conséquent, doit respecter le network informations byte order; Exemple le numéro de port. Pour que les applications fonctionnent correctement, elles doivent translater la représentation des données de la machine locale vers le network byte order : –htonl : host to network long : convertit une valeur sur 32 bits de la représentation machine vers la représentation réseau. –htons : host to network short : convertit une valeur sur 16 bits de la représentation machine vers la représentation réseau. – ntohl : network to host long : convertit une valeur sur 32 bits de la représentation réseau vers la représentation machine. –ntohs : network to host short : convertit une valeur sur 16 bits de la représentation réseau vers la représentation machine.

37 37 Sockets en JAVA Les classes java.net.Socket et java.net.ServerSocket sont les deux classes de base pour l'implantation des sockets TCP/IP sous JAVA. 7 opérations élémentaires sont assurées par un Socket : –connexion à une machine distante (Socket), –envoi de données (Socket), –réception de données (Socket), –fermeture d'une connexion (Socket), –attachement à un port (ServerSocket), –attente de demande de connexion émanant de machines distantes (ServerSocket), –acceptation de demandes de connexion sur le port local (ServerSocket). La Socket est créée sur le client. Le ServerSocket fonctionne sur le serveur en attente de connexion (méthode accept()) ; La nouvelle Socket tente de se connecter sur le serveur distant. Après détection d'ouverture de connexion, le ServerSocket génère une Socket pour communiquer avec le client. Une fois la connexion établie, les systèmes locaux et distant établissent un canal de communication par flux à partir de leurs Sockets de manière à échanger des données. Lorsque les échanges sont terminés, l'un des interlocuteurs clôt la communication.

38 38 Le client public Socket(String host, int port) throws UnknownHostException,IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException –Toutes ces fonctions génèrent une IOException en cas de problème à l'exécution. host (String) : nom de la machine vers laquelle la socket est créée. addresse (InetAddress) : adresse IP de la machine vers laquelle la socket est créée. port (int) : numéro du port sur lequel la socket est créée. localAddr (InetAddress) : adresse IP locale auquelle la socket est associée. localPort (int) : numéro du port local auquel la socket est associée.

39 39 Quelques fonctions utiles Les fonctions qui sont asociee au socket public void close() throws IOException : ferme la socket public inputStream getInputStream() throws IOException : retourne le flux d'entrée associé à la socket public outputStream getOutputStream() throws IOException : retourne le flux de sortie associé à la socket

40 40 Le serveur ServerSocket permet l'instanciation de variables implantant des écouteurs de ports TCP/IP pour la détection de requêtes d'ouverture de Socket (sur les serveurs). Cette classe ouvre une socket sur le client correspondant. Constructeur : –public ServerSocket(int port) throws IOException –Toutes ces fonctions génèrent une IOException en cas de problème à l'exécution. –port (int) : numéro du port sur lequel le ServerSocket est créé et mis en attente. Quelques fonctions utiles: –public void close() throws IOException : ferme le ServerSocket –public Socket accept() throws IOException : place le ServerSocket en attente de requête d'ouverture de sockette. Cette attente est bloquante. Une sockette est automatiquement générée et retournée lors de cette requête.

41 41 Le IO Stream : Objet JAVA possédant la caractéristique de pouvoir envoyer ou recevoir des données Java.io est le package dédié à la gestion des entrées/sorties. Il intègre des classes de gestion de fichier au sens classique du terme. Outre ces classes, le package java.io possède un nombre important de classes dédiées à la gestion des flux de données. Les classes de base de java.io sont : –InputStream pour gérer des données en entrée (lecture), –OutputStream pour gérer des données en sortie (écriture). –Ces deux classes abstraites ne sont pas utilisées directement mais plutôt comme intermédiaires vers des sous-classes correspondant mieux à la finalité désirée. Ces autres classes de gestion de flux de java.io ont pour but de réaliser le formatage automatique des données (type de valeur, manière avec laquelle les données sont transmises,...) vers le type le plus adapté à l'application souhaitée.

42 42 exemple Socket s ; String hote = "raphaello.univ-fcomte.fr" ; int port = 5555 ; try { s = new Socket(hote,port) ; OutputStream os = s.getOutputStream() ; DataOutputStream dos = new DataOutputStream(os) ;... dos.close() ;} catch ( UnknownHostException e) { } ; catch ( IOException e) { } ;

43 43 Le Stream Exemples de sous-classes de InputStream et OutputStream –BufferedReader : Lecture de texte depuis un flux d'entrée caractère -> caractères, tableaux et chaînes de caractères. –BufferedWriter : Ecriture de texte dans un flux de sortie caractère -> caractères, tableaux et chaînes de caractères. –DataInputStream : Lecture de données Java primitives. –DataOutputStream : Ecriture de données Java primitives. –FileInputStream : Lecture d'octets depuis un fichier. –FileOutputStream : Ecriture d'octets dans un fichier. –ObjectInputStream : Lecture d'objets Java par desérialisation. –ObjectOutputStream : Ecriture d'objets Java par sérialisation.

44 44 Les Threads Thread : Objet JAVA possédant la caractéristique de pouvoir s'exécuter en parallèle au programme qui lui a donné naissance (processus léger) Caractéristiques : –Gestion par le système de l'attribution des temps de calcul aux Threads en cours d'exécution –Partage de la même zone mémoire que le programme de naissance -> mémoire partagée –Ecriture d'une classe thread : Extension de la classe java.lang.Thread Surcharge de la méthode public void run() avec une fonction implantant l'équivalent de la fonction main pour un programme classique Emploi d'une instance de classe thread : Instanciation d'une variable de la classe étendant Thread Exécution de la méthode start héritée de Thread Emploi de threads -> problème de synchronisation lors de l'accès de deux ou plusieurs threads à la même zone de mémoire partagée

45 45 Exemple public class MyThread extends Thread { private boolean ok = true ; public void run() { while ( ok ) {... } } public void arret() { ok = false ; } }... MyThread th = new Thread() ; th.start() ;... th.arret() ;...

46 46 Les problèmes de synchronisation Emploi de threads -> problème de synchronisation lors de l'accès de deux ou plusieurs threads à la même zone de mémoire partagée Utilisation de la directive synchronized pour créer des blocs d'instructions ne pouvant être interrompus Synchronisation sur deux types d'éléments de code : Exemple : public synchronized void set(int xx,int yy){ cx = xx ; cy = yy ; } Lorsqu'un code exécuté dans un Thread essaie de lancer une fonction synchronisée d'un objet, il est bloqué tant que cet objet n'est pas relaché (si celui-ci est utilisé par ailleurs).

47 47 Exemple de sockets java


Télécharger ppt "1 Chapitre 2 Mode Message Asynchrone (interface Socket)"

Présentations similaires


Annonces Google