Estratto del documento

I socket

Nei sistemi operativi moderni i servizi disponibili in rete si basano principalmente sul modello client/server.

Esistono tuttora molte applicazioni, soprattutto in Internet, che fanno uso di questo paradigma:

Telnet: se sulla nostra macchina si ha a disposizione il programma telnet (programma client), è possibile operare su un computer remoto come si opera su un computer locale. Questo è possibile se sulla macchina remota è presente un programma server in grado di esaudire le richieste del client telnet.

FTP: tramite un client ftp si possono copiare e cancellare file su un computer remoto, purché qui sia presente un server ftp.

Web: il browser è un cliente web, che richiede pagine web ai vari computer su cui è installato un web server, che esaudirà le richieste spedendo la pagina desiderata.

Tale architettura consente ai sistemi di condividere risorse e cooperare per il raggiungimento di un obiettivo.

Per quanto riguarda la programmazione di rete, esiste l'interfaccia delle socket che fornisce un'astrazione dei meccanismi di base per implementare programmi client/server. Una socket ("presa, spinotto") è un'estremità di comunicazione tra processi.

Il socket identifica le risorse che permettono di stabilire un canale di comunicazione con un altro processo (eventualmente su un'altra macchina).

Un socket è un canale di comunicazione bidirezionale.

Le socket sono state introdotte in Unix nel 1981.

La gestione (creazione, uso e rilascio) delle socket è interamente a carico dell'applicazione.

Il server crea un socket su una porta specifica ed attende che il client richieda una connessione.

Ogni socket ha due flussi, uno per l'input e l'altro per l'output.

Socket Connection

Input Stream

Output Stream

Server

Client

I partecipanti di una comunicazione tramite socket sono individuati da:

  • Indirizzo IP.
  • Numero di porta.

Appunti socket

Pag. 1/5

Le porte

Oltre a conoscere l'indirizzo IP dell'host a cui connettersi, bisogna disporre dell'informazione sufficiente per collegarsi al processo server corretto.

Per questo motivo esistono i numeri di porta (port number) che permettono di associare un servizio ad un ben determinato numero.

Quindi le connessioni avvengono sempre specificando un indirizzo IP ed un numero di porta.

I numeri da 0 a 1023 sono riservati per i servizi standard (e.g., FTP, http ecc.), mentre i numeri da 1024 a 65535 sono disponibili per i processi utente.

NB: su alcuni sistemi operativi sono necessari privilegi particolari per poter aprire porte con numeri inferiori a 1024.

Tipi di socket

Due tipi di trasporto via socket: UDP (veloce ma inaffidabile) e TCP.

Esistono due modi principali per comunicare in rete:

  • Il connection oriented model;
  • Il connectionless oriented model.

In corrispondenza ai due paradigmi di comunicazione precedenti abbiamo i seguenti tipi di socket:

Stream socket forniscono stream di dati affidabili, duplex, ordinati. Nel dominio Internet sono supportati dal protocollo TCP.

Socket a datagrammi (Datagram) trasferiscono messaggi di dimensione variabile, preservando i confini ma senza garantire ordine o arrivo dei pacchetti. Supportate nel dominio Internet dal protocollo UDP. Non instaurano una connessione tra client e server, e non verificano l'arrivo del dato o il reinvio. Hanno il vantaggio di trasferire velocemente i dati.

Le applicazioni che comunicano tramite socket possiedono un canale di comunicazione dedicato. Per comunicare, un client ed un server stabiliscono una connessione, trasmettono dati, quindi chiudono la connessione. Tutti i dati inviati sul canale sono ricevuti nello stesso ordine in cui sono stati inviati.

Le applicazioni che comunicano tramite datagrammi inviano e ricevono pacchetti di informazione completamente indipendenti tra loro. Queste applicazioni non dispongono e non necessitano di un canale di comunicazione punto-a-punto. La consegna dei datagrammi alla loro destinazione non è garantita, e neppure l'ordine del loro arrivo.

Su una macchina, un processo può aprire una server socket, ovvero una porta di ascolto, per consentire a processi in esecuzione su altre macchine (o, al limite, anche sulla stessa), connesse alla prima attraverso una rete di comunicazione con protocollo IP, di comunicare con il processo stesso. Ad un tale schema si fa riferimento con il

Appunti socket

Pag. 2/5

termine client/server. Infatti, il primo processo solitamente fornisce un servizio, al quale uno o più clienti operanti sulla stessa rete possono accedere. Per poter accedere ad un servizio attivato su una determinata porta, ovvero per poter comunicare con il processo che ha aperto la porta, è necessario specificare l'indirizzo IP della macchina su cui è in esecuzione il processo e la porta sulla quale questo è in ascolto.

Nella figura seguente è illustrato il caso in cui un client invia un messaggio ad un server attraverso il protocollo TCP/IP:

(Pacchetto TCP)

DST = 150.217.15.103:80

SRC = 149.12.45.201:65932

DATA = GET /

Server

80

150.217.15.103

Client

149.12.45.201 (Indirizzo IP)

65932 (Porta)

Il client inizia la comunicazione verso il server attivando una porta di comunicazione (socket) ed inviando un messaggio alla porta di ascolto sul server (server socket).

In particolare, in figura è illustrato l'avvio di una connessione da parte del client (indirizzo e porta della sorgente sono specificati nel pacchetto) verso una porta di ascolto del server. Il processo server si appoggia al sistema operativo per poter aprire una porta in ascolto, specificandone il numero. Tipicamente, per un dato servizio è prevista una porta predefinita. Nel caso dei web server, la porta predefinita è la porta numero 80, come nell'esempio. Anche il client si appoggia al suo sistema operativo per iniziare una comunicazione con un processo remoto. Il client richiede al sistema una connessione. A questo scopo viene aperta dal sistema una porta, il cui numero, però, non deve essere necessariamente fissato. Infatti, la comunicazione può comunque avvenire perché nel pacchetto inviato dal client al server è specificato, oltre all'indirizzo IP della macchina remota (in maniera tale da consentire il corretto instradamento del pacchetto sulla rete IP) e alla porta su cui gira il processo server, anche la porta aperta sulla macchina client appositamente per consentire questa comunicazione.

Il processo server in ascolto sulla porta specificata accetta la connessione entrante e apre una nuova socket per comunicare direttamente con il client. La server socket, infatti, ha il solo scopo di raccogliere le richieste di connessione entranti. Dalla socket così creata, il server legge la richiesta. Nell'esempio questa è rappresentata dalla stringa "GET /", che, secondo il protocollo HTTP utilizzato per il web, corrisponde alla richiesta della homepage. Il server, una volta interpretata la richiesta, provvede ad inviare la risposta al client. Il messaggio di risposta potrà essere composto da una sequenza di pacchetti TCP (la lunghezza di un pacchetto TCP, infatti, è limitata) indirizzati alla porta specificata dal client al momento della richiesta. Il client potrà quindi leggere i dati e processarli (nel caso di una pagina web, il browser provvederà a visualizzarla).

Appunti socket

Pag. 3/5

La risposta è illustrata nella seguente figura:

DST = 149.12.45.201:65932

SRC = 150.217.15.103:54321

DATA = <html><head>...

54321

Server

80

150.217.15.103

Client

149.12.45.201

65932

Una volta accettata una richiesta entrante sulla porta di ascolto, il processo server apre una nuova porta per la comunicazione diretta con il client.

Mentre la comunicazione tra server e client procede tra le porte appositamente aperte allo scopo, la porta di ascolto si pone in attesa di altre richieste. Nel caso di un'applicazione ad un singolo thread (o processo), il server non è in grado di soddisfare più di una richiesta per volta. In questo caso è solitamente prevista una coda che raccoglie le richieste entranti.

Al termine della comunicazione, le porte appositamente aperte da server e client devono essere chiuse. Infatti, le porte di comunicazione rappresentano una risorsa limitata per un sistema operativo, e debbono essere a questo restituite quando non sono più necessarie.

Comunicazione client-server

client 1

Socket

client 2

Socket

server

1 Server Socket

Socket

2

3

  1. Il ServerSocket del server si mette in attesa di una connessione.
  2. Il socket del client si collega al server socket.
  3. Viene creato un socket nel server e quindi stabilito un canale di comunicazione con il client.

Appunti socket

Pag. 4/5

Server multi threaded

Tipicamente, invece, un server dovrebbe essere in grado di accettare connessioni da diversi client e di dialogare con questi contemporaneamente:

  • Un thread esegue l'accept().
  • Appena riceve una connessione fa partire un altro thread che si occuperà di quella connessione.
  • E torna ad eseguire l'accept().
  • Ogni thread si occuperà di un solo client, senza interferire con gli altri.
  • La stessa istanza di ServerSocket può essere usata per ricevere connessioni differenti.

Appunti socket

Pag. 5/5

Anteprima
Vedrai una selezione di 1 pagina su 5
Socket Pag. 1
1 su 5
Sintesi

Programmazione di rete e socket

Per quanto riguarda la programmazione di rete, esiste l'interfaccia dei socket che permettono una comunicazione tra un client ed un server. Un socket (presa, spinotto) è un'estremità di comunicazione tra processi.

Il socket identifica le risorse che permettono di stabilire un canale di comunicazione con un altro processo (eventualmente un'altra macchina).

Un socket è un canale di comunicazione bidirezionale, è stato introdotto in Unix nel 1981. La gestione (creazione, uso e rilascio) delle socket è interamente a carico dell'applicazione. Il server crea un socket su una porta specifica ed attende che il client richieda una connessione.

Ogni socket ha due flussi, uno per l'input e l'altro per l'output.

I partecipanti di una comunicazione tramite socket sono individuati da:

  • Indirizzo IP.
  • Numero di porta.

Porta

Oltre a conoscere l'indirizzo IP dell'host a cui connettersi, bisogna disporre dell'informazione sufficiente per collegarsi al processo server corretto.

Per questo motivo esistono i numeri di porta (port number) che permettono di associare un servizio ad un ben determinato numero.

Quindi le connessioni avvengono sempre specificando un indirizzo IP ed un numero di porta.

I numeri da 0 a 1023 sono riservati per i servizi standard (e.g., FTP, HTTP ecc.), mentre i numeri da 1024 a 65535 sono disponibili per i processi utente.

D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi