You are on page 1of 12

Les RPCs

Numro de session 1 2 3 4 5 6 Intitul de la session Gnralits Le modle client-serveur Le programme distant XDR Les Talons Interface - de haut niveau - de bas niveau - RPCGEN

1
1.1

Session 1 : Gnralits
Dfinition :

Les RPC (Remote Procedure Call) forment un ensemble d'outils de programmation permettant une utilisation plus simple et plus puissante du modle client-serveur que les sockets et TLI. Ils furent dvelopps par SUN pour NFS. Ils permettent de distribuer facilement certaines parties d'une application sur des machines diffrentes. 1.2 Principe :

L'appel de procdure distance est un modle d'application rseau de haut niveau. Les RPC permettent d'assimiler les requtes d'un client des appels de procdure. Quand un appel de procdure distante est effectu, les paramtres de l'appel sont passs la procdure distante, l'appelant (le client) attend la rponse qui est renvoye par la procdure appele.

Une interface : L'utilisation des RPC permet au programmeur d'une application distribue de ne pas se proccuper des dtails de l'interface avec le rseau. L'indpendance des RPC, vis vis du transport, spare compltement l'application des lments logiques et physiques de la communication des donnes. Il sagit ainsi dune interface entre les programmes dapplication et les protocoles de communication de plus haut niveau que les sockets.

Une abstraction : Rendre transparent le fait quune procdure sexcute sur un site distant et dans un environnement ventuellement diffrent : masquer au programmeur les aspects de communication et les diffrences de reprsentation de linformation.

Des primitives : - attribuer aux processus un rle de client ou de serveur. - changer des messages protocolaires en rendant transparent les services de communication rseau. - coder/dcoder les informations changes- manipuler des informations de communication - contrler et paramtrer les sockets

Caractristiques gnrales des RPCs

2
2.1

Session 2 : Le modle client-serveur


Mise en uvre du modle :

Requte : elle est envoye du client vers le serveur, il sagit de lappel de la procdure distante. Les paramtres dexcution sont communiqus au serveur. Rponse : elle est envoye par le serveur, cest le retour de lappel de la procdure distante. Les rsultats sont communiqus au client. Synchronisation : le mode dinteraction est synchrone, c'est--dire que le client attend le retour de lappel avant de pouvoir excuter linstruction suivante. Illustration :

Le modle

Diffrences entre appels locaux et distants :


Les temps dacheminement des informations changes peuvent augmenter les temps dexcution. Pas darguments de type pointeur. Les descripteurs des fichiers dE/S ne sont pas accessibles aux procdures distantes. Possibilits de dfaillances (client, serveur).

Problmes de scurit (authentification, confidentialit). Aide de XDR pour la reprsentation commune des donnes.

Aprs quelques remarques gnrales ncessaires la comprhension de la programmation des RPC, nous dtaillerons, dans les chapitres suivants, l'utilisation des RPC. Il est possible d'utiliser le mcanisme d'appel de procdure distante de diffrentes faons qui fournissent diffrents degrs de facilit pour le programmeur. De plus, nous verrons l'utilisation de l'utilitaire rpcgen qui simplifie la programmation des RPC par la gnration automatique des portions de code spcifiques aux RPC d'une application client/serveur.

3
3.1

Session 3 : Le Programme distant


Concept de programme distant

Cest une unit sexcutant sur une machine distante ( serveur). Un programme distant est un ensemble de procdures et de donnes propres.

Concept de programme distant

3.2

Gestion des versions

Ds quune procdure est ajoute, modifie (paramtre), ou supprime, une nouvelle version du programme distant est cre.

3.3

Identification RPC

Chaque procdure RPC est identifie de manire unique par un triplet : un numro de programme, un numro de version et un numro de procdure. Le numro de programme identifie un ensemble de procdures distantes en relation entre elles, chacune ayant un numro de procdure diffrent. Ce numro est un entier unique cod sur 32 bits. Chaque programme a aussi un numro de version, ce qui permet de garder le mme numro de programme en cas de changements dans le service rendu. Des changements dans le programme (ajout de nouvelles procdures, changements dans les paramtres ou les valeurs de retour des procdures...) ncessitent un nouveau numro de version. Les procdures dun programme distant sont identifies squentiellement par les entiers 1, 2, Pour rcapituler, toute procdure distante est identifie laide dun triplet : (n programme, n version, n procdure) ce qui permet au client appelant de possder un moyen didentification simple et prcis.

3.4

Localisation RPC

Lidentification dune procdure ne sous-entend pas sa localisation, conformment au monde TCP/IP, le processus serveur doit tre localis grce au doublet (@sse IP, numro de port), mais la correspondance biunivoque n programme / numro de port est impossible raliser de manire directe.

La solution consiste en lintervention dun intermdiaire qui enregistre dynamiquement la correspondance entre programme distant et numro de port et la fait connatre au client lors dune invocation : cest la notion de port mapper.

3.5

Le port mapper : principe

Ceci est ralis par la primitive rpcbind (sous Unix) pour permettre un client de connatre l'adresse d'une procdure. Comme rpcbind doit tre atteint par le client, il doit se trouver sur un port bien connu (wellknownn port = port mapper) pour les principaux transports (TPC, UDP). C'est le seul service RPC qui doit avoir une adresse connue. Pour trouver l'adresse d'un service, un client envoie un message au dmon rpcbind sur la machine du serveur. Celui-ci lui renvoie l'adresse si le programme est enregistr. Mais rpcbind permet aussi un client de faire l'appel d'une procdure sans connatre l'adresse de celle-ci. Le client envoie directement les numros identifiant la procdure et les paramtres de celle-ci rpcbind qui fera l'appel lui-mme. Il renverra le rsultat au client en y incluant l'adresse de la procdure pour un usage ultrieur.

4
4.1

Session 4 : XDR.
Rle de XDR.

XDR (eXternal Data Representation) est un protocole permettant de dfinir une reprsentation standard des donnes changes entre machines client(s) et serveur. Lors d'changes de donnes entre diffrentes machines, se pose le problme de la non unicit de la reprsentation interne des donnes. Le protocole XDR (couche prsentation) permet de dfinir une reprsentation standard des donnes changeables entre machines.

4.2

LAPI XDR.

Cest une bibliothque de fonctions de conversion XDR (interoprabilit). Le type XDR est un flot (dfini dans xdr.h), il contient toutes les informations ncessaires sa gestion: - nature (codage ou dcodage). - dernire opration effectue.... Le principe de codage et dcodage (on parle aussi de srialisation et dsrialisation ) est d'ajouter ou d'extraire des informations dans un flot en les codant ou les dcodant. A chaque type correspond une fonction qui ralise cela suivant la nature du flot. Pour les types de base, ces fonctions sont dj implantes: xdr_void(), xdr_char(), xdr_int(), xdr_short(), xdr_float(), xdr_string(). Toutes ces fonctions ont donc une convention sur leur nom: xdr_NomduType. Lorsqu'il est ncessaire d'crire des fonctions similaires pour des types particuliers, il est donc fortement recommand de garder cette convention. Exemples : Fonction permettant sa gestion (cration, dcodage/dcodage, taille) XDR *xdrs; /*Emetteur*/ CharFlot_out[TAILLE_FLOT]; xdr_mem_create(xdrs, Flot_out, TAILLE_FLOT, XDR_ENCODE);

Srialisation : ajouter des donnes en les codant dans le flot. int i = 260; xdr_int(xdrs,&i);

Dsrialisation : opration inverse extraction et dcodage. XDR *xdrs; /* Rcepteur */ ... xdr_mem_create(xdrs, Flot_out, TAILLE_FLOT, XDR_DECODE); xdr_int(xdrs,&j);

Session 5 : Les talons.

La notion de distance dans les RPCs implique ladjonction de code entre lappel de la procdure et la procdure appele. Ct client : ce code doit : encoder les arguments (xdr). crer un message de type RPC CALL. mettre ce message vers le programme distant. attendre les rsultats, puis les dcoder vers la reprsentation interne de la machine. Ct serveur : ce code doit : accepter une requte RPC. dcoder les arguments vers la reprsentation interne de la machine. dispatcher le message vers la procdure adquate. construire la rponse et lencoder (xdr). mettre le message RPC REPLY vers la client.

Les talons (stub et skeleton)

Session 6 : interfaces.

Comme nous l'avons dj signal, RPC a diffrents niveaux d'interfaces, certains simples utiliser, d'autres plus complexes mais offrant une plus grande matrise des mcanismes de communication. Ces diffrents niveaux sont classs du plus simple au plus difficile (au niveau de la programmation): - l'interface simplifie - le niveau haut (top level) - le niveau intermdiaire - le niveau expert - le niveau bas. Nous allons ici dtailler les principales fonctions de ces diffrents niveaux. 6.3 Linterface simplifie.

Cest le plus haut niveau de programmation des RPC, lindpendance avec le transport est totale. Les fonctions associes cachent entirement les mcanismes de communication. Cette interface est rduite 3 primitives : Le serveur doit enregistrer son programme et ses numros auprs du port mapper : rpc_reg() ou registerrpc. Puis il se met en attente de requte entrante, se branche sur le code de la procdure demande et retourne le rsultat : svc_run(). Le client initie linteraction par un appel de procdure : rpc_call(). A partir des numros indiqus en paramtre, cette primitive contacte le port mapper de la machine distante et initie linteraction RPC avec le serveur (mission du message de requte, rception du message rponse).

Interface de haut niveau

6.4

Linterface de bas niveau.

Linterface de haut niveau est simple de programmation mais comporte des dsavantages comme la limitation des messages (moins de 8k), le transport uniquement sur UDP Linterface de niveau le plus bas offre davantage de contrle, de paramtrage et de fonctionnalit : Le choix du protocole de Transport. La gestion des structures de donnes internes, des temporisations, des buffers. La scurisation, lauthentification. La diffusion. Lasynchronisme.

Elle comporte un ensemble de bibliothques volumineuses de 73 primitives, ce qui aboutit une expertise pointue : portmap, rpc_clnt_auth, rpc_clnt_calls, rpc_clnt_calls, rpc_svc_create, rpc_svc_create, rpc_svc_err, rpc_svc_reg, rpc_xdr, secure_rpc

En plus de ces diffrents niveaux de programmation, les RPC offrent diverses possibilits supplmentaires qui peuvent tre utiles dans certaines applications: - une alternative svc_run() pour les applications effectuant un travail durant l'attente de connexions. - une possibilit de broadcast. - une possibilit d'effectuer des appels et de continuer sans attendre une rponse. - une possibilit d'identification du client auprs du serveur. -

6.5

RPCGEN

RPCGEN est un outil logiciel simplifiant la programmation des RPCs par la gnration automatique de certaines parties de code ncessaires (compilateur RPC). Le compilateur rpcgen travaille partir dun fichier (suffixe en x) contenant la spcification de linterface du programme distant : le code est gnr en suivant les spcifications dcides par le programmeur et crites par lui en RPCL (Remote procedure Call Language). Ce langage, similaire au langage C (surtout dans la dernire version des RPC), permet d'indiquer de faon prcise les caractristiques des procdures distantes. Cette spcification par un IDL est indpendante dun langage de programmation do la ncessit dun traitement de lhtrognit.

RPCGEN : le modle

RPCGEN : instanciation