Redes Rpc
Upcoming SlideShare
Loading in...5
×
 

Redes Rpc

on

  • 1,862 views

Llamada a procedimiento remoto

Llamada a procedimiento remoto

Statistics

Views

Total Views
1,862
Views on SlideShare
1,860
Embed Views
2

Actions

Likes
0
Downloads
44
Comments
0

1 Embed 2

http://www.slideshare.net 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Redes Rpc Redes Rpc Presentation Transcript

  • 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 &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 &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 &quot;,argv[0]); return 1; } /* El mensaje fue impreso en la consola del servidor */ printf(&quot;Mensaje enviado a %s &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 &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