redes rpc

15

Click here to load reader

Upload: daniel-cruz

Post on 09-Jun-2015

1.516 views

Category:

Technology


3 download

DESCRIPTION

Llamada a procedimiento remoto

TRANSCRIPT

Page 1: Redes Rpc

RPC Remote Procedure Call

Llamada a Procedimiento Remoto

Daniel Cruz Chávez

Page 2: Redes Rpc

RPC Introducción

Permite ejecutar código en una maquina remota sin importar el medio de comunicación

Especificado en el RFC 1831 Versión 2 Se basa en el modelo Cliente-Servidor

Page 3: Redes Rpc

Llamada y retorno convencional

Page 4: Redes Rpc

RPC Características

Depende de la red y del estado del servidor, en consecuencia el manejo de errores debe considerar esta característica

Una RPC opera en forma mas lenta que una llamada a un procedimiento local

Requiere de autenticación Puede ser implementado sobre UDP o TCP El espacio de memoria del cliente y servidor son

independientes

Page 5: Redes Rpc

RPC Características

La transferencia de datos en una RPC puede darse entre maquinas de diferentes arquitecturas y sistemas operativos

XDR proporciona el estándar de codificación de datos (por ejemplo la longitud mínima de cualquier campo ha de ser de 32 bits)

Page 6: Redes Rpc

Modelo RPC

Page 7: Redes Rpc

RPC Procedimiento

Cuando un cliente realiza una RPC, en primer lugar llama a una función denominada “stub” generada por la RPC

Esta función empaqueta las entradas en un mensaje de red que enviá al servidor

El mensaje llega al servidor “stub”, que llama al procedimiento pasándole los parámetros

Cuando se ha ejecutado el procedimiento, el servidor “stub” empaqueta los resultados en un mensaje de red que enviá al cliente

El cliente “stub” extrae los resultados y se los devuelve a la aplicación

Page 8: Redes Rpc

Ejemplo de una llamada a procedimiento local

Llamada a una función que imprime un mensaje en la consola

#include <stdio.h>

int main(argc, argv) int argc; char *argv[]; { char *message; message = argv[1];

/* llamada a procedimiento */ printmessage(message)

return 0; }

/* Procedimiento que imprime un mensaje*/printmessage(msg) char *msg; { printf("%s\n", msg); return(1); }

Page 9: Redes Rpc

Ejemplo de llamada a procedimiento remoto

#include <stdio.h>#include "msg.h" /* archivo de definición RPC */

main(argc, argv) int argc; char *argv[];{ CLIENT *clnt; int *result; char *server; char *message;

if (argc != 3) { fprintf(stderr, "uso: %s host mensaje\n",

argv[0]); return 1; }

server = argv[1];message = argv[2];

/* crea un manejador del procedimiento remoto */

clnt = clnt_create(server, /*servidor*/ MESSAGEPROG, /*N° Prog*/PRINTMESSAGEVERS, /*N° Ver*/ ”udp” /*Transp*/ );

if (clnt == (CLIENT *)NULL) { /* Si no hay comunicacion

con el servidor, se imprime mensaje de error */

clnt_pcreateerror(server); return 1; }

Page 10: Redes Rpc

Ejemplo de una Llamada a procedimiento remoto

/* Llamada a procedimiento remoto */ result = printmessage_1(&message, clnt);

if (result == (int *)NULL) { /* Si hay un error mientras se llama al procedimiento remoto */ clnt_perror(clnt, server); return 1; }

if (*result == 0) { /* Si el servidor tuvo problema para imprimir nuestro mensaje */ fprintf(stderr,"%s: no se pudo imprimir su mensaje \n",argv[0]); return 1;

}

/* El mensaje fue impreso en la consola del servidor */ printf("Mensaje enviado a %s\n", server); clnt_destroy( clnt ); return 0;}

Page 11: Redes Rpc

Procedimiento remoto

#include <stdio.h>#include "msg.h"

int *printmessage_1(msg, req) char **msg; struct svc_req req; /* detalles de la llamada */ { static int result; result = 0; printf("%s\n", *msg); result = 1; return (&result);}

Page 12: Redes Rpc

Formato RPC

Se identifica univocamente al procedimiento a ejecutar (programa, versión, procedimiento)*

Credenciales y verificador son empleados para la autentificación del que llama

Page 13: Redes Rpc

RPC Autentificación

En RPC existe la posibilidad de elegir entre varios protocolos de autentificación Nula Unix DES Además del identificador de usuario, se cifra una

llave conocida solo por el cliente y servidor (intercambio por Diffie-Hellman)

Page 14: Redes Rpc

PortMapper

Es un servicio que asocia un número de programa y versión de RPC a un puerto UDP o TCP

Cada vez que se arranca uno de los servicios RPC en un servidor, se registra en el servicio “PortMapper” de dicho “host” asociándole un determinado valor de puerto a dicho servicio

Un cliente RPC contacta con el servicio “PortMapper” para obtener el valor del puerto para determinado RPC. Después envía el RPC a dicho puerto

Page 15: Redes Rpc

PortMapper