Esercitazione
Formato di compitini e compiti:
domande ed esercizi
"closed book"
Domanda 1
In una comunicazione di rete tra due host, quale è il client e quale è il server.
Necessario: Server pubblica informazioni ed attende le richieste di servizio effettuate dal client. L’indirizzo del server è noto
Facoltativo: differenze del modello di servizio:
orientato alla connessione vs non orientato alla connessione
Non recitare descrizioni di server socket, datagram socket …
Domanda 2
Cosa è la fase di handshaking di un protocollo.
Necessario: Fase eseguita da due entità di un protocollo in cui si accordano sullo scambio di informazioni.
Facoltativo: Un esempio di handshaking: protocollo SMTP -- HELO
Domanda 3
Nel protocollo HTTP è prevista l’opzione “if- modified-since”. Quale è il ruolo di questa opzione? In quali casi si ottiene un codice di ritorno del tipo “304 Not modified”.
Necessario: L’opzione serve per evitare il trasferimento di dati già presenti nella cache. Una richiesta con una data futura ha come effetto “304 ..”.
Facoltativo: Come viene gestita la cache,
TTL.
Domanda 4
Si consideri un cliente HTTP che desidera ottenere la pagina Web associata alla URL:
www.cnn.com/europe/today.html. Si supponga che l’indirizzo IP del server HTTP non sia
inizialmente noto e che l’oggetto Web associato alla suddetta URL contenga una pagina HTML ed
un’immagine GIF che risiede sullo stesso server. Si descriva quali protocolli di livello application e
transport sono coinvolti in questo scenario ed in che modo sono coinvolti.
Necessario: quali protocolli sono usati (HTTP, DNS e TCP) e quando vengono usati
Non recitare descrizioni di DNS, HTTP, HTML ...
Domanda 5
Quali protocolli intervengono nella spedizione di una email da un mittente a un destinatario ?
Necessario: quali protocolli (SMTP, POP/IMAP), quando/da chi vengono utilizzati
Facoltativo: descrizione piu' precisa del funzionamento
Primo appello 03/04
Si dica quante connessioni vengono effettuate da un browser WEB per scaricare una pagina che
contiene 4 immagini, 2 immagini memorizzate sullo stesso server e 2 su un server diverso. Si
consideri sia l’utilizzo di HTTP 1.0 che 1.1.
Esempio di risposta
HTTP 1.0: viene aperta una connessione per ogni
documento, quindi in questo caso vengono effettuate una connessione per reperire il documento e quattro
connessioni per recuperare le immagini.
HTTP 1.1: possiamo scegliere di mantenere le connessioni aperte, il che richiede una connessione per il documento e le due immagini sullo stesso server ed una connessione per le immagini sull’altro server - oppure possiamo
scegliere di chiudere ogni volta le connessioni, come in HTTP 1.0, effettuando così cinque connessioni.
Prima verifica 2005/2006
Supponiamo che il protocollo DNS preveda messaggi di richiesta del tipo:
query nomeHost
e messaggi di risposta del tipo:
reply nome valore tipo TTL
ovvero tupe DNS di tipo A (nome = nomeHost, valore = indirizzoIP) o di tipo NS (nome = dominio, valore = nomeDNSServer).
Supponiamo di avere a disposizione le seguente primitive per utilizzare il servizio di trasporto:
Connection accept (int)
Connection open (String, int) void send (Connection, String) String receive (Connection) void close (Connection)
e le seguenti primitive per estrarre i singoli elementi di una tupla DNS:
String getName (String) String getValue (String) String getType (String) String getTTL (String)
Scrivere lo pseudo-codice di un cliente che intende risolvere il nome di un host.
Soluzione
Supponiamo che il protocollo DNS preveda messaggi di richiesta del tipo:
query nomeHost
e messaggi di risposta del tipo:
reply nome valore tipo TTL
ovvero tupe DNS di tipo A (nome = nomeHost, valore = indirizzoIP)
o di tipo NS (nome = dominio, valore = nomeDNSServer).
Supponiamo di avere a disposizione le seguente primitive per utilizzare il servizio
di trasporto:
Connection accept (int)
Connection open (String, int) void send (Connection, String) String receive (Connection) void close (Connection)
e le seguenti primitive per estrarre i singoli elementi di una tupla DNS:
String getName (String) String getValue (String) String getType (String) String getTTL (String)
Scrivere lo pseudo-codice di un cliente che intende risolvere il nome di un host.
Connection c = open(localNS, 53);
send(c, “query ” + nomeDaRisolvere);
String r = receive(c);
close(c);
while (getType(r)!=”A”) do { c = open(getValue(r), 53);
send(c, “query ”+ nomeDaRisolvere);
r = receive(c);
close(c);
};
return(getValue(r));
Esercizi
o
Si supponga di avere a disposizione una API contenente istruzioni per
o Aprire connessioni,
o Accettare una connessione
o Spedire e ricevere messaggi
o
Quali di queste operazioni vanno utilizzate
per fare in modo che un utente A sull’host I1
riesca a far arrivare una mail ad un utente B
attivo sull’host I2?
Soluzione (possibile)
User Agent 1
Open-connection(I2,p2);
Send(HELO);
Receive(OK);
Send( Mail from A @ I1);
:
Send(QUIT);
Close-connection;
User Agent 2 Accept;
Receive(HELO);
Send(OK);
Receive(msg) until QUIT
Esercizio 2
Supponiamo di avere a disposizione una API avente le operazioni
Open-connection(host)
Close-connection()
Send(msg)
Receive(msg)
Si descriva come può essere realizzato un
semplice browser in grado di visualizzare
un solo documento (non ci sono cicli!!)
Esercizio 2 (sol.)
Read(host);
Read(risorsa);
Open-connection(host);
Send(“Get risorsa HTTP/1.1 CRLF CRLF”);
Ans = receive();
Close-connection();
Visualizza(Ans).
Esercizio 3
Si descriva con pseudo-codice il ciclo di
funzionamento di un proxy Web (single-
threaded) che filtra le richieste ricevute
permettendo soltanto l’accesso ad un
insieme di siti prestabiliti.
Esercizio 3 (API)
Connection accept (int port)
Connection open (String server, int port)
Void send (Connection x, String y)
String receive (Connection x)
String extractURL (String y)
String extractServer (String y)
String extractFile (String y)
String searchCache (String y)
Es 3 (Sol)
Connection c = accept (8080);
String richiesta = receive(c);
String server = extractServer(richiesta);
if !(sitoValido(server)) {
[costruzione messaggio HTTP m per “sito non accessibile”]
send(c,m);
} else {
String file = extractFile(richiesta);
cached = searchCache(server+file);
if (cached!=””) send(c,cached);
else {
Connection s = open(server,80);
Send(x,”GET “+file);
String risposta = receive(s);
[Memorizza la risposta nella cache]
Send(s,risposta);
} }