Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un...

51
Network Programming TIGA 1 Network Programming Java Programming Language

Transcript of Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un...

Page 1: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 1

Network Programming

Java Programming Language

Page 2: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Modello a scambio di messaggi

•  I processi interagiscono attraverso una rete di comunicazione

•  I processi non condividono alcuna risorsa – Comunicazione ma non competizione

•  Due processi comunicano attraverso un canale di comunicazione – Operazioni di send e receive

Network Programming TIGA 2

Page 3: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 3

Canale di comunicazione

P Q

canale di comunicazione

Page 4: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 4

Naming

P Q

canale di comunicazione

send(Q, msg) receive(P, msg)

Denominazione simmetrica Il mittente nomina esplicitamente il destinatario e viceversa

Page 5: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 5

Naming

P Q

canale di comunicazione

send(Q, msg) proc = receive(msg)

Denominazione asimmetrica Il mittente nomina esplicitamente il destinatario ma questi non nomina i processi da cui vuole ricevere

Page 6: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 6

Naming

P Q

canale di comunicazione

MB

MB

Denominazione indiretta I messaggi sono inviati a delle mailbox (porte) e da questi ricevuti

Page 7: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Modalità di comunicazione

•  Canale uno-a-uno •  Canale molti-a-uno •  Canale uno-a-molti

Network Programming TIGA 7

Page 8: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 8

Send asincrona

P1

P2 S2,n S2,m

receive

send

•  Efficienza e semplicità implementativa •  Carenza espressiva •  Problema dei buffer limitati

Page 9: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 9

Send asincrona e buffer limitati

P Q

canale di comunicazione

coda msg coda msg

Gestione dei buffer limitati: soluzioni alternative: •  La send può bloccarsi •  Il supporto runtime solleva una eccezione

Page 10: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 10

Send asincrona: blocco critico nascosto

P1 … send … receive …

P2 … send … receive …

P3 … send … receive …

Il programma produce un blocco critico se tutti i buffer sono pieni

Page 11: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 11

Send sincrona

P1

P2 S2,n S2,n

P2

P2 receive

send

attesa •  Maggiore livello di astrazione

•  È un punto di sincronizzazione •  Buffer limitati (non ha bisogno di meccanismi

nascosti) •  Può essere realizzata con le primitive asincrone

•  Ridotto parallelismo

Page 12: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 12

Send tipo chiamata di procedura remota

S

C P2

P2

client = receive(richiesta)

risposta = DoOperation(S, richiesta)

send(client, risposta)

attesa

elaborazione risposta

•  Livello di astrazione ancora più elevato •  Parallelismo ancora più ridotto

Page 13: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 13

Receive bloccante

P1

P2 P2

P2

receive

send

attesa

•  Punto di sincronizzazione •  Sono necessari meccanismi aggiuntivi per ricevere da

canali alternativi

Page 14: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 14

Receive bloccante

chan1

chan2

o receive from chan1 o receive from chan2

messaggio disponibile

Si vuole ricevere da chan1 o da chan2

Page 15: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 15

Receive non-bloccante

chan1

chan2

… ricevuto = false; while (!ricevuto) {

msg = receive(chan1); if (msg != null) ricevuto = true; else { msg = receive(chan2); if (msg != null) ricevuto = true; }

} …

messaggio disponibile cicli di attesa attiva

Si vuole ricevere da chan1 o da chan2

Page 16: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 16

Protocolli Internet

§  Un processo è definito da un programma Java eseguibile

§  Java fornisce API per l’utilizzo dei protocolli

• UDP (comunicazione inaffidabile)

• TCP (comunicazione affidabile)

attraverso l’astrazione di socket

§  La modalità di naming è asimmetrica, indiretta

§  La modalità di comunicazione è molti-a-uno

§  La send è asincrona e la receive è bloccante

Page 17: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 17

Socket

client server

port (16 bit) socket

server

Indirizzo IP (32 bit)

§  Il mittente specifica il destinatario per mezzo della coppia (IPricevente, Portaricevente)

§ Un canale di comunicazione è bidirezionale ed è specificato da (Ipmittente, Portamittente, IPricevente, Portaricevente)

§ Un processo utilizza un socket per inviare e ricevere messaggi

§ Un socket deve essere “legato” ad una porta

Page 18: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Indirizzi e nomi

Network Programming TIGA 18

Indirizzo (131.114.9.137)

Nome (cirano.iet.unipi.it) DNS

Page 19: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 19

La classe InetAddress

Java utilizza la classe InetAddress per rappresentare un indirizzo di rete package java.net public static InetAddress getByName()

throws UnknownHostException ESEMPI InetAddress unHost = InetAddress.getByName(“131.114.9.137”) InetAddress unHost = InetAddress.getByName(“cirano.iet.unipi.it”) InetAddress unHost = InetAddress.getByName(localhost) InetAddress unHost = InetAddress.getByName(null)

Page 20: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 20

Rilocazione di un servizio

client server

server

IP1

IP2

DNS

www.servizio.com nome indirizzo IP

Page 21: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 21

La programmazione di rete con Java

Le API per TCP

Page 22: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 22

TCP

§ TCP fornisce un servizio di comunicazione punto-punto, affidabile, orientato alla connessione che garantisce che

§ i messaggi sono consegnati al destinatario nonostante un numero “ragionevole” di pacchetti scartati o persi;

§ i messaggi consegnati al destinatario non sono nè alterati, né duplicati né fuori sequenza

Page 23: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 23

Le classi Socket e ServerSocket

client server

Socket ServerSocket

Socket Il cliente si connette ad una porta del server tramite un Socket Il server accetta connessioni su di un ServerSocket Una connessione è terminata da due Socket Quando si instaura la connessione, ad ogni Socket è associato un flusso di ingresso ed uno di uscita Gli oggetti trasmessi sulla connessione sono serializzati

Richiesta di connessione

Connessione

Page 24: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 24

ServerSocket e Socket

§  La classe ServerSocket è utilizzata dal server per creare un socket su cui accettare richieste di connessione

•  L’operazione accept ascolta richieste di connessione. •  L’operazione ritorna un Socket se un cliente ha fatto una

richiesta di connessione oppure blocca l’esecuzione del server in attesa di tale richiesta

§  La classe Socket descrive i punti terminali (socket) di una connessione tra due macchine

•  Ogni socket è associato a due stream •  I metodi getInputStream ed getOutputStream ritornano i flussi

di tipo InputStream e OutputStream, rispettivamente, associati con il socket

Page 25: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 25

Esempio §  SimpleServer

§  attende che si stabilisca una connessione con SimpleClient

§  ritorna a SimpleClient tutto ciò che riceve sulla connessione

§  chiude la connessione e termina non appena riceve la stringa “END”

§  SimpleClient §  si connette a SimpleServer §  gli invia stringhe attraverso la connessione §  riceve l’eco delle stringhe attraverso la connessione §  invia la stringa “END” e termina

Page 26: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

26

Multi-threaded server 1.   import java.io.*; 2.   import java.net.*; 3.   public class Server { 4.   static final int PORT = 8080; 5.   public static void main(String[] args) throws IOException { 6.   ServerSocket s = new ServerSocket(PORT); 7.   try { 8.   while ( true ) { 9.   Socket socket = s.accept(); 10.   try { 11.   new ServerThread(socket); // conn <-> thread 12.   } catch(IOException e) { 13.   socket.close(); 14.   } 15.   } 16.   } finally { 17.   s.close(); 18.   } 19.   } 20.  }

Page 27: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

27

Multi-threaded server 1. class ServerThread extends Thread { 2. 3. private Socket socket; 4. private BufferedReader in; 5. private PrintWriter out; 6. 7. 8. public ServerThread(Socket s) throws IOException { 9.   socket = s; 10.   in = new BufferedReader(new InputStreamReader( 11. socket.getInputStream())); 12. out =new PrintWriter(new BufferedWriter( 13. new OutputStreamWriter(socket.getOutputStream())), 14. true); 15. start(); 16. } // continua

Page 28: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

28

Multi-threaded server 1. public void run() { 2. try { 3. while (true) { 4.   String str=in.readLine(); 5.   if(str.equals("END")) break; 6. System.out.println("Echo:" + str); 7. out.println(str); 8. } 9. }catch(IOException e){ 10. }finally{ 11. try{ 12. socket.close(); 13. }catch(IOException e){} 14. } 15. } // closes run 16. } // closes class

Page 29: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 29

Metodi bloccanti

§  Il costruttore Socket() è bloccante in attesa che sia stabilita la connessione al server

§  Il metodo connect() è bloccante in attesa che sia stabilita una connessione

§  Il metodo read sull’InputStream associato ad un socket è bloccante in attesa che ci siano dati disponibili

Page 30: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 30

Impostazione dei timeout

•  Timeout

•  Una variabile int maggiore o uguale a zero

•  Un valore maggiore di zero specifica un intervallo di attesa in millisecondi

•  Il valore zero specifica un intervallo di attesa indefinito

Page 31: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 31

Timeout sulla connessione

•  Timeout sulla connessione

connessione senza timeout

Socket s = new Socket(host, port); // bloccante

connessione con timeout Socket s = new Socket(); // socket non connesso s.connect(host, port, timeout);

•  Se il timeout scatta prima della connessione viene lanciato un SocketTimeoutException

Page 32: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 32

Timeout sulla lettura Socket s = new Socket(host, port); int timeout = 10; … s.setSoTimeout(timeout); … BufferedReader in = new BufferedReader("

" " " " " "new InputStreamReader("" " " " " " "s.getInputStream()));"

try { String line; while ( (line = in.readLine()) != null ) { <elaborazione linea>; }

} catch(SocketTimeoutException e) { <gestione dell’eccezione>;

} catch (IOException e) { <gestione dell’eccezione>;

} …

Page 33: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 33

Half-close § Quando un cliente invia un messaggio al servitore, questo deve capire

quando il messaggio è finito. Per questo motivo,

§  molti protocolli Internet sono orientati alla linea (ad esempio SMTP)

§  altri protocolli utilizzano messaggi con il formato (header, payload) dove header specifica anche la dimensione dei dati

§ Chiudere il socket come si farebbe con un file non è consigliabile perchè in tal modo si abbatte la connessione

§ Si può utilizzare la tecnica half-close §  si chiude il flusso di uscita (OutputStream) associato al socket per

indicare al server la fine dei dati, ma §  si lascia aperto il flusso InputStream per leggere la risposta del

server

§ Questa tecnica è adeguata per servizi “one shot” o “botta e risposta” (ad esempio HTTP)

Page 34: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 34

La programmazione di rete con Java

Le API per UDP

Page 35: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 35

UDP: concetti generali §  UDP fornisce un servizio di comunicazione inaffidabile senza

connessione, cioè un datagram §  può non arrivare (omission failure) §  arrivare duplicato oppure fuori sequenza

§  Un datagram ha una dimensione massima di 64Kb e tipica di 8Kb

§  Le primitive di comunicazione sono §  send asincrona §  receive bloccante

§  Il meccanismo di denominazione è uno-a-molti, asimmetrico indiretto (receive from any)

§  UDP si utilizza in servizi che possono tollerare degli omission failures occasionali e non vogliono sopportare l’overhead imposto da TCP

Page 36: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 36

UDP: concetti generali § Un processo che vuole inviare o ricevere un datagram

deve prima creare un socket e “legarlo” (bind) ad una porta

§  Il server “lega” (bind) il socket ad una porta specifica, il cliente lega il socket ad una qualunque porta libera

§ La primitiva receive ritorna l’indirizzo IP e la porta del mittente

§  I datagrammi indirizzati a porte non “legate” (bound) ad alcun processo sono scartati

Page 37: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 37

La classe DatagramPacket § La classe DatagramPacket descrive un datagramma UDP

•  DatagramPacket(byte[] buf, int length) costruisce un DatagramPacket per ricevere pacchetti di lunghezza length

•  DatagramPacket(byte[] buf, int length, InetAddress address, int port) costruisce un DatagramPacket per inviare pacchetti di lunghezza length alla porta port dell’host address

payload lenght Internet addres port number

struttura di un datagram

array di byte

Page 38: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 38

Metodi della classe DatagramPacket

InetAddress getAddress() ritorna l’indirizzo IP dell’elaboratore a cui questo messaggio è stato inviato o da cui è stato ricevuto" "byte[] getData() ritorna i dati contenuti nel buffer di questo messaggio""int getLength() ritorna la lunghezza (in byte) dei dati ricevuti o da spedire contenuti in questo messaggio""int getPort() ritorna il numero di porta sul nodo remoto al quale questo messaggio sarà inviato o dal quale è stato ricevuto"

Page 39: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 39

La classe DatagramSocket

• La classe DatagramSocket descrive i socket per inviare e ricevere pacchetti UDP

• DatagramSocket() costruisce un DatagramSocket e lo lega ad una porta disponibile sull’elaboratore locale

• DatagramSocket(int port) costruisce un DatagramSocket e lo lega alla porta specificata sull’elaboratore locale

• DatagramSocket(int port, InetAddress laddr) costruisce un DatagramSocket e lo lega alla porta specificata ed all’indirizzo locale specificato

Page 40: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 40

I metodi di DatagramSocket § public void send(DatagramPacket p) throws IOException invia un

DatagramPacket da questo socket. Il messaggio include i dati da trasmettere, la loro lunghezza, l’indirizzo IP del mittente ed il numero di porta su questo elaboratore"

§ public void receive (DatagramPacket p) throws IOException riceve un DatagramPacket da questo socket."

"Quando il metodo ritorna, il buffer specificato dal DatagramPacket è riempito con i dati ricevuti. Il DatagramPacket contiene anche l’indirizzo IP dell’elaboratore mittente ed il numero di porta su tale elaboratore. "

"Il metodo è bloccante. "

"Il campo lunghezza del DatagramPacket specifica la lunghezza del messaggio ricevuto. Se il messaggio è più lungo di quanto specificato, il messaggio viene troncato. "

Page 41: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 41

Esempio

§  DgramServer §  attende di ricevere un DatagramPacket §  invia l’eco al mittente §  ritorna in attesa

§  DgramClient per 5 volte esegue le seguenti azioni:

§  invia una stringa a DgramServer in un DatagramPacket

§  attende l’eco dal server

Page 42: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 42

Produttori e Consumatori •  Numero finito di produttori (P) •  Numero finito di consumatori (C) •  Ogni produttore può inviare un messaggio ad uno

qualunque dei consumatori. •  Problema.

Si vogliono evitare situazioni in cui esistono consumatori in attesa di messaggi ed altri con messaggi in coda

•  Soluzione: utilizzo di un meccanismo di bufferizzazione esplicito –  un buffer memorizza i messaggi inviati dai

produttori e li convoglia in ordine FIFO ai consumatori

Page 43: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 43

Produttori e Consumatori

•  Ogni produttore trasmette un dato per mezzo di un messaggio dati

•  Ogni consumatore invia un messaggio di controllo (pronto) per notificare la sua disponibilità a ricevere un messaggio e quindi si mette in attesa di ricevere tale messaggio

•  Si assume che il buffer dei messaggi e dei consumatori in attesa abbiano lunghezza illimitata

•  Vai alla soluzione

Page 44: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 44

Molti-a-uno / Uno-a-molti

C1

C2

C3

S

schema molti-a-uno

S1

S2

S3

C

schema uno-a-molti

multicast unicast

Page 45: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 45

Multicast

•  Applications –  Bulk data transfer (software upgrade) –  Streaming continuous media (audio, video) –  Shared data applications (whitheboard) –  Data feed (stock quotes)

•  Possible implementations –  One-to-all unicast (non richiede un supporto esplicito dal livello rete) –  Application level multicast (l’applicazione deve mantenere unoverlay

di distribuzione) –  Explicit multicast (richiede supporto dal livello rete)

Page 46: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 46

Internet multicast •  Address indirection: un singolo identificatore viene utilizzato

per un gruppo di ricevitori –  Indirizzo IP in classe D nel range [224.0.0.0, 239.255.255.255] –  L’indirizzo 224.0.0.0 è riservato

•  Internet Group Management Protocol (IGMP) (RFC 2236) –  Permette ad un host di informare il proprio router che

un’applicazione vuole unirsi (join) ad uno specifico multicast group. –  Mantiene la local membership

•  Network-layer multicast routing algorithms –  Permettono di coordinare i router in modo che i i multicast datagram

siano consegnati alle destinazioni finali –  PIM, DVMRP, MOSPF

Page 47: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 47

Multicast Socket

•  Time To Live (TTL) permette di controllare quanto distante un multicast datagram si può spingere

•  TTL è usato anche come soglia –  un multicast datagram può attraversare un router se il suo TTL è

maggiore di quello impostato nel router (comunque è decrementato di uno) TTL Scope

0 Same host 1 Same subnet <32 Same site, organization, dept <64 Same region <128 Same continent <255 Unrestricted, global

Page 48: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 48

Multicast Socket import java.io.*; import java.net.*; import java.util.*; public class MulticastServer {

public static void main(String[] args) { byte[] buf = new byte[256]; String dString = new Date().toString(); buf = dString.getBytes(); MulticastSocket socket = null; try { socket = new MulticastSocket(); socket.setTimeToLive(0); InetAddress group = InetAddress.getByName("230.0.0.1"); DatagramPacket packet; packet = new DatagramPacket(buf, buf.length, group, 4446); socket.send(packet); } catch (IOException e) { e.printStackTrace(); } finally { socket.close(); } }

}

public class MulticastSock extends DatagramSocket Il MulticastSocket non è bound ad alcuna porta perché non deve ricevere risposta

setTimeToLive permette di controllare la diffusione del multicast

230.0.0.1: uno dei possibili gruppi multicast

Page 49: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 49

Multicast Socket import java.net.*; import java.io.*; public class MulticastClient {

public static void main(String[] args) throws IOException { MulticastSocket socket = null; byte[] buf = new byte[256]; socket = new MulticastSocket(4446); InetAddress group = InetAddress.getByName("230.0.0.1"); socket.joinGroup(group);

DatagramPacket packet; for (int i = 0; i < 5; i++) { packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String received = new String(packet.getData()); System.out.println(“Received " + received); } socket.leaveGroup(group); socket.close(); }

}

Algoritmo •  Join a multicast group •  Receive multicast packets

•  Leave a multicast group

Page 50: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 50

Page 51: Network Programming - ing.unipi.it€¦ · TIGA Network Programming 16 Protocolli Internet ! Un processo è definito da un programma Java eseguibile ! Java fornisce API per l’utilizzo

Network Programming TIGA 51

Livelli di middleware

UDP e TCP

send, receive, read, write serializzazione

RMI

Rete

Applicazioni e servizi