[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

85. RPC: Remote Procedure Call

RPC, acronimo di Remote Procedure Call, è un meccanismo generale per la gestione di applicazioni client/server. Il sistema si basa su un demone, il portmapper, e un file che elenca i servizi disponibili associati al demone relativo. Il portmapper è un classico esempio di un programma che gestisce un servizio di rete in modo autonomo, cioè senza essere controllato da inetd

85.1 RPC in generale

Semplificando in modo estremo il funzionamento delle RPC, si può dire che si tratti di un meccanismo attraverso cui si possono eseguire delle elaborazioni remote.

Dal lato server si trova il portmapper in ascolto sulla porta 111, dal lato client ci sono una serie di programmi che, per un qualunque servizio RPC, devono prima interpellare il portmapper remoto il quale fornisce loro le informazioni necessarie a stabilire una connessione con il demone competente.

Per questo motivo, le chiamate RPC contengono l'indicazione di un numero di programma, attraverso il quale, il portmapper remoto è in grado di rispondere informando il client sul numero di porta da utilizzare per quel programma.

I servizi RPC possono essere interrogati attraverso il programma rpcinfo. Per esempio, per chiedere al portmapper dell'elaboratore weizen.mehl.dg quali servizi siano disponibili e conoscere le loro caratteristiche si può agire come nell'esempio seguente:

rpcinfo -p weizen.mehl.dg[Invio]

   program vers proto   port
    100000    2   tcp    111  rpcbind
    100000    2   udp    111  rpcbind
    100005    1   udp    844  mountd
    100005    1   tcp    846  mountd
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100004    2   udp    880  ypserv
    100004    1   udp    880  ypserv
    100004    2   tcp    883  ypserv
    100009    1   udp    889  yppasswdd

Una cosa da osservare è che alcuni dei programmi elencati tra i servizi RPC, non appaiono necessariamente anche nell'elenco del file /etc/services.

85.1.1 # portmap

portmap [<opzioni>]

È il demone che si occupa di attivare i servizi RPC. Potrebbe anche chiamarsi rpc.portmap. Viene avviato di norma durante la procedura di inizializzazione del sistema, in modo indipendente dal controllo di inetd.

85.1.2 /etc/rpc

/etc/rpc è il file contenente l'elenco dei servizi RPC disponibili, abbinati al numero di programma usato come riferimento standard. Il suo scopo è quindi quello di tradurre i nomi in numeri di programma e viceversa.

#
# rpc 88/08/01 4.0 RPCSRC; from 1.12   88/02/07 SMI
#
portmapper	100000	portmap sunrpc
rstatd		100001	rstat rstat_svc rup perfmeter
rusersd		100002	rusers
nfs		100003	nfsprog
ypserv		100004	ypprog
mountd		100005	mount showmount
ypbind		100007
walld		100008	rwall shutdown
yppasswdd	100009	yppasswd
etherstatd	100010	etherstat
rquotad		100011	rquotaprog quota rquota
sprayd		100012	spray
3270_mapper	100013
rje_mapper	100014
selection_svc	100015	selnsvc
database_svc	100016
rexd		100017	rex
alis		100018
sched		100019
llockmgr	100020
nlockmgr	100021
x25.inr		100022
statmon		100023
status		100024
bootparam	100026
ypupdated	100028	ypupdate
keyserv		100029	keyserver
tfsd		100037 
nsed		100038
nsemntd		100039
pcnfsd		150001
bwnfsd		545580417

85.1.3 $ rpcinfo

rpcinfo -p [<host>]

rpcinfo [-n <numero-di-porta>] {-u|-t} <host> <programma> [<versione>]

rpcinfo {-b|-d} <programma> <versione>

rpcinfo permette di interrogare un portmapper. L'utilità di questo programma sta quindi nella possibilità di conoscere quali servizi RPC sono disponibili all'interno di un certo nodo, e nella possibilità di verificare che questi siano effettivamente in funzione.

Opzioni

-p [<host>]

Interroga il portmapper nell'elaboratore indicato, oppure in quello locale, ed elenca tutti i programmi RPC registrati presso lo stesso.

-u <host> <programma> [<versione>]

Utilizza il protocollo UDP per eseguire una chiamata RPC alla procedura 0 (NULLPROC) del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.

-t <host> <programma> [<versione>]

Utilizza il protocollo TCP per eseguire una chiamata RPC alla procedura 0 (NULLPROC) del programma nel nodo specificato. Il risultato viene emesso attraverso lo standard output.

-n <numero-di-porta>

Permette di specificare una porta diversa rispetto a quella che viene indicata dal portmapper, per eseguire una chiamata RPC attraverso le opzioni -u e -t.

-b <programma> <versione>

Permette di eseguire una chiamata RPC circolare (broadcast) a tutti i nodi in grado di riceverla, utilizzando il protocollo UDP, per l'esecuzione della procedura 0 (NULLPROC) del programma e della versione specificati. Il risultato viene emesso attraverso lo standard output.

-d <programma> <versione>

L'utente root può utilizzare questa opzione per eliminare la registrazione del servizio RPC del programma e versione specificati.

Esempi

rpcinfo -p

Elenca tutti i servizi RPC registrati nell'elaboratore locale.

   program vers proto   port
    100000    2   tcp    111  rpcbind
    100000    2   udp    111  rpcbind
    100005    1   udp    844  mountd
    100005    1   tcp    846  mountd
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100004    2   udp    880  ypserv
    100004    1   udp    880  ypserv
    100004    2   tcp    883  ypserv
    100009    1   udp    889  yppasswdd

---------

rpcinfo -p weizen.mehl.dg

Elenca tutti i servizi RPC registrati nell'elaboratore weizen.mehl.dg.

rpcinfo -b mountd 1

Elenca tutti i nodi in grado di fornire il servizio mountd.

127.0.0.1 localhost.localdomain
192.168.1.1 dinkel.brot.dg
192.168.1.2 roggen.brot.dg

---------------------------

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]