La prima cosa che dobbiamo fare è calcolare il ritardo di propagazione.
Per farlo utilizziamo la formula:
Nel contesto di scambio di richieste tra client e server abbiamo definito l'RTT, ovvero il tempo che impiega un pacchetto per propagarsi verso il server e tornare indietro.
RTT quindi percorre 300 km di andate e 300 km di ritorno. Dunque lo spazio che ci serve per calcolare il tempo che si impiega per un RTT è
Quando non è specificato il mezzo, supponiamo che si tratti di rame.
La velocità di propagazione nel rame è di
Applichiamo la formula:
Sappiamo che TCP necessita di stabilire la connessione all'inizio (handshake a tre vie).
Quello che si vede in figura è ciò che avviene.
Le prime tre frecce fanno parte dell'handshake a tre vie, la prima è una richiesta di associazione, la seconda è una conferma, la terza è una conferma di aver ricevuto conferma, insieme a questo pacchetto viene spedita anche la richiesta del dato. Nell'ultima linea viene spedito il dato.
Sappiamo che gli oggetti da trasferire sono 9:
Calcoliamo quanto impiega il router a trasmettere tali oggetti:
Nel caso di una connessione persistente abbiamo:
Il problema dice che possiamo trascurare i messaggi di controllo di HTTP, quindi possiamo ignorare il tempo per trasmettere una GET.
Nel caso di una connessione non persistente abbiamo:
Il problema dice che possiamo trascurare anche i pacchetti di chiusura della connessione TCP.
La URL richiesta è: home.deib.polimi.it/cesana/index.html
La versione di HTTP usata è 1.1
Il browser richiede una connessione persistente (connection: keep alive)
Serve per personalizzare il tipo di risposta verso il browser che la richiede. (Esempio: in questo modo il server sa se il browser richiedente è uno smartphone e dunque se necessita della versione mobile del sito)
Il numero di oggetti che abbiamo in totale è 11:
Il collegamento client-server è in grado di trasferire a capacità di
La dimensione del pacchetto per l'apertura della connessione è uguale a quella del pacchetto per richiedere i dati che è di
Dobbiamo calcolare il tempo totale per ricevere la l'intera pagina web nei seguenti casi:
Il client richiede la pagina web, una volta ricevuta scopre di dover scaricare altri 10 oggetti.
Per scaricare il file html:
L'espressione è uguale alla precedente:
Adesso:
Viene aperta una sola connessione TCP, utilizzando i risultati già calcolati prima, per richiedere gli oggetti:
Questa volta verranno inviate 11 richieste diverse. Ogni connessione TCP viene chiusa.
Scrivi soluzione, vedi tablet
Quando il testo degli esercizi afferma pacchetti di controllo TCP e GET di lunghezza trascurabile intende che il pacchetto è come se venisse trasferito all'istante. Tuttavia va applicato comunque ad esso il tempo di propagazione (RTT).
Il client sta già occupando la banda con altri 9 trasferimenti (di lunga durata), aggiungendo il nuovo trasferimento abbiamo che la banda viene equamente suddivisa tra 10 connessioni.
Quindi abbiamo:
Per stabilire la connessione TCP il client invia il primo ACK (che si propaga per
Gli RTT totali per stabilire la connessione e ricevere il primo oggetto (HTML) sono 2, visto che le GET e gli ACK sono trascurabili, al questo tempo dobbiamo aggiungere solo il tempo per trasmettere il documento HTML.
La connessione TCP viene stabilita allo stesso identico modo di prima.
Quindi per ricevere il file HTML passano
A questo punto (dopo aver ricevuto il file HTML) la connessione TCP è stata chiusa, quindi occorre riaprirla. Tuttavia, a questo punto, allocando 11 connessioni TCP parallele la banda per ciascun trasferimento cambia, prima avevamo 10 trasferimenti paralleli, adesso ne abbiamo 9 (quelli dati dal testo, di lunga durata) + 11 di quelli che vengono creati adesso, in totale 20. Abbiamo per ogni trasferimento che:
Il tempo per ricevere l'oggetto è:
Il client A effettua la richiesta:
GET / HTTP/1.1
Host: www.unito.it
Connection: close
User-agent: Mozzilla/5.0
Accept-language: it
La richiesta giunge al proxy, il proxy non ha in locale la pagina richiesta, si verifica cache miss.
Il proxy inoltra la richiesta al server. Il server risponde:
HTTP/1.1 200 OK
Connection: close
Date: ...
Server: ...
Last-Modified: ...
Content-length: ...
Content-type: text/html
(data data data data data …)
Il proxy salva la pagina (per successive richieste) e inoltra la risposta al client.
Il client A effettua la richiesta:
GET / HTTP/1.1
Host: www.unito.it
Connection: close
User-agent: Mozzilla/5.0
Accept-language: it
La richiesta giunge al proxy, il proxy ha in locale la pagina richiesta, si verifica cache hit.
Il proxy inoltra la risposta (della pagina che ha in cache):
HTTP/1.1 200 OK
Connection: close
Date: ...
Server: ...
Last-Modified: ...
Content-length: ...
Content-type: text/html
(data data data data data …)
Il proxy potrebbe inviare anche una richiesta HTTP if-modified-since per capire se il documento che possiede già è stato modificato, e in tal caso richiedere la nuova versione del documento.
Il client A effettua la richiesta:
GET / HTTP/1.1
Host: www.unito.it
Connection: close
User-agent: Mozzilla/5.0
Accept-language: it
La richiesta giunge direttamente al server a cui la richiesta è destinata.
Il server inoltra la risposta (della pagina che ha in cache):
HTTP/1.1 200 OK
Connection: close
Date: ...
Server: ...
Last-Modified: ...
Content-length: ...
Content-type: text/html
(data data data data data …)
No, in un'applicazione P2P tipicamente il server invia file, mentre i client li ricevono.
Inoltre, un host potrebbe comportarsi sia da client che da server.
a) falso
b) vero
c) falso
d) falso
e) falso
A cui dovrebbe essere sommato il tempo per trasmettere la richiesta HTTP.
E il tempo per la trasmissione delle query DNS.