Documente Academic
Documente Profesional
Documente Cultură
ATC-Distribuidas
Las RPC de Sun Microsystems Las RPC de Sun Microsystems fueron una de las primeras implementaciones comerciales de RPC. Actualmente dos versiones: La original.- Presente en la mayora de sistemas operativos. Cdigo fuente disponible en internet desde 1988. TI-RPC (Transport Independent- RPC). Slo en sistemas operativos de SUN (Solaris y SunOS).
ATC-Distribuidas
3 Mquina Cliente
ATC-Distribuidas
Localizacin e identificacin
La identificacin se realiza utilizando nmeros. Cada procedimiento remoto se identifica usando tres cantidades: Nmero de programa al que pertenece el procedimiento. Identifica el servidor al que pertenece. Ejemplo: Servidor de ficheros. Nmero de versin del servidor. Nmero de procedimiento. Identifica el servicio concreto dentro del servidor. Ejemplo: Crear fichero.
El localizador de Sun almacena slo los nmeros de programa y versin junto con la informacin de localizacin: N Programa 287340274 N versin 2 Puerto 12348 protocolo tcp
ATC-Distribuidas
Localizacin e identificacin
Restricciones a los valores numricos: Versin y Procedimiento: Ninguna. Programa:
N Programa Rango
Descripcin
0x00000000 0x1FFFFFFF Definido por Sun Microsystems 0x20000000 0x3FFFFFFF Definido por el usuario 0x40000000 0x5FFFFFFF Transitorio. Generados dinmicamente por las aplicaciones. 0x60000000 0xFFFFFFFF Reservado
ATC-Distribuidas
Niveles de utilizacin
Utilizando rpcgen. Ms sencilla la programacin. Se requiere conocer RPCL (el IDL de Sun). Alto nivel de transparencia.
Nivel simplificado. Se usan pocas funciones. Se requiere ms conocimiento del funcionamiento del sistema de RPC. Transparencia muy baja.
ATC-Distribuidas
cliente.c
Lenguaje RPCL
El especificacin del interface en Fichero.x se realiza utilizando el lenguaje RPCL (RPC Language). RPCL= XDR + extensiones para definir procedimientos
Procedimiento: id_tipo nombre_proc (id_tipo) = valor; Lista de procedimientos: Procedimiento; lista de procedimientos; Versin: version id_version { lista de procedimientos }= valor; Lista de versiones: Versin; lista de versiones; Programa: program nombre_programa { lista de versiones } = valor;
Universidad de Oviedo / Dpto. de Informtica ATC-Distribuidas
Ejemplo RPCL
Interface.x
program SERVIDOR_CALCULO { version SC_TERCERA { int duplica (int) = 1; float ENTRE3 (int) = 2; } = 3; } = 0x201ABCBF;
ATC-Distribuidas
Interface.h
#include <rpc/rpc.h>
SERVIDOR_CALCULO ((unsigned long)(0x201ABCBF)) SC_TERCERA ((unsigned long)(3)) duplica ((unsigned long)(1)) int * duplica_3(); ENTRE3 ((unsigned long)(2)) float * entre3_3();
ATC-Distribuidas
Desarrollo con rpcgen. Cliente. Para construir un cliente mnimo necesitamos utilizar cuatro funciones del API, bsicamente de gestin de errores:
ATC-Distribuidas
sumador.x
struct datos { int sum1; int sum2; } program SUMADOR { version SUM_TERCERA { int suma (datos) = 1; double div3 (float) = 2; } = 3; } = 0x201ABCBF;
ATC-Distribuidas
servicios.c
#include sumador.h int * suma_3 (datos *sumandos, struct svc_req *req) { static int resultado;
ATC-Distribuidas
ATC-Distribuidas
Contiene todos los tipos de datos de entrada de los procedimientos Resultado genrico. Puntero a una funcin genrica.
ATC-Distribuidas
ATC-Distribuidas
Opciones de rpcgen.
Comunes a la mayora de las mquinas: c Genera nicamente los filtros XDR. h Genera nicamente el fichero de cabecera .h l Genera nicamente el extremo del cliente. m Genera nicamente el extremo del servidor. s [udp|tcp] Slo usa el protocolo especificado. Para Solaris y Linux: Sc Genera un esqueleto de cliente. Ss Genera un esqueleto de servidor. Sm Genera un fichero makefile para la aplicacin. a Genera todos los ficheros.
ATC-Distribuidas
Opciones de rpcgen.
Cuando rpcgen compila estn activos una serie de smbolos: Smbolo RPC_HDR RPC_XDR RPC_SVC RPC_CLNT Momento Activo Al generar el fichero .h Al generar el fichero _xdr.c Al generar el fichero _svc.c Al generar el fichero _clnt.c
Adems, las lneas que comiencen con el smbolo % pasan directamente al fichero de salida.
ATC-Distribuidas
Control de la RPC en el cliente: clnt_control bool_t clnt_control ( CLIENT *clnt, int peticion, char *info ); Modifica las caractersticas de la estructura de tipo CLIENT asociada a la RPC. Necesita que la estructura clnt haya sido inicializada con clnt_create. Los valores de peticion e info dependen de la operacin a realizar (siguiente transparencia)
Universidad de Oviedo / Dpto. de Informtica ATC-Distribuidas
CLGET_TIMEOUT
struct timeval
CLGET_SERVER_ADDR
Solo para estructuras CLIENT inicializadas con UDP CLSET_RETRY_TIMEOUT struct timeval Fija el tiempo de espera por respuesta del servidor antes de reintentar la llamada. CLGET_RETRY_TIMEOUT struct timeval Obtiene el tiempo antes de reintentos activo.
Universidad de Oviedo / Dpto. de Informtica ATC-Distribuidas
Seguridad
El sistema de SUN no incorpora ningn tipo de control de acceso a los servicios suministrados va RPC. No se implementa ningn nivel de seguridad en el protocolo. Cualquier cliente puede invocar cualquier servicio. nicamente se incorpora autentificacin del cliente incorporando sus credenciales con cada RPC. Esquema:
El cliente genera las credenciales y realiza las llamadas. Junto con los parmetros de la RPC viajan las credenciales El servidor extrae las credenciales.
Cliente
Servidor
Datos + credenciales
ATC-Distribuidas
Tipos de credenciales
Existe una serie de sistemas de credenciales utilizables con las RPC de Sun: Identificador AUTH_NONE, AUTH_NULL AUTH_UNIX, AUTH_SYS AUTH_SHORT AUTH_DES AUTH_KERB Descripcin Sin credencial. Es el tipo utilizado por defecto. Tipo de credencial basado en el sistema operativo UNIX: uid, gid... Sin verificacin adicional. Similar al anterior, aunque simplificado. Credenciales basadas en el DES (Data Encryption Standard). Credenciales basadas en el sistema Kerberos desarrollado por el MIT.
ATC-Distribuidas
Credenciales en el cliente
El cliente genera sus credenciales llamando a una funcin especfica para cada tipo utilizado. Las guarda en la estructura AUTH dentro de la estructura CLIENT.
typedef struct { AUTH *cl_auth; struct cl_ops { ..... } CLIENT; Credenciales cliente Verificacin Credenciales DES typedef struct { struct opaque_auth ah_cred; struct opaque_auth ah_verf; union des_block ah_key; struct auth_ops { void (*ah_nextverf)(); int (*ah_marshal)(); Operaciones int (*ah_validate)(); con las int (*ah_refresh)(); credenciales int (*ah_destroy)(); } *ah_ops; caddr_t ah_private; } AUTH;
ATC-Distribuidas
La estructura opaque_auth
Esta estructura es la que realmente transporta las credenciales struct opaque_auth { enum_t oa_flavor; caddr_t oa_base; u_int oa_length; };
Valor que identifica el tipo de credencial utilizado (AUTH_UNIX, AUTH_DES, etc) Puntero a una zona de memoria en la que se encuentran las credenciales. Tamao en bytes de esa zona de memoria.
Cuando un cliente ha terminado de usar unas credenciales puede destruirlas utilizando auth_destroy:
ATC-Distribuidas
Verificacin en el servidor
El servidor recibe una copia de las credenciales del cliente en cada invocacin de un servicio. El segundo parmetro de cada RPC es una estructura svc_req:
struct svc_req { unsigned long rq_prog; Datos de la llamada unsigned long rq_vers; unsigned long rq_proc; struct opaque_auth rq_cred; Credenciales cliente recibidas por la red caddr_t rq_clntcred; Las credenciales procesadas SVCXPRT *rp_xprt; Datos de la capa de transporte (IP cliente, etc) };
La estructura rq_cred es opaca al servidor excepto el campo oa_flavor que contiene la identificacin del esquema de seguridad utilizado.
Universidad de Oviedo / Dpto. de Informtica ATC-Distribuidas
ATC-Distribuidas
Nota: el esquema de credenciales tipo unix es muy dbil ya que no incorpora ni verificacin ni encriptacin de datos a travs de la red.
ATC-Distribuidas
Cliente no autorizado
Prototipo svcerr_auth
void svcerr_weakauth ( SVCXPRT *xprt );
Enva un mensaje al cliente diciendo que sus credenciales son dbiles. Es una particularizacin de:
/* Credenciales incorrectas */ /* El cliente debera iniciar otra sesin */ /* La verificacin es incorrecta */ /* El verificador ha expirado o est repetido */ /* Rechazado por razones de seguridad */ /* Verificador incorrecto de respuesta */ /* Razn desconocida */
ATC-Distribuidas
Enva un mensaje a la salida estndar de error indicando porqu la estructura client no ha podido ser inicializada. Aade delante del mensaje la cadena info seguida de dos puntos.
volver
ATC-Distribuidas
Prototipo clnt_perror void clnt_perror ( const CLIENT *clnt, const char *info );
Enva un mensaje a la salida estndar de error indicando porqu fall la llamada al procedimiento. Aade delante del mensaje la cadena info seguida de dos puntos. Est asociada a una estructura client.
volver
ATC-Distribuidas
Elimina los recursos asociados a la estructura clnt. Despus de usar esta funcin no se puede realizar una llamada a un procedimiento remoto usando la estructura clnt.
volver
ATC-Distribuidas