RPC e' il fondamento di molti applicativi distribuiti complessi come NFS (Network File System), ed e' di base a molti tentativi sperimentali di generazione di sistemi operativi distribuiti.
Vi e' una fondamentale differenza tra procedure locali e remote.
In una procedura locale, il processo chiamante esegue la procedura nel suo proprio spazio di indirizzamento.
In una procedura remota il client ed il server sono due processi separati e non solitamente sullo stesso computer. I due processi comunicano tramite' procedure stub una per il client e una per il server. Questi stub sono segmenti di programma contenenti funzioni che mappano chiamate a procedure locali in una serie di chiamate a funzioni RPC di rete. La libreria RPC gestisce la comunicazione tra i due processi.
RPC usa un modello di comunicazione a richiesta e responso. La procedura client invia richieste alla procedura server che ritorna responsi.
Uno stub e' una interfaccia di comunicazione che implementa il protocollo RPC e specifica come i messaggi vengono costruiti ed interscambiati. Lo 'stub' viene tipicamente generato da un compilatore di protocollo e quindi linkato insieme ai programmi client e server.
I processi client e server devono essere in grado di comunicare usando una rappresentazione dei dati indipendenti dall'architettura del computer su cui si trovano. Viene usato un unico formato canonico per tutti i tipi di dati, chiamato External Data Representation (XDR). E' responsabilita' degli 'stub' client e server tradurre i propri dati da e in questo formato. Spesso i compilatori di protocollo possono anche servire a determinare quali strutture dati debbano venire tradotte.
Il sistema di RPC e' inserito all'interno del modello OSI di riferimento. L'applicativo utente si trova al livello piu' alto ed usa in modo trasparente la libreria XDR per comunicare con la libreria RPC. Questa puo' interfacciare sia il protocollo TCP che UDP.
Esistono versioni di RPC che sono implementate da librerie Transport Independent (TIRPC) in modo da tentare di isolare l'applicativo dal trasporto usato per massimizzarne la portabilita'.
In sistemi UNIX, basati sui socket, i servizi di default di rete sono descritti in un file di configurazione chiamato /etc/services.
Un servizio, identificato dal porto a cui ascolta, e' un demone in attesa di una richiesta di connessione. Un porto e' un canale di comunicazione logico. Un servizio di rete detto il portmapper ha la responsabilita' di mappare i servizi ai porti.
Il portmapper su tutti i sistemi e' sempre egli stesso identificato dal porto ben conosciuto numero 111.
I passi necessari perche' un client RPC contatti il server sono:
Il 'portmapper' funge in questo modo da mediatore di servizio, tra il server e i client; inoltre fa' si che non vi sia piu' bisogno di aggiornare il file /etc/services su tutte le macchine che partecipano a nuovi servizi offerti.
Il client invia una richiesta sulla rete. Il demone di servizio e' in ascolto costante in attesa di richieste. Quando viene ricevuta una richiesta questa invoca il servizio opportuno che esegue una procedura appropriata. Al ritorno della procedura il responso di questa viene ritornato al client tramite la rete.