Calcolo timeout Richiami: pieno utilizzo Per utilizzare completamente un collegamento: • serve una finestra grande a sufficienza per riempire il pipeline; • finestra >= larghezza di banda * round trip time. Richiami: scambio interattivo e bulk transfer • Lo scambio interattivo (Interactive Exchange) cerca di accumulare più dati possibili senza compromettere l’esperienza interattiva: − ACK ritardato − Algoritmo di Nagle • Le tecniche di bulk transfer per il trasferimento di grandi quantità di dati cercano di utilizzare appieno il collegamento (lo scambio interattivo non ha la possibilità di farlo): − Advertised Window del destinatario − Persist Timer Richiamo: timeout e ritrasmissione • Il destinatario deve confermare la ricezione di tutti i segmenti. • Il mittente imposta un timer inviando ogni segmento: se l’ACK non è arrivato prima che il timer scada, il mittente ritrasmetterà il segmento. • Ritrasmissione adattativa: il valore del timer è calcolato come una funzione del round trip time medio e varianza. TCP: scenari di ritrasmissione Host A Host B X loss Tempo Scenario di dati persi timeout timeout Host A Tempo Host B X loss Scenario di ACK perso (1) TCP: scenari di ritrasmissione Host A Host B Seq=100 timeout Seq=100 timeout Seq=92 timeout Host A Tempo Tempo Timeout prematuro, ACK cumulativi. Host B X loss ACK duplicato, ritrasmissione veloce (in realtà prima di una ritasmissione veloce servono 3 ACK duplicati). (2) Valore di timeout del TCP Si deve basare su RTT ma essere maggiore di esso per evitare un timeout prematuro, visto che RTT può variare. Limiti • Troppo breve Timeout prematuro = ritrasmissioni inutili. • Troppo lungo Reazione lenta alla perdita di segmenti. Valutazione del Round Trip Time SampleRTT • Prende il tempo quando il segmento viene inviato; quando riceve ACK, calcola: RTT = currentTime – sentTime − Non c’è corrispondenza 1:1 tra segmenti inviati e ACK. − Ignora ritrasmissioni, segmenti ACK cumulativi (non fa parte della specifica originale). • Può variare bruscamente, bisogna valutare RTT in modo “più continuo”. − Si usano molte misure recenti, non solo il SampleRTT corrente . Round Trip Time e Timeout EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT • Media variabile pesata esponenziale. • L’influenza di un campione dato diminuisce velocemente ed esponenzialmente. • Valore tipico di x: 0.1 (90% peso a media accumulata; 10% a nuova misura). • x con valore superiore significa che si adatta più rapidamente a nuove condizioni: – accettabile se c’è una variazione reale di RTT; – non accettabile se porta a reagire a cambiamenti transitori. Impostazione del timeout • Media variabile pesata esponenzialmente. • Ampia variazione in EstimatedRTT -> margine di sicurezza maggiore. Timeout = EstimatedRTT * DelayVarianceFactor Valore consigliato: Recommended DelayVarianceFactor = 2 EstimatedRTT Più “margine di sicurezza” (1) Impostazione del timeout Punti di attenzione • Si osservano dei problemi in presenza di ampie oscillazioni di RTT. Suggerimento • Meglio se il timeout si basa sia sulla media sia sulla varianza delle misurazioni di RTT. (2) Timeout Jacobson/Karels Basato su media e varianza • Test statistico di 2° livello. • La deviazione media è una buona approssimazione della deviazione standard, ma è più facile da calcolare (non c’è radice quadrata ). EstimatedRTT = (1-x)*EstimatedRTT + x*SampleRTT Error = |SampleRTT-EstimatedRTT| Deviation = Deviation + h*(Error – Deviation) Timeout = EstimatedRTT + 4*Deviation (1) Timeout Jacobson/Karels Valori consigliati: • x =0.125 (maggiore dell’originale) Il timeout risponde più rapidamente ai cambiamenti in RTT. • h = 0.25 FINE (2)