PROTOCOLLI sotto l’aspetto della portabilità

Protocolli

I messaggi che vengono scambiati tra due o più processi costituiscono un protocollo. I protocolli si manifestano praticamente in infinite situazioni. Se abbiamo macchine diverse che comunicano attraverso una rete , i dati inviati attraverso il collegamento formano un protocollo.

Se una macchina cambia la forma della sequenza di dati, l’altra macchina non comprenderà più le trasmissioni. Cosa che peraltro accade spesso anche tra esseri umani, poichè anche il linguaggio è una tecnologia. Quando i due processi avvengono sulla medesima macchina vale lo stesso discorso. Non c’è alcun conduttore che separa i processi, ma la comunicazione tra di essi è sempre un protocollo. Anche quando si scrive un file su disco, abbiamo  un applicazione meno scontata di un protocollo. Infatti qualsiasi programma che scrive dati su disco da la facoltà per un altro programma di leggerli successivamente forma un protocollo. Il formato dei dati o del file deve essere infatti concordato tra i programmi di lettura/scrittura. Anche se i file su disco non sono generalmente considerati “protocolli” si possono applicare i medesimi ragionamenti ad essi. Come all’interconnessione in rete ed alla comunicazione tra processi , (Inter Process Communication : IPC) per cui si possono trattare allo stesso modo.

Primitive

Una questione simile riguarda le primitive del sistema operativo usate per IPC. (Un operazione primitiva, o più brevemente una primitiva, è una delle operazioni di base messe a disposizione da un linguaggio di programmazione. Ogni istruzione primitiva ha una sintassi e una semantica. Le primitive costituiscono i blocchi base con i quali un programmatore, seguendo le regole della grammatica del linguaggio, può costruire un programma.)

Pipe

I sistemi UNIX di tipo più vecchio non dispongono di alcun meccanismo generale di IPC. Le pipe e in misura minore i segnali , sono trasportabili ma la loro funzionalità è limitata.

(Nei sistemi operativi una pipe è uno degli strumenti disponibili per far comunicare tra loro dei processi. Le pipe, diversamente dai socket, offrono un canale di comunicazione monodirezionale, e quindi occorre impiegarne due per ottenere una comunicazione bidirezionale. Nei sistemi operativi Unix e Unix-like una pipe è accessibile tramite una coppia di descrittori di file, uno per scrivere dati e l’altro per leggerli. Un processo crea una pipe tramite la chiamata di sistema pipe, che restituisce i due descrittori di file)

Spesso è necessario comunicare attraverso file su disco. Le soluzioni d’interconnessione in rete, come i Socket di Berkeley e il TLI di System V, sono meno trasportabili. In generale se le esigenze della vostra IPC possono essere soddisfatte con l’uso di una pipe, si otterrà un codice più trasportabile per i protocolli.

Quando si discute di un protocollo, si dovrebbero affrontare alcune questioni tra cui:

  1. la dipendenza dall’hardware
  2. la compatibilità verso l’alto
  3. la documentazione
  4. le prestazioni.

In genere tali aspetti sono considerati parte integrante del layer (strato) di presentazione dell ‘ OSI, ma in realtà sono applicabili a tutti gli strati e le interfacce dei processi.

Socket

In informatica, nei sistemi operativi moderni, con il termine socket si indica un’astrazione software progettata per poter utilizzare delle API standard e condivise per la trasmissione e la ricezione di dati attraverso una rete oppure come meccanismo di IPC. È il punto in cui il codice applicativo di un processo accede al canale di comunicazione per mezzo di una porta, ottenendo una comunicazione tra processi che lavorano su due macchine fisicamente separate. Dal punto di vista di un programmatore un socket è un particolare oggetto sul quale leggere e scrivere i dati da trasmettere o ricevere.

Tipi di socket

Ci sono due tipi fondamentali di socket:

  • i socket tradizionali su protocollo IP, usati in molti sistemi operativi per le comunicazioni attraverso un protocollo di trasporto (quali TCP o UDP);
  • gli Unix domain socket (detti anche socket locali o socket in dominio Unix), usati nei sistemi operativi POSIX per le comunicazioni tra processi residenti sullo stesso computer.

A sua volta esistono due tipi di socket su IP:

  • listen, che rappresentano la possibilità di ricevere nuove connessioni. Un socket di questo tipo è identificato dalla terna protocollo di trasporto, indirizzo IP del computer, numero di porta;
  • established, che rappresentano una particolare connessione attiva. Un socket di questo tipo è identificato dalla 5-tupla protocollo di trasporto, indirizzo IP sorgente, indirizzo IP destinazione, numero di porta sorgente, numero di porta destinazione.

I socket sono stati introdotti nel 1983 in BSD e poi sono stati ripresi da praticamente tutti gli altri sistemi operativi. Per questo motivo solitamente le funzioni di programmazione dei socket vengono chiamate Berkeley socket API.

Per aprire un socket da DOS o da shell testuale Unix si può utilizzare il comando telnet