RPC  Remote Procedure Call Llamada a Procedimiento Remoto Daniel Cruz Chávez
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
Llamada y retorno convencional
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
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)
Modelo 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
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(&quot;%s\n&quot;, msg); return(1); }
Ejemplo de llamada a procedimiento remoto #include <stdio.h> #include &quot;msg.h&quot;  /* 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,  &quot;uso: %s host mensaje\n&quot;,   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; }
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,&quot;%s: no se pudo imprimir su mensaje \n&quot;,argv[0]);   return 1; } /* El mensaje fue impreso en la consola del servidor */ printf(&quot;Mensaje enviado a %s\n&quot;, server); clnt_destroy( clnt ); return 0; }
Procedimiento remoto #include <stdio.h> #include &quot;msg.h&quot;  int * printmessage_1(msg, req) ‏ char **msg; struct svc_req req;  /* detalles de la llamada */  { static int result;  result = 0; printf(&quot;%s\n&quot;, *msg); result = 1; return (&result); }
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
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) ‏
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
PortMapper

Redes Rpc

  • 1.
    RPC RemoteProcedure Call Llamada a Procedimiento Remoto Daniel Cruz Chávez
  • 2.
    RPC Introducción Permiteejecutar 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
  • 3.
    Llamada y retornoconvencional
  • 4.
    RPC Características Dependede 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
  • 5.
    RPC Características Latransferencia 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)
  • 6.
  • 7.
    RPC Procedimiento Cuandoun 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
  • 8.
    Ejemplo de unallamada 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(&quot;%s\n&quot;, msg); return(1); }
  • 9.
    Ejemplo de llamadaa procedimiento remoto #include <stdio.h> #include &quot;msg.h&quot; /* 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, &quot;uso: %s host mensaje\n&quot;, 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; }
  • 10.
    Ejemplo de unaLlamada 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,&quot;%s: no se pudo imprimir su mensaje \n&quot;,argv[0]); return 1; } /* El mensaje fue impreso en la consola del servidor */ printf(&quot;Mensaje enviado a %s\n&quot;, server); clnt_destroy( clnt ); return 0; }
  • 11.
    Procedimiento remoto #include<stdio.h> #include &quot;msg.h&quot; int * printmessage_1(msg, req) ‏ char **msg; struct svc_req req; /* detalles de la llamada */ { static int result; result = 0; printf(&quot;%s\n&quot;, *msg); result = 1; return (&result); }
  • 12.
    Formato RPC Seidentifica univocamente al procedimiento a ejecutar (programa, versión, procedimiento)* Credenciales y verificador son empleados para la autentificación del que llama
  • 13.
    RPC Autentificación EnRPC 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) ‏
  • 14.
    PortMapper Es unservicio 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
  • 15.