Flusso TCP (parte II)
Trasferimento di grandi quantità di dati
• Spesso il mittente deve inviare grandi quantità di dati.
• Genera un numero elevato di segmenti nell’unità di tempo.
• Il destinatario può avere problemi a seguire il passo del
mittente, ad esempio perché l’applicazione a cui sono diretti i
dati li legge lentamente (es. perché deve interagire con
l’utente).
Soluzione
Usare l’advertised window per rallentare il mittente.
Con finestre di piccole dimensioni si possono verificare dei
problemi.
(1)
Trasferimento di grandi quantità di dati
(2)
• Se l’applicazione ricevente risulta lenta nel consumare i
dati, lo stack TCP ricevente invierà gli ACK dei dati ricevuti
ma specificherà una finestra di dimensioni nulle.
• Il mittente continua a mandare segmenti di lunghezza
1 byte anche se la finestra è 0 per dare al ricevente
l’opportunità di rispondere con un ACK che riapre la
finestra.
• Quando la finestra si riapre (cioè l’applicazione legge i dati
dai buffer), il ricevente invia un ACK di “window update”.
Trasferimento di grandi quantità di dati
Host A
Tempo
Host B
(3)
Messaggio window update
Se il messaggio window update va perso:
• il destinatario aspetta invano i dati;
• il mittente non può inviare nulla.
Soluzione
1. Impostare il timer sul lato destinatario dopo
aver inviato window update.
2. Se il mittente non risponde, ritrasmettere.
Persist timer TCP
• Il mittente imposta il persist timer quando la
dimensione della finestra è uguale a 0.
• Quando il timer scade, invia un messaggio
“window probe” (pacchetto TCP con 1 byte di
dati).
• Se il destinatario ha ancora una finestra 0,
invierà un ACK, ma l’ACK non conterà l’1 byte
“illegale” appena inviato.
(1)
Persist timer TCP
Host A
Tempo
Host B
(2)
Sindrome “silly window”
Si verifica quando su una connessione vengono
scambiate piccole quantità di dati invece di grosse
quantità.
•
Il mittente sa solo che può inviare X byte di dati.
•
Il destinatario in realtà ha la capacità di accettare
2X, ma non ha avuto la possibilità di annunciarla;
siccome accetta X byte, può annunciare solo ancora
X.
Soluzione
a) Il destinatario non annuncia finestre piccole, ma
aspetta fin che se ne aprono di più grandi.
b) Il mittente evita di inviare dati finchè non ne
accumula quantità maggiori.
Come evitare la sindrome “silly window”
• Il destinatario non annuncia una finestra più
grande fin che la finestra non può essere
aumentata del minimo tra:
– un segmento di dimensioni reali (MSS);
– metà dello spazio buffer del destinatario.
• Il mittente aspetta a trasmettere fin che può
inviare uno tra i seguenti:
– un segmento di dimensioni reali (MSS);
– almeno metà della finestra più grande mai annunciata
dal destinatario;
– tutto il buffer.
FINE
Scarica

parte 2