I socket: definizione

In questa lezione esploreremo il concetto fondamentale di socket, elemento cardine per la comunicazione tra processi in rete all'interno delle architetture client-server.

Comprendere il funzionamento dei socket è essenziale per padroneggiare i servizi Web e le moderne infrastrutture di rete previste dal programma di TPSIT 5.

  • shape
  • shape


I socket: definizione

Chi scrive un'applicazione che deve comunicare in rete si trova davanti un problema che, a guardarlo da vicino, e enorme: bisognerebbe occuparsi di come i dati vengono spezzati in pacchetti, di come attraversano apparati diversi, di cosa fare se qualcosa si perde per strada. In pratica nessuno lo fa, perche il sistema operativo mette a disposizione uno strumento gia pronto che nasconde tutta quella complessita: il socket.

Nella lezione precedente abbiamo visto che per raggiungere un servizio servono un indirizzo, una porta e un protocollo. Il socket e il punto in cui queste informazioni diventano qualcosa che un programma puo effettivamente usare: e l'oggetto attraverso cui un'applicazione si affaccia sulla rete.

Che cos'e un socket

Un socket e il punto terminale di una comunicazione fra due programmi collegati in rete. Dal punto di vista di chi programma, e un oggetto messo a disposizione dal sistema operativo su cui si possono compiere due operazioni fondamentali: scrivere dati, che verranno inviati all'altro capo, e leggere dati, che sono arrivati dall'altro capo.

Questa somiglianza con la lettura e la scrittura di un file non e casuale ed e la ragione della fortuna dell'idea: il programmatore lavora con operazioni che conosce gia, e non deve sapere nulla di come i dati viaggino materialmente. Il termine inglese socket significa presa, come una presa elettrica o un connettore a muro: la presa non e il cavo e non e la corrente, e il punto di accesso normalizzato attraverso cui ci si collega a un'infrastruttura che sta altrove.

Come viene identificato un socket

Un socket e individuato dalla combinazione di due informazioni gia incontrate: l'indirizzo IP della macchina e il numero di porta del servizio. La coppia indirizzo-porta identifica un capo della comunicazione, non l'intero collegamento.

Per individuare una comunicazione completa servono infatti due socket: quello locale e quello remoto, cioe i due estremi che si stanno parlando. E questa coppia di estremi a distinguere una comunicazione da tutte le altre in corso nello stesso momento sulla stessa macchina, ed e il motivo per cui un computer puo avere molte conversazioni di rete simultanee senza confonderle fra loro.

Regola fondamentale: un socket e identificato dalla coppia indirizzo IP e numero di porta, e rappresenta un solo capo della comunicazione. Una comunicazione di rete e invece identificata dalla coppia dei due socket coinvolti, quello locale e quello remoto. Su uno smartphone possono essere attive contemporaneamente un'app di messaggistica, un lettore musicale in streaming e il browser, tutte collegate a server diversi attraverso la stessa connessione. Il sistema operativo riesce a consegnare a ciascuna app i dati che le competono perche ogni comunicazione e distinta dalla propria coppia di socket: stesso dispositivo, stessa rete, ma estremi diversi.

Il socket del server e quello del client

I due ruoli usano i socket in modo diverso, coerentemente con quanto visto sulle caratteristiche di client e server. Il server crea un socket e lo associa alla porta del proprio servizio, quella nota per convenzione, e lo mette in ascolto: quel socket non serve a scambiare dati con un interlocutore preciso, ma a ricevere i tentativi di contatto di chiunque arrivi.

Il client, invece, crea un socket per avviare il contatto verso l'indirizzo e la porta del server. La porta del client, dal suo lato, non deve essere nota a nessuno e viene normalmente assegnata dal sistema operativo al momento: e la ragione tecnica di una cosa che avevamo gia osservato, cioe che il client non ha bisogno di un indirizzo fisso e conosciuto, mentre il server si.

Il server didattico di una scuola tiene un socket in ascolto sulla porta del proprio servizio web. Quando venti studenti del laboratorio si collegano, quel socket in ascolto continua a fare solo il suo mestiere di accogliere nuovi arrivi, mentre per ciascuno studente esiste un capo di comunicazione distinto: il socket in ascolto e quelli che servono i singoli studenti hanno compiti diversi e non vanno confusi.

Famiglie di socket

Non tutti i socket si comportano allo stesso modo, perche possono appoggiarsi a servizi di trasporto diversi. Esistono socket orientati alla connessione, che stabiliscono prima un collegamento fra i due capi e poi trasmettono i dati come un flusso continuo, garantendo che arrivino tutti e nell'ordine giusto; ed esistono socket non orientati alla connessione, che inviano messaggi singoli e indipendenti, senza stabilire nulla in anticipo e senza quelle garanzie, ma con meno lavoro preliminare.

La scelta fra le due famiglie dipende da cosa serve all'applicazione: la posta elettronica o il trasferimento di un file non possono permettersi dati mancanti o fuori ordine, mentre altre applicazioni preferiscono la rapidita alla certezza assoluta della consegna. Le due modalita, con i protocolli concreti che le realizzano e i rispettivi vantaggi e svantaggi, saranno approfondite nelle attivita di laboratorio.

Errori comuni e limiti

L'errore piu comune e usare socket e porta come sinonimi. La porta e soltanto un numero, che serve a distinguere i servizi attivi su una macchina; il socket e l'estremo di comunicazione che quel numero lo utilizza, insieme all'indirizzo, e su cui il programma legge e scrive davvero. Detto altrimenti: la porta e un dato, il socket e uno strumento.

Il secondo equivoco riguarda il rapporto con i protocolli applicativi visti nella lezione precedente. Il socket trasporta byte e non sa che cosa significhino: e il protocollo applicativo a stabilire che quei byte formino, per esempio, una richiesta di pagina web. Un programma che usa un socket senza rispettare un protocollo condiviso riesce a inviare dati, ma l'altro capo non sapra cosa farsene.

Va infine sfatata l'idea che aprire un socket significhi creare un canale verso qualunque programma si desideri. Perche la comunicazione avvenga, dall'altra parte deve esserci un programma che ha creato un proprio socket sulla porta giusta e che sta ascoltando: senza quella condizione, il tentativo di contatto non trova nessuno e fallisce.

Sintesi applicativa

Il socket, in sintesi, e il punto in cui un programma si affaccia sulla rete: lo identifica una coppia indirizzo-porta, lo si usa leggendo e scrivendo come su un file, e serve al client per avviare il contatto e al server per restare in ascolto. Nella prossima lezione di questa unita vedremo cosa accade concretamente quando una comunicazione viene aperta, usata e infine chiusa.

Domanda di autoverifica: due studenti dello stesso laboratorio, collegati alla stessa rete, aprono nello stesso momento la stessa pagina dello stesso sito. Perche le due comunicazioni non si confondono, se indirizzo del server e porta del servizio sono identici in entrambi i casi?

Paragrafi letti

 

    
0%
       Salva
Approfondimenti su: 'I socket: definizione'

 


Statistics