lunes, 23 de junio de 2008

Protocolo RPC

Asran [asran@isppr.rimed.cu]

RPC llamado Remote Procedure Call es un protocolo mas bien orientado para la implementación de programas para redes, El RPC fue inventado por SUN junto con la implementación que este mismo usa el XDR , el RPC puede ser usado por medio del TCP/IP o el UDP/IP . Este protocolo fue ya algo famoso en Solaris.

El RPC se distribuye en cuatro partes: Caller, Callee, Client y Server. El Caller se ejecuta en el cliente y es el encargado de enviar las llamadas al Server y el localhost las devuelve al Client. Esto viene por que al ser para sistemas distribuidos se encargan de que las dos maquinas que estén conectando sean arquitecturas totalmente distintas aunque de esto se encarga el XDR. EL XDR fue implementando debido a que los tipos de variables: integer, etc. Tienen diferentes representaciones dependiendo de la arquitectura , muchas arquitecturas ponen los bytes de menos valor al principio y otras en cambio ponen los bytes de menos valor los últimos, de ahí proviene el XDR un sistema de intercambio de datos para que los programas de distribución no diesen errores . Por lo que el procesos de comunicación pasa a ser que cuando el Client envíe algo le tenga que codificar los datos con el XDR y una vez que al Server le llega la información la tiene que descodificar con el XDR lógico no.

El portmap es el encargado de mapear en el puerto que esta corriendo un daemon estos puertos no se describen como los de "/etc/services" si no que usa otro fichero llamado "/etc/rpc".

Esto seria un ejemplo del contenido del "/etc/rpc":

portmapper 100000 portmap sunrpc
rstatd     100001 rstat rstat_svc rup perfmeter
rusersd    100002 rusers
nfs        100003 nfsprog
ypserv     100004 ypprog
mountd     100005 mount showmount

Por lo que cuando un programa quiere contactar con un daemon del RPC primero le pregunta al portmap en que puerto esta. Para saber en que puerto esta un programa usaremos :

localhost@lepton:~ > rpcinfo -p localhost
program vers proto port
100000 2 tcp 111  portmapper
100000 2 udp 111  portmapper
100024 1 udp 954  status
100024 1 tcp 956  status
100003 2 udp 2049 nfs
100021 1 udp 1122 nlockmgr
100021 3 udp 1122 nlockmgr

Esto seria usando rpcinfo otra forma es usando algun scaner por ejemp el nmap.
localhost @lepton:~ > nmap -sR -sT localhost
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1537 ports scanned but not shown below are in state: closed)
Port State Service (RPC)
21/tcp  open ftp
22/tcp  open ssh
80/tcp  open http
111/tcp open sunrpc (rpcbind V2)
956/tcp open (status V1)

De esta forma espero haber puesto la marca, para que alguien se lance a la investigación de esta técnica muy útil para la ejecución remota de aplicaciones. No quisiera pasar por alto el recordatorio de siempre todos somos iguales.



Artículos relacionados


No hay comentarios: