Tabla de contenidos
El sistema X Window
Figure: RPC("Remote Procure Call")
El RPC de Sun es un protocolo propuesto como estándar. Su status es electivo.
RCP es un estándar desarrollado por Sun Microsystems y usado por muchos distribuidores de sistemas UNIX. La especificación actual de UNIX se halla en el RFC 1057 - RPC ("Remote Procure Call"): especificación de protocolo de la versión 2.
El RPC es una interfaz de programación de aplicación(API) disponible para el desarrollo de aplicaciones distribuidas. Permite que los programas llamen a subrutinas que se ejecutan en un sistema remoto. El programa llamador, denominado (llamado client) envía una mensaje de llamada al proceso proceso servidor y espera por un mensaje de respuesta. La llamada incluye los parámetros del procedimiento y la respuesta los resultados.
El RPC de Sun consta de las siguientes partes:
El concepto de RPC se puede simplificar del modo siguiente:
Ver Figura - RPC muestra un modelo concepual de RPC.
Este es sólo un posible modelo, ya que el protocolo RPC de Sun no impone restricciones específicas en el modelo de concurrencia. En el modelo anterior, el proceso llamador se bloquea hasta que se recibe un mensaje de respuesta. Otros modelos son igualmente posibles; por ejemplo, el llamador puede continuar su ejecución mientras espera una respuesta, o el servidor puede despachar una tarea separada para cada llamada que reciba de modo que quede libre para recibir otros mensajes.
Las llamadas a procedimientos remotos difieren de las llamadas a procedimientos locales en los siguientes aspectos:
Figure: RPC - Modelo de llamadas a procedimientos remotos
El protocolo RPC se puede implementar sobre cualquier protocolo de transporte. En el caso de TCP/IP, puede usar tanto TCP como UDP como capa de transporte. El tipo de transporte es un parámetro del comando RPCGEN. En caso de que se use UDP, recuérdese que no proporciona fiabilidad, por lo que dependerá del programa llamador el garantizarla(usando tiempos límite y retransmisiones, implementadas normalmente en rutinas de librería e RPC). Cabe señalar que incluso con TCP, el programa llamador sigue necesitando una rutina para el tiempo límite con el fin de tratar situaciones excepcionales, como por ejemplo la caída del servidor.
Los mensajes de llamada y respuesta se formatean al estándar XDR.
El mensaje de llamada de RPC consta de varios campos:
Cada llamada contiene tres campos(enteros sin signo):
que identifican unívocamente al procedimiento e ejecutar. El número de programa remoto identifica un grupo funcional de procedimientos, por ejemplo, un sistema de ficheros, que incluiría procedimientos individuales como "leer" y "escribir". Estos procedimientos individuales se identifican con un número de procedimiento único dentro del programa remoto. A medida que el programa remoto evoluciona, a cada versión se le asigna un número de versión.
Cada programa remoto está conectado a un puerto de. El número de este puerto se puede elegir libremente, exceptuando los puertos reservados para "servicios bien conocidos". Es evidente que el llamador tendrá que conocer el número de puerto usado por el programa remoto.
Números de programas asignados:
Existen dos campos, credenciales y verificador, para la autentificación del llamador al servicio. Depende del servidor el usar esta información para la autentificación del usuario. Además, cada implementación es libre de elegir entre los varios protocolo de autentificación que están soportados. Algunos de ellos son:
Los datos(parámetros) pasados al procedimiento remoto.
Existen diversas respuestas, dependiendo del tipo de acción a tomar:
Para un descripción detallada de los mensajes de llamada y respuesta, ver el RFC 1057 - RPC: ("Remote Procedure Call"): especificación de protocolo de la versión 2, que contiene además las definiciones de tipos (typedef) para los mensajes en el lenguaje XDR.
Como se indica más arriba, el llamador tiene que conocer el número de puerto exacto usado por un programa RCP concreto para ser capaz de enviarle un mensaje. Portmap es una aplicación del servidor que mapea el número de programa y de versión al puerto usado por ese programa. Debido a que portmap tiene asignado el número de puerto reservado (servicio bien conocido) 111, todo lo que tiene que hacer el llamador es preguntarle al servicio Portmap en el host remoto por el puerto usado por el programa servidor. Ver Figura - Portmap.
Portmap sólo tiene conocimiento de los programas de su host(sólo programas RPC en el host local).
Con el fin de que RPC adquiera conocimiento del RPC, cada programa RCP debería registrarse con el Portmap local cuando este arranca. También debería anular su registro cuando el Portmap finaliza su ejecución.
Normalmente, la aplicación llamadora contacta con el Portmap en el host de destino para obtener el número de puerto correcto de un programa remoto determinado, y luego envía el mensaje de llamada a ese puerto. Existe una variante consistente en que el llamador envía también los parámetros del procedimiento al Portmap y este a su vez se encarga de invocarlo.
Figura: Portmap - Informa al llamador de que número de puerto ocupa un programa en su host.
RPCGEN es una herramienta que genera código en C para el protocolo RPC. La entrada de RPCGEN es un fichero escrito en un lenguaje similar a C, conocido como lenguaje RPC. Asumiendo que se usa un fichero de entrada llamado proto.x , RPCGEN produce los siguientes ficheros de salida: