Remote Procedure Call RPC Qu es RPC Es
- Slides: 27
Remote Procedure Call (RPC)
¿Qué es RPC? Es un protocolo que permite a un programa ejecutar código en otra máquina remota sin tener que preocuparse por los mecanismos de comunicación entre ambas máquinas
RPC • Creado por Bireel & Nelson en 1984 • Permiten a los programadores llamar procedimientos localizados en otras máquinas. • Un proceso X en una máquina A, puede llamar a un procedimiento localizado en una máquina B. • Información puede llevarse del proceso invocador al invocado dentro de los parámetros. • Ningún mensaje u operación de E/S es visible para el programador. • Problemas a resolver: • Procedimiento invocador e invocado se ejecutan en diferentes máquinas, i. e. diferentes direcciones y posiblemente diferentes arquitecturas. • Ambas máquinas pueden fallar.
Arquitectura de RPC
Stub (sustituto) • El stub cliente empaqueta (marshall) los parámetros en un mensaje (considera el formato de red) • El stub cliente pasa el mensaje a la capa de Transporte para ser enviado luego al servidor • Cuando el mensaje llega al servidor, la capa de Transporte pasa el mensaje al stub servidor, éste desempaqueta los parámetros y hace la llamada al procedimiento de manera local • Al terminar el procedimiento se retorna el valor devuelto al stub servidor, éste empaqueta el valor de retorno y lo pasa a la capa de Transporte para su envío al cliente • La capa de Transporte recibe el mensaje y lo envía al stub cliente para el desempaquetado del valor devuelto
RPCs: IMPLEMENTACIONES MÁS POPULARES • ONC-RCP (Open Network Computing, ONC-RCP), desarrollada por Sun Microsystem y distribuida con casi todos los sistemas UNIX. • DCE-RPC (DCE, Distributed Computing Enviroment) definido por la Fundación de Software Abierto (OSF, Open Software Foundation) e incluida en los sistemas operativos Windows
ONC - RPC • Desarrollada inicialmente por Sun Microsystem • Disponible en la gran mayoría de los sistemas UNIX • Especificación de ONC-RPC versión 2: RFC 1831 • Especificación de XDR: RFC 1832
ONC RPC • ONC-RPC cuenta con los siguientes componentes: • rpcgen: un compilador que toma la definición de la interfaz de un procedimiento remoto y genera el “stub” del cliente y el “stub” del servidor. • XDR (e. Xternal Data Representation): un estándar para la descripción y codificación de datos que garantiza portabilidad entre sistemas de arquitecturas diferentes • Una biblioteca que maneja todos los detalles
XDR (e. Xternal Data Representation) • XDR es un protocolo estándar para la descripción y codificación de datos • Útil para transferir datos entre diferentes arquitecturas computacionales • Encaja dentro de la capa de presentación del modelo OSI • Utiliza “Implicit Typing” (sólo viaja el valor de la variable por la red) • Utiliza un lenguaje (similar a C) para describir los formatos de los datos. No es un lenguaje de programación • RPC lo utiliza y extiende para describir su formato de datos y declarar procedimientos remotos • Se asume como unidad fundamental de información el byte (= 8 bits) y que es portable
XDR (e. Xternal Data Representation) Algunos Tipos de Datos • Entero con signo: Rango: [-2147483648, 2147483647] (32 bits) Representación: Complemento a 2 Declaración: int identifier; • Entero sin signo: Rango: [0, 4294967295] (32 bits) Declaración: unsigned int identifier; • Enteros de 64 bits: Declaración: hyper identifier; unsigned hyper identifier;
XDR (e. Xternal Data Representation) • Algunos Tipos de Datos Enumeración: Tiene la misma representación de los enteros con signo. Declaración: enum {name-identifier=constant, . . . } identifier; Ejemplo: enum {RED=2, YELLOW=3, BLUE=5} colors;
XDR (e. Xternal Data Representation) Algunos Tipos de Datos : • Punto Flotante de Presición Simple Codificación: IEEE 754 (32 bits) Declaración: float identifier; • Punto Flotante de Doble Presición Codificación: IEEE 754 (64 bits) Declaración: double identifier;
XDR (e. Xternal Data Representation) Algunos Tipos de Datos • Arreglo Declaración: type-name identifier[n]; (Arreglo de longitud fija) type-name identifier; (Arreglo de longitud variable) • Estructura Declaración: struct { component-declaration-A; component-declaration-B; . . . } identifier;
XDR (e. Xternal Data Representation) • Cadenas de caracteres: Declaración: string object;
XDR (e. Xternal Data Representation) ONC-RPC es un protocolo de mensajes especificado en XDR. El lenguaje especificado por RPC es idéntico al lenguaje de XDR, excepto que agrega la definición de “programa” program-def: "program" identifier "{“ version-def * "}" "=" constant "; " version-def: "version" identifier "{“ procedure-def * "}" "=" constant "; " procedure-def: type-specifier identifier "(" type-specifier (", " type-specifier )* ")" "=" constant "; "
Portmap Es un servicio demonio encargado de mapear tuplas #Programa/#versión hacia números de puerto para una versión determinada de algún programa. Siempre se ejecuta en el puerto 111 de TCP/UDP #rpcinfo –p #sudo apt-get install rpcbind
Registro y localización de un servicio RPC
Asignación de los números de programa en los RPCs de SUN Desde Hasta Designado por 0 x 0000 0 x 1 FFFFFFF SUN Microsystems Inc. 0 x 20000000 0 x 3 FFFFFFF Usuario 0 x 40000000 0 x 5 FFFFFFF Sin uso 0 x 60000000 0 x. FFFF Reservado
Creación de una aplicación usando XDR 1. Creación de la definición de interfaz usando XDR. Ej. suma. x struct sumandos { int sumando 1; int sumando 2; }; program SUMA_PRG { version SUMA_VER { int suma (sumandos) = 1; } = 0 x 20000001;
Creación de una aplicación usando XDR 2. Generación de stubs y plantillas mediante rpcgen. Ej. # rpcgen -a suma. x Archivos generados: • Makefile. suma : Makefile necesario para compilar todos los archivos • suma_xdr. c : funciones para el empaquetado de tipos de datos • suma. h : definición de prototipos de funciones • suma_server. c : Cuerpo de las funciones publicadas • suma_svc. c : Ejemplo de servidor (registro y llamado de funciones) …* • suma_client. c : Ejemplo de un cliente (conecta con cliente, llama función y cierra conexión) …* • suma_clnt. c : Funciones de traducción que necesitan menos parámetros
Creación de una aplicación usando XDR 3. Llenado del cuerpo de las funciones. (suma_server. c) Ej. # nano suma_server. c /* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "suma. h" int * suma_1_svc(sumandos *argp, struct svc_req *rqstp) { static int result; /* * insert server code here */ result=argp->sumando 1 + argp->sumando 2; return &result; }
Creación de una aplicación usando XDR 4. Pasar los parámetros desde el cliente. (suma_client. c) Ej. # nano suma_client. c /* * This is sample code generated by rpcgen. * These are only templates and you can use them * as a guideline for developing your own functions. */ #include "suma. h" void suma_prg_1(char *host) { CLIENT *clnt; int *result_1; sumandos suma_1_arg; #ifndef #endif DEBUG clnt = clnt_create (host, SUMA_PRG, SUMA_VER, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } /* DEBUG */
Creación de una aplicación usando XDR 4. Pasar los parámetros desde el cliente. (suma_client. c) Ej. # nano suma_client. c #ifndef #endif DEBUG clnt = clnt_create (host, SUMA_PRG, SUMA_VER, "udp"); if (clnt == NULL) { clnt_pcreateerror (host); exit (1); } /* DEBUG */ suma_1_arg. sumando 1=1; suma_1_arg. sumando 2=2; result_1 = suma_1(&suma_1_arg, clnt); if (result_1 == (int *) NULL) { clnt_perror (clnt, "call failed"); } #ifndef #endif } printf ("La suma de %d + %d es %dn", suma_1_arg. sumando 1, suma_1_arg. sumando 2, *result_1); /* Codigo añadido por programador */ DEBUG clnt_destroy (clnt); /* DEBUG */
Creación de una aplicación usando XDR 5. Compilar y generar ejecutables Ej. # make –f Makefile. suma Archivos generados: • suma_server • suma_client Ej. # sudo. /suma_server #. /suma_client 127. 0. 0. 1
- Remote procedure call diagram
- Remote procedure call architecture
- Remote procedure call middleware
- Remote procedure call c++
- Design issues of remote procedure call
- Lightweight remote procedure call
- Remote call station
- Procedure call
- Stock options terminology
- Gartner call recording magic quadrant
- Vertical spread strategy
- Ucla rpc
- Rpc and rmi
- Rpc
- What is the primary motivation for development of rpc?
- Rpc woerden
- Rpc status: -532462766 -532462766
- Rpc construction
- Rpc
- _vti_bin exploit
- Rpc champaign
- Asynchronous rpc
- Rpc
- Openchain rpc
- Rpc and rmi in distributed system
- Lightweight rpc
- Rpc vs ipc
- What is rpcgen