12.07.2015 Views

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

Généralités sur les systèmes d'exploitation - Site personnel de ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

LO14 : Université Technologique <strong>de</strong> TroyesSémantique RPC antirépétition : on donne un numéro <strong>de</strong> séquence à chaque <strong>de</strong>man<strong>de</strong>. Ainsi si l'accusé <strong>de</strong>réception se perd, le client va émettre <strong>de</strong> nouveau la même <strong>de</strong>man<strong>de</strong>. Si l'accusé <strong>de</strong> réception du client àla réponse se perd, il va recevoir une <strong>de</strong>uxième réponse qu'il <strong>de</strong>vra savoir éliminer.Sécurité :• I<strong>de</strong>ntifier l'expéditeur du message.• Vérifier l'i<strong>de</strong>ntité <strong>de</strong> l'expéditeur.• Contrôler l'acheminement du message.• Détecter toute altération du message.• Co<strong>de</strong>r le message.Protocole :Comme nous l'avons vu un peu plus haut la bibliothèque RPC utilise <strong>de</strong>s messages pour <strong>les</strong>communications. Chaque message contient :• un i<strong>de</strong>ntificateur <strong>de</strong> requête,• trois entiers <strong>sur</strong> 32 bits contenant :* un numéro <strong>de</strong> programme* un numéro <strong>de</strong> version* un numéro <strong>de</strong> procédure• <strong>de</strong>s informations d'authentification.3°) Exemple <strong>de</strong> programmation <strong>de</strong> RPC sous LINUXSoit un client qui appelle une procédure <strong>sur</strong> un serveur procédure qui se contente d'afficher un message"bonjour". Le serveur aura une procédure print_message() qui fera ce travail. L'appel <strong>sur</strong> le client se ferapar un banal print_message("Bonjour").On commence par écrire un fichier msgserv.x :program MSGSERV {version MSGSERV_1 {void print_message(string message) = 1;/* procedure numero 1 */} = 1; /*version numero 1 */}=0x20000001; /*numéro <strong>de</strong> programme */Ce fichier doit être compilé avec rpcgen : rpcgen -N -a msgserv.x qui produit cinq fichiers :• msgserv.h (fichier commun aux <strong>de</strong>ux applications)• msgserv_client.c et msgserv_server.c (à modifier)• msgserv_clnt.c et msg_svc.c (à ne pas modifier)L'option -N est là pour se donner l'autorisation du nouveau style <strong>de</strong> programmation qui permet l'utilisation <strong>de</strong>plusieurs paramètres ...Si on utilise plusieurs paramètres on a un fichier en plus msgserv_xdr.cOn réalise ensuite l'implémentation.Remarque : il semble nécessaire <strong>de</strong> prévoir systématiquement une procédure <strong>de</strong> numéro 0 ce qui n'est pasfait ici.Le fichier msgserv_server.c généré contient :#inclu<strong>de</strong> "msgser.h"void print_message_1_svc(char *message, struct svc_req *rqstp) {static char *result;/* co<strong>de</strong> a ajouter ici */return((void*) &result);}Le fichier msgserv_client.c sera modifié comme suit :#inclu<strong>de</strong> "msgserv.h"void msgserv_1(char *host, char *message) //a changer : ajouté char{CLIENT *clnt;void *result_1;char *print_message_1_message;#ifn<strong>de</strong>f DEBUGclnt = clnt_create (host, MSGSERV, MSGSERV_v1, "udp");if (clnt == NULL) {clnt_pcreateerror (host);exit (1);}*message49 /98 S. Moutou : Cours

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!