I Panoramica
Il protocollo di rete fornisce tre funzionalità:
-
Stabilimento della connessione
-
Controllo di flusso
-
Riconnessione
La riconnessione è considerata separatamente dallo stabilimento della connessione in parte per la complessità della riconnessione e in parte perché non ho abbastanza esperienza con il protocollo per presentare questi concetti in modo integrato.
Stabilimento della connessione
Lo stabilimento della connessione funziona essenzialmente come in NWG/RFC #33. Il cambiamento principale è che una forma più generale di commutazione è fornita indipendentemente dallo stabilimento, cosicché lo stabilimento è semplificato dal non includere le procedure di commutazione.
Segue uno scenario approssimativo per lo stabilimento della connessione:
-
Il processo PA nell'host A prende il socket SA e richiede la connessione con il socket SB. Il processo PA realizza ciò tramite una chiamata di sistema.
-
Contemporaneamente a quanto sopra, il processo PB nell'host B prende il socket SB e richiede la connessione con il socket SA.
-
In risposta alla richiesta del processo PA, il programma di controllo della rete nell'host A (denominato NCPA) invia un comando Request-for-Connection (RFC) all'host B. NCPB nell'host B invia un comando simile all'host A. Non è implicato alcun ordinamento: NCPB può inviare il comando a NCPA prima o dopo aver ricevuto il comando da NCPA.
-
Sia NCPA sia NCPB sono consapevoli che la connessione è stabilita quando ciascuno ha ricevuto un comando RFC e ciascuno ha ricevuto il RFNM per quello che ha inviato. Essi notificano quindi, rispettivamente, ai processi PA e PB che la connessione è stabilita.
Una delle regole seguite è che o SA è un socket di invio e SB è un socket di ricezione, o viceversa. Questa condizione è talvolta espressa come "SA e SB devono essere una coppia invio/ricezione".
- Il processo mittente può ora inviare.
Controllo di flusso
Al fine di impedire che un processo mittente inondi un processo ricevente, è necessario che il processo ricevente sia in grado di arrestare il flusso(*). Il controllo di flusso è integrato nella gestione dei RFNM della rete. Quando un host ricevente desidera inibire il flusso su un particolare collegamento, l'host invia un messaggio speciale al proprio IMP che fa sì che il successivo RFNM su quel collegamento venga modificato. L'host mittente interpreta questo messaggio come un RFNM e come una richiesta di interrompere l'invio. Viene restituito un comando di controllo di conferma.
Quando l'host ricevente è pronto a ricevere di nuovo, invia un comando (RSM) che dice all'host mittente di riprendere l'invio.
Riconnessione
Per moltissime ragioni è desiderabile poter commutare una (o entrambe le) estremità di una connessione da un socket a un altro. A seconda delle restrizioni imposte al processo di commutazione, può essere facile o difficile da implementare. Per ottenere la massima generalità, presento qui uno schema per la riconnessione dinamica, il che significa che la riconnessione può avvenire anche dopo che il flusso è iniziato. Può risultare che nella maggior parte dei casi questo schema sia molto più costoso di quanto debba essere; tuttavia, si rivendicano i seguenti pregi:
-
Sono fornite tutte le varie forme di commutazione delle connessioni.
-
La riconnessione non introduce alcun sovraccarico nell'elaborazione dei messaggi inviati su una connessione, cioè l'intero costo è sostenuto nell'elaborazione del protocollo.
*BB&N sostiene che si dovrebbe fornire un buffering illimitato. È possibile che questa sarebbe una strategia appropriata: ma è estranea al mio modo di pensare, e ho basato il progetto del protocollo sul presupposto che venga fornito solo un piccolo buffer all'estremità di ricezione di ciascuna connessione.