Per mantenere la connessione esente da errori, il protocollo TCP si basa sugli ACK, che permettono al mittente di accorgersi quando un pacchetto va perduto e di ritrasmetterlo. TCP adotta a questo scopo una semplice tecnica detta go-back-N: se un pacchetto va perduto, il mittente lo manda una seconda volta e ritrasmette anche tutti i pacchetti già inviati a partire da quello. Il tempo massimo di attesa dell’ACK, dopo il quale il pacchetto corrispondente viene dato per perso dal mittente (e si inizia la ritrasmissione go-back-N) si chiama timeout. In TCP, il timeout non è un parametro fisso; anzi, il software di rete TCP ne esegue una stima ogni volta che arriva un ACK. In questo modo, il software di rete TCP si tiene aggiornato sullo stato della connessione e della rete. Il timeout è infatti calcolato come la media pesata di vari campionamenti, eseguiti durante la connessione dal software di rete del mittente, del tempo intercorso fra l’invio di un pacchetto e la ricezione del corrispondente ACK (tempo di andata e ritorno). Il tempo di andata e ritorno campionato viene chiamato Round Trip Sample o RTS. Il tempo di andata e ritorno stimato (Round Trip Time) è invece calcolato partendo dai valori di RTS e utilizzando la formula seguente.
Si tratta di una formula non difficile da capire: in pratica, ogni nuovo valore di RTS pesa più o meno sul calcolo dell’RTT in base al valore del parametro . Se è piccolo, RTT è molto sensibile alle variazioni di RTS. Se invece è vicino a 1, un nuovo valore di RTS deve restare stabile a lungo per avere effetto su RTT. Il timeout TCP viene calcolato moltiplicando RTT per un valore B maggiore di uno. Si noti che se il valore di B è vicino a 1, la perdita di un pacchetto viene rilevata subito, ma si rischia di ritrasmettere più pacchetti del necessario. Se viceversa B è alto, si rischia di aspettare troppo a lungo prima di ritrasmettere un pacchetto perso, abbassando così le prestazioni della connessione. In genere, B è fissato a 2. La scelta di alfa e di beta sembra dunque essere critica, ma i problemi non sono ancora finiti. Infatti, se un segmento è trasmesso due volte, quando arriva la conferma di ricezione, a chi si riferisce? Al pacchetto originale o a quello ritrasmesso? Se usiamo il primo pacchetto per il calcolo dell’RTS rischiamo di far crescere esponenzialmente il valore di timeout. Infatti un pacchetto è ritrasmesso quando scade il timeout precedente. Di conseguenza il nuovo RTS è ovviamente più grande del vecchio timeout. Se viene perso un nuovo pacchetto l’RTS cresce ancora, e così via. Se usiamo il pacchetto ritrasmesso abbiamo il problema opposto, cioè il timeout rischia di ridursi sempre di più, o almeno si è dimostrato sperimentalmente che si stabilizza su valori alquanto bassi. Supponiamo infatti di avere un ritardo in rete: la conferma di ricezione arriva conseguentemente in ritardo. Nel frattempo il mittente ha rispedito il pacchetto che credeva perso. Appena arriva la conferma questa è associata al segmento ritrasmesso generando così un RTS molto piccolo. Il timeout si riduce, aumentando il rischio di considerare persi pacchetti la cui conferma di ricezione arriva in ritardo, e così via. P. Karn propose nel 1987 d’ignorare i pacchetti ritrasmessi nel calcolo del timeout. Questo evitava il problema suddetto, ma ne creava un altro. Se un pacchetto è ritrasmesso perché si è avuto un repentino calo di prestazioni della rete, il timeout rimarrà sempre troppo basso, in quanto il mittente continuerà a ritrasmettere pacchetti le cui conferme arrivano in ritardo rispetto al timeout calcolato prima del calo di prestazioni. Dato che tali conferme vengono regolarmente ignorate per il calcolo dell’RTT, il timeout non viene più aggiornato almeno fintanto che la rete non torna normale, cosa per giunta complicata dal sovraccarico dovuto all’inutile ritrasmissione dei pacchetti. La soluzione consiste nell’aumentare il timeout precedente a una ritrasmissione di un fattore arbitrario, diciamo gamma, fino a un limite massimo ragionevole calcolato sulla base dei possibili cammini all’interno della rete. In genere gamma non è minore di due. Questa tecnica è detta di backoff.
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.