Chiamate di sistema e comandi di controllo
Qui delineiamo i meccanismi per stabilire, commutare e interrompere una connessione. Come osservato sopra, il NCP interagisce con i processi utente tramite chiamate di sistema e con gli altri NCP tramite comandi di controllo. Cominciamo quindi con una descrizione parziale delle chiamate di sistema e dei comandi di controllo.
Le chiamate di sistema variano da un sistema operativo all'altro, perciò la descrizione seguente è solo indicativa. Supponiamo qui che un processo abbia diversi percorsi di ingresso-uscita, che chiameremo porte. Ogni porta può essere collegata a un dispositivo di I/O sequenziale e, mentre è collegata, trasmette informazioni in una sola direzione. Supponiamo inoltre che il processo sia bloccato (dismesso, sospeso) mentre la trasmissione procede. Quella che segue è la lista delle chiamate di sistema:
Init <port>, <AEN 1>, <AEN 2>, <foreign socket>
where <port> is part of the process issuing the Init
_
<AEN 1> |
and +- are 8-bit AEN's (see Figure 2)
<AEN 2> |
_|
Il primo AEN viene usato per avviare la connessione; il secondo viene usato mentre la connessione esiste.
<foreign socket> è il nome di socket di 40 bit dell'estremità remota della connessione.
I bit di ordine inferiore di <AEN 1> e <AEN 2> devono concordare, e devono essere il complemento del bit di ordine inferiore di <foreign socket>.
Il NCP concatena <AEN 1> e <AEN 2> ciascuno con il numero di utente del processo e con il numero di HOST, per formare socket di 40 bit. Invia poi un comando di controllo Request for Connection (RFC) al NCP remoto. Quando il NCP remoto risponde positivamente, la connessione è stabilita e il processo viene sbloccato. Se il NCP remoto risponde negativamente, il NCP locale sblocca il processo richiedente, ma lo informa che la chiamata di sistema è fallita.
Listen <port>, <AEN 1>
dove <port> e <AEN 1> sono come sopra. Il NCP conserva le porte e <AEN 1> e blocca il processo. Quando arriva un comando di controllo RFC che nomina il socket locale, il processo viene sbloccato e avvisato che un processo remoto lo sta chiamando.
Accept <AEN 2>
Dopo che una Listen è stata soddisfatta, il processo può rifiutare la chiamata oppure accettarla e spostarla su un altro socket. Per accettare la chiamata, il processo esegue la chiamata di sistema Accept. Il NCP invia allora indietro un comando di controllo RFC.
Close <port>
Dopo aver stabilito una connessione, un processo esegue una Close per interrompere la connessione. La Close viene eseguita anche dopo una Listen per rifiutare una chiamata.
Transmit <port>, <addr>
Se <port> è collegata a un socket di invio, <addr> punta a un messaggio da inviare. Questo messaggio è preceduto dalla sua lunghezza in bit.
Se <port> è collegata a un socket di ricezione, un messaggio viene memorizzato in <addr>. La lunghezza del messaggio viene memorizzata per prima.
Comandi di controllo
È stato definito un vocabolario di comandi di controllo per la comunicazione tra Network Control Program. Ogni comando di controllo è costituito da un codice operativo di 8 bit che ne indica la funzione, seguito da alcuni parametri. Il numero e il formato dei parametri sono fissi per ogni codice operativo. Una sequenza di comandi di controllo destinata a un particolare host può essere raggruppata in un unico messaggio di controllo.
RFC <my socket 1>, <my socket 2>.
<your socket>, (<link>)
Questo comando viene inviato perché un processo ha eseguito una chiamata di sistema Init o una chiamata di sistema Accept. Il collegamento è assegnato dal destinatario previsto, perciò è omesso se <my socket 1> è un socket di invio.
C'è un netto vantaggio nell'usare gli stessi comandi sia per avviare una connessione (Init) sia per accettare una chiamata (Accept). Se il comando di risposta fosse diverso dal comando di avvio, due processi potrebbero chiamarsi a vicenda e bloccarsi in attesa che l'altro risponda. Con questo schema non si verifica alcuno stallo e si ottiene un modo più compatto per collegare un insieme di processi.
CLS <my socket>, <your socket>
La connessione specificata viene terminata
CEASE <link>
Quando il processo ricevente non consuma il proprio input alla velocità con cui arriva, lo spazio di buffer nell'host ricevente viene usato per accodare i messaggi in attesa. Poiché in genere è disponibile uno spazio limitato, l'host ricevente può aver bisogno di inibire l'host mittente dall'inviare altri messaggi sulla connessione problematica. Quando l'host mittente riceve questo comando, può bloccare il processo che genera i messaggi.
RESUME <link>
Questo comando viene inviato anch'esso dall'host ricevente all'host mittente e annulla un precedente CEASE.