OS Réseaux et Programmation Système - C5



Documents pareils
Programmation client-serveur sockets - RPC

Modèle client-serveur Plan. Modèle client-serveur. Modèle client-serveur définition. Modèle client-serveur communication par messages.

Introduction au langage C

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Intergiciel - concepts de base

18 TCP Les protocoles de domaines d applications

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

TP Réseau n 4 Common Internet File System (CIFS) et Network File System (NFS)

RMI le langage Java XII-1 JMF

Remote Method Invocation Les classes implémentant Serializable

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Remote Method Invocation en Java (RMI)

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Plan du cours. Autres modèles pour les applications réparties Introduction. Mode de travail. Introduction

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Composants Logiciels. Le modèle de composant de CORBA. Plan

CORBA haute performance

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Le prototype de la fonction main()

UE Programmation Impérative Licence 2ème Année

Java Licence Professionnelle CISII,

Introduction à la Programmation Parallèle: MPI

Systèmes répartis. Fabrice Rossi Université Paris-IX Dauphine. Systèmes répartis p.1/49

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Remote Method Invocation (RMI)

1 Configuration réseau des PC de la salle TP

Mise en œuvre des serveurs d application

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Compression de Données - Algorithme de Huffman Document de Conception

Programmation système de commandes en C

IRL : Simulation distribuée pour les systèmes embarqués

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Exercice sur les Dockers

Cours Programmation Système

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

as Architecture des Systèmes d Information

3IS - Système d'exploitation linux - Programmation système

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Le modèle client-serveur

Dis papa, c est quoi un bus logiciel réparti?

Cours d initiation à la programmation en C++ Johann Cuenin

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Configuration automatique

Sécurité et Firewall

Une introduction à Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

CORBA. (Common Request Broker Architecture)

Derrière toi Une machine virtuelle!

Calcul Parallèle. Cours 5 - JAVA RMI

Java - RMI Remote Method Invocation. Java - RMI

Simulation d un système de paiement par carte bancaire

Arguments d un programme

Cours 6 : Tubes anonymes et nommés

Bases de programmation. Cours 5. Structurer les données

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation Réseau SSH et TLS (aka SSL)

NFP111 Systèmes et Applications Réparties

Lier Erlang avec d autres langages de programmation

Projet gestion d'objets dupliqués

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

1. Fonctionnement de l Internet 2. Protocoles applicatifs 3. Programmation réseau

TP1 : Initiation à Java et Eclipse

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Couche application. La couche application est la plus élevée du modèle de référence.

Programmation en Java IUT GEII (MC-II1) 1

Plan du cours. Historique du langage Nouveautés de Java 7

Le cadre des Web Services Partie 1 : Introduction

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Le langage C. Séance n 4

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Programmation répartie RPC & RMI

Systèmes de fichiers réseau

Gestion distribuée (par sockets) de banque en Java

Introduction à la programmation concurrente

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation système en C/C++

Cours d Algorithmique et de Langage C v 3.0

ACTIVITÉ DE PROGRAMMATION

Algorithmique, Structures de données et langage C

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Les processus légers : threads. Système L3, /31

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Protection des protocoles

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Programmation Objet Java Correction

Architecture des ordinateurs

Software Engineering and Middleware A Roadmap

Les structures. Chapitre 3

Programmation impérative

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Transcription:

OS Réseaux et Programmation Système - C5 Rabie Ben Atitallah rabie.benatitallah@univ-valenciennes.fr

RPC - XDR

Rappel

RPC: Remote Procedure Call Besoin d un environnement de haut niveau pour le développement d applications réparties qui : reprend le concept du client/serveur permet d identifier un très grand nombre de services (> #n de port) conserve les paradigmes habituels d exécution : l appel de fonction, passage de paramètres la notion de programme (ensemble de fonctions) RPC Système de distribution de services proposé par SUN au début des années 80 (utilisé pour le développement de NFS)

Procédures Distantes blah, blah, blah bar = foo(a,b); blah, blah, blah int foo(int x, int y ) { if (x>100) return(y-2); else if (x>10) return(y-x); else return(x+y); }

La sémantique de l appel Si on tient compte des erreurs (pertes, duplications) pouvant survenir lors des communications, on définit 3 sémantiques possibles pour l appel de procédures: exactement une fois au moins une fois au plus une fois. La sémantique choisie par l implémentation sous RPC- Sun est au moins une fois Il faut s assurer que l exécution d une procédure distante soit idempotent, par exemple en utilisant le numéro de transaction (xid) disponible dans chaque message RPC.

Les paramètres Un seul paramètre est échangé lors de l appel (RPC call) si l application requiert l échange de plusieurs paramètres ils doivent être regroupés au sein d une seule structure de données. Un seul élément peut être échangé lors du retour (RPC reply) à travers la valeur de retour de la fonction

Identification des procédures Une procédure distante est identifiée de manière unique par un triplet : #program, #prog_version, #procedure Un programme regroupe un ensemble de procédures et possède une version plusieurs versions peuvent être disponibles simultanément Certains numéros de programmes sont réservés à certains services : Réservé: 0x00000000 à 0x1FFFFFFFFF Public : 0x20000000 à 0x3FFFFFFFFF Semi-public : 0x40000000 à 0x5FFFFFFFFF Réservé : 0x60000000 à 0xFFFFFFFFFF

Fichier /etc/rpc L association entre service RPC et numéro de programme est décrit par le fichier/etc/rpc portmapper rstatd rusersd nfs ypserv mountd 100000 portmap sunrpc 100001 rstat rstat_svc rup perfmeter 100002 rusers 100003 nfsprog ypbind 100007 walld yppasswdd etherstatd rquotad sprayd 100004 ypprog 100005 mount showmount 100008 rwall shutdown 100009 yppasswd 100010 etherstat 100011 rquotaprog quota rquota 100012 spray

Commande rpcinfo Liste les programmes, versions et procédures disponibles sur une station : Macintosh-4:rpc rabie$ rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 536870913 1 udp 1021 536870913 1 tcp 1023

Le portmapper Le portmapper permet de rediriger un client vers le numéro de port hébergeant le service Le portmapper est sur un numéro de port réservé : 111 Les clients n ont besoin de connaître que ce seul numéro de port/service Le portmapper est lui-même un service RPC : description des procédures portmap en langage RPC description de la structure des messages portmap en langage XDR

Le portmapper pmap_set() = 1 ; enregistre un service pmap_getport() = 3 : retourne le numéro de port associé au service pmap_rmtcall() = 5 : appel d une procédure distante

XDR: external Data presentation Masque l hétérogénéité de représentation des données format standard, fonctions de transcodage Utilisation d un protocole de sérialisation indépendant du client et du serveur Le talon client sérialise en XDR les arguments, envoie la requête au serveur, récupère le résultat et le désérialise Le talon serveur désérialise les arguments, exécute le code demandé, sérialise en XDR le résultat et l envoie au client

XDR Process A Process A XDR Encode/Decode XDR Encode/Decode Transport Transport

Environnement Un environnement de plus haut niveau que les sockets et la transmission de messages. Architecture fonctionnelle sur Internet : TI-RPC = Transport independent RPC Implémentation des RPC qui permet le développement d applications indépendamment des éléments logiques et physiques (réseaux, protocoles, etc.) utilisés pour transmettre des données.

Langage XDR/RPC Langage XDR Langage de description de la structure des données échangées lors du RPC Défini par le rfc 1014. Syntaxe issue de celle employée pour la description des données dans le langage C Langage RPC Extension du Langage XDR, pour permettre la définition de procédure (programme)

Exemple de description de service Décrit en RPC language program PING_PROG { /*Latest and greatest version*/ version PING_VERS_PINGBACK { void PINGPROC_NULL(void) = 0; /* Ping the client, return the round-trip time in ms. Returns -1 if the operation timed out. int PINGPROC_PINGBACK(void) = 1; } = 2; /* Original version*/ version PING_VERS_ORIG { } = 1; } = 100115; void PINGPROC_NULL(void) = 0;

Programmation RPC Plusieurs niveaux de programmation : en utilisant une API restreinte (4 fonctions) en utilisant toute l API ( 20 fonctions), cela permet alors de choisir le protocole de transport faire de l authentification de client faire des appels de service asynchrones faire des appels de fonction diffusés (broadcastés) en utilisant le compilateur rpcgen et le langage RPCL

Exemple de fonctions Fonctions du niveau élevé getrpcport() : port associé à la version d un programme sur une machine donnée rusers() : les utilisateurs connectés sur une machine rnusers() : le nombre d utilisateurs connectés sur une machine rwall() : envoi un message à tous les utilisateurs d une machine Fonctions de bas niveau pour le serveur svcudp_create() : initialisation de la communication (création d une socket) svc_register() : enregistrement d un service, lui associe une fonction de traitement svc_getargs() : décodage des arguments de la procédure svc_getcaller() : origine de la requête svc_freeargs() : libération de l espace alloué par XDR

RPCGen Utilisation de la description des structures de données (XDR language) et de la définition des services (RPC language) pour générer automatiquement le code des appels aux fonctions de codage : rpcgen -a calcul.x Le fichier calcul.x contient la description des données et des procédures employées par le service

Exemple struct data { unsigned int arg1; unsigned int arg2; }; typedef struct data data; struct reponse { unsigned int somme; int errno;}; typedef struct reponse reponse; program CALCUL{ version VERSION_UN{ void CALCUL_NULL(void) = 0; } = 1; } = 0x20000001; reponse CALCUL_ADDITION(data) = 1;

RPCGen Input File rpcgen Client and server Stubs XDR filters header file Client and server skeleton

Exemple L'option -a permet de produire un squelette pour notre programme client (calcul_client.c) et un squelette pour la fonction distante (calcul_server.c). Avec ou sans cette option, les fichiers suivants sont également produits: calcul.h (entête), calcul_clnt.c (stub client), calcul_svc.c (stub serveur) et calcul_xdr.c (routines XDR). Le format XDR (external Data Representation) définit les types utilisés pour l'échange de variables entre le client et le serveur. les types que nous avons nous-mêmes définis nécessitent un filtre XDR, c'est le rôle des fonctions définies dans le fichier calcul_xdr.c gcc -c calcul_xdr.c Les stubs client et serveur sont complets et peuvent déjà être compilés gcc -c calcul_clnt.c gcc -c calcul_svc.c

Processus serveur #include "calcul.h void * calcul_null_1_svc(void *argp, struct svc_req *rqstp){ } } static char* result; /* insert server code here */ return((void*) &result); reponse * calcul_addition_1_svc(data *argp, struct svc_req *rqstp){ static reponse result; /* insert server code here */ return(&result);

Processus serveur reponse * calcul_addition_1_svc(data *argp, struct svc_req *rqstp){ static reponse result; unsigned int max; result.errno = 0; /* Pas d'erreur */ /* Prend le max */ max = argp->arg1 > argp->arg2? argp->arg1 : argp->arg2; /* On additionne */ result.somme = argp->arg1 + argp->arg2; /* Overflow? */ if ( result.somme < max ) { result.errno = 1; } return(&result);}

Processus serveur Nous pouvons alors le compiler en faisant: gcc -c calcul_server.c Puis pour obtenir le programme serveur complet, il faut lier calcul_svc.o, calcul_server.o et calcul_xdr.o ensemble: gcc -o server calcul_svc.o calcul_server.o calcul_xdr.o Macintosh-4:rpc rabie$ sudo./server & Macintosh-4:rpc rabie$ rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 536870913 1 udp 1021 536870913 1 tcp 1023

Processus client #include <limits.h> #include "calcul.h CLIENT *clnt; Void test_addition (uint param1, uint param2){ reponse *resultat; data parametre; /* 1. Preparer les arguments */ parametre.arg1 = param1; parametre.arg2 = param2; printf("appel de la fonction CALCUL_ADDITION avec les parametres: %u et %u \n", parametre.arg1,parametre.arg2); /* 2. Appel de la fonction distante */ resultat = calcul_addition_1 (&parametre, clnt); if (resultat == (reponse *) NULL) { clnt_perror (clnt, "call failed"); clnt_destroy (clnt); exit(exit_failure); } else if ( resultat->errno == 0 ) { printf("le resultat de l'addition est: %u \n \n",resultat->somme); } else { printf("la fonction distante ne peut faire l'addition a cause d'un overflow \n\n"); }}

Processus client Int main (int argc, char *argv[]) { } char *host; if (argc < 2) { printf ("usage: %s server_host\n", argv[0]); exit (1); } host = argv[1]; clnt = clnt_create (host, CALCUL, VERSION_UN, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } test_addition ( UINT_MAX - 15, 10 ); test_addition ( UINT_MAX, 10 ); clnt_destroy (clnt); exit(exit_success);

Exécution gcc -c calcul_client.c > gcc -o client calcul_client.o calcul_clnt.o calcul_xdr.o >./client localhost Appel de la fonction CALCUL_ADDITION avec les parametres: 4294967280 et 10 Le resultat de l'addition est: 4294967290 Appel de la fonction CALCUL_ADDITION avec les parametres: 4294967295 et 10 La fonction distante ne peut faire l'addition a cause d'un overflow >