Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni56 pagine

Socket Java 01

Il documento descrive le socket come oggetti software utilizzati per lo scambio di dati tra applicazioni tramite protocolli TCP e UDP. Viene spiegata la differenza tra socket orientate alla connessione, che richiedono una fase di handshake, e socket senza connessione, che utilizzano UDP per comunicare senza negoziazione. Infine, si introduce il concetto di multicast, che permette l'invio efficiente di dati a più destinatari attraverso un gruppo multicast.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni56 pagine

Socket Java 01

Il documento descrive le socket come oggetti software utilizzati per lo scambio di dati tra applicazioni tramite protocolli TCP e UDP. Viene spiegata la differenza tra socket orientate alla connessione, che richiedono una fase di handshake, e socket senza connessione, che utilizzano UDP per comunicare senza negoziazione. Infine, si introduce il concetto di multicast, che permette l'invio efficiente di dati a più destinatari attraverso un gruppo multicast.
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 56

TCP-UDP

SOCKET
Corso rapido
Cos’è una
SOCKET?
Una socket è un oggetto software
che consente lo scambio di dati tra
applicazioni usando come protocolli
di comunicazione TCP e UDP
Scenario 1

Processo   Socket   Socket  


Network  
Client   Server  
Le socket sono usate per far comunicare applicazioni
diverse su macchine remote (applicazioni distribuite)
Scenario 2

Processo 1   Socket X   Socket Y   Processo 2  

Le socket sono usate per far comunicare applicazioni


diverse sulla stessa macchina (Inter Process Comunication)
Nello stack TCP/IP le socket si
collocano al livello di trasporto
Applicazione
Trasporto
Rete
Collegamento
Fisico
Sulla stessa macchina possono essere
attivi più socket in contemporanea

App   App  

.  .  .    
Socket   Socket   Socket   Socket   Socket   Socket  
Come possiamo
distinguerle?
Ogni socket possiede un identificativo
che la distingue, il numero di porta

App   App  

.  .  .    
Socket Socket Socket Socket Socket Socket
3000   4000   5000   6000   7000   8000  
Il numero di porta è un intero a 16 bit
Porte Denominazione Descrizione

Utilizzate da applicazioni server


0 … 1023 Well-Known Ports
ben note (HTTP, FTP, SMTP, …)
Utilizzate da alcuni servizi e dalle
1024 … 49151 Registered Ports
socket client

49152 … 65535 Dynamic ports Utilizzabili liberamente

Per un elenco più dettagliato


http://www.iana.org/assignments/port-numbers
Tipologie di
socket
Esistono due tipologie di socket

CONNECTION ORIENTED

CONNECTIONLESS
CONNECTION ORIENTED

Una socket orientata alla connessione


utilizza TCP è necessità di una fase di
negoziazione (handshaking) prima di
poter essere utilizzata per comunicare
CONNECTION ORIENTED
Handshaking (1/8)

Socket Processo
50000 Server
 
Processo
Client  
Network  

Una delle applicazioni (che chiameremo server) crea una socket speciale,
che si porrà in ascolto di richieste di connessione
CONNECTION ORIENTED
Handshaking (2/8)

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
 

L’altra applicazione (che chiameremo client) crea una socket client


utilizzando un numero di porta superiore a 1024
CONNECTION ORIENTED
Handshaking (3/8)

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
 

Attraverso la socket il processo client invia una richiesta di connessione


alla socket del server che si suppone sia in ascolto
CONNECTION ORIENTED
Handshaking (4/8)

192.168.1.100
Porta 50000  

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
 

Per fare una richiesta di connessione la socket del client deve conoscere
l’indirizzo IP della macchina server e la porta della socket in ascolto
CONNECTION ORIENTED
Handshaking (5/8)

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
  Socket
30000
 

Quando riceve la richiesta di connessione, il server crea una nuova socket


che invierà un riscontro (acknowledge) al client
CONNECTION ORIENTED
Handshaking (6/8)

192.168.1.200
Porta 20000  
Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
  Socket
30000
 

Per inviare l’acknowledge al client, anche in questo caso si dovranno


specificare indirizzo IP e numero porta della socket mittente
CONNECTION ORIENTED
Handshaking (7/8)

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
  Socket
30000
 

Alla fine della negoziazione, la connessione è stabilita e le due


applicazioni possono comunicare tra loro attraverso le socket
CONNECTION ORIENTED
Handshaking (8/8)

Socket Processo
50000 Server
 
Processo
Client  
Socket Network  
20000
  Socket
30000
 

La socket iniziale usata dal server potrà essere distrutta o riutilizzata a


seconda che il server debba o meno gestire più client (multi-client)
CONNECTION ORIENTED
Una volta stabilita la connessione il trasferimento dei
dati avviene attraverso due stream affidabili

Output Input
Stream
…01010101011010101… Stream
   

Input Output
…01010101011010101…
Stream Stream
   
[…JAVA…]
CONNECTIONLESS

Una socket senza connessione utilizza


UDP e non necessità di handshake prima
di poter essere utilizzata per comunicare
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Ognuno dei processi, indipendentemente, crea una sua socket pronta per
inviare e ricevere dati senza negoziare una connessione
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Quando desidera comunicare un processo crea un datagramma, un


blocco di dati etichettato con IP e Porta della socket destinazione
CONNECTIONLESS

From 10.0.0.1
Port 50001

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Il datagramma viene inoltre marcato con l’indirizzo IP e la porta della


socket mittente
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Attraverso la socket il datagramma viene inviato in rete, nella speranza


che raggiunga la destinazione!
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Condizione necessaria affinché il datagramma venga accettato è anche


che la socket destinataria sia in modalità ascolto (listening)
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Se il datagramma arriva a destinazione, esiste il rischio che sia corrotto o


in un ordine diverso da quello di invio
CONNECTIONLESS

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

In caso tutto sia andato bene (in realtà succede molto spesso), il
datagramma può essere elaborato dal processo destinatario
CONNECTIONLESS

From 10.0.0.1
Port 50001

Processo Socket Socket Processo


Client   Porta 50001 Network   Porta 50002 Client  
   
10.0.0.1 10.0.0.2

Per rispondere, si ripete il procedimento. In questo caso IP e Porta della


socket mittente vengono recuperati dal datagramma appena ricevuto
CONNECTIONLESS

Questo tipo di socket, in virtù


dell’assenza di una connessione,
implementa una comunicazione molti a
molti
CONNECTIONLESS

10.0.0.2

x.x.x.x
10.0.0.1

10.0.0.3

Un processo può utilizzare la stessa socket per inviare dai datagrammi a


molteplici destinatari differenti
CONNECTIONLESS

10.0.0.2

x.x.x.x
10.0.0.1

10.0.0.3

Analogamente, una socket può essere utilizzata per ricevere pacchetti da


una molteplicità di sorgenti differenti
[ …JAVA… ]
Socket
MULTICAST
Supponiamo che un’applicazione
voglia inviare lo stesso messaggio a
più destinatari interessati
INVIO UNO A MOLTI

Le tipologie di socket studiate finora possono risolvere il problema


inviando lo stesso dato più volte (quanti sono i destinatari)
Al crescere del numero dei
destinatari questo approccio tende
a rivelarsi estremamente inefficiente
Il protocollo IP prevede un
meccanismo di MULTICAST che
ottimizza le comunicazioni di tipo
uno a molti
Come funziona?
Prima fase

Group subscription
GRUPPI MULTICAST

Gruppo Multicast
239.255.1.1

I client che desiderano ricevere le informazioni da un servizio devono


utilizzare una socket particolare per iscriversi ad un gruppo multicast
Un gruppo multicast è identificato da
un particolare indirizzo IP compreso in
un range ben preciso
Rete  224.0.0.0/4  
da   224.0.0.0   a   239.255.255.255  

Totale  268.435.456  gruppi  


L’Internet Assigned Numbers Authority (IANA) è
responsabile di assegnare gli indirizzi multicast alle
società/applicazioni che ne fanno richiesta

Per approfondire
http://en.wikipedia.org/wiki/Multicast_address
http://tools.ietf.org/html/rfc5771
http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
Per esperimenti all’interno di una rete locale
non sarà necessario fare alcuna richiesta

Possiamo usare indirizzi allocati per uso


locale
Rete  239.255.0.0/16  
da   239.255.0.0   A   239.255.255.255  

Totale  65536  gruppi  


Una volta iscritta ad un gruppo
multicast, una socket riceverà tutti i
pacchetti destinati al gruppo
INVIO UNO A MOLTI

Gruppo Multicast
239.255.1.1

I fornitori di servizi si limitano ad inviare i dati una volta sola, delegando al


meccanismo del multicast la moltiplicazione dei pacchetti
Questa magia della moltiplicazione
dei pacchetti avviene nei dispositivi
di intradamento e switching
Un pacchetto destinato ad un gruppo multicast che
si presenta sull’interfaccia di ingresso di un router
non viene trattato come al solito
Normalmente il protocollo di routing cercherebbe di
instradare il pacchetto lungo il percorso più breve
verso la destinazione finale
Nel nostro caso però il meccanismo del multicast
suggerisce al router la possibilità di propagare il
pacchetto su tutte o quasi le connessioni in uscita
In realtà il meccanismo è più
complicato: per evitare il flooding
della rete si cerca di moltiplicare e
propagare i pacchetti solo
attraverso alcuni route
[ . . .JAVA… ]
FINE

Potrebbero piacerti anche