I timer del protocollo TCP

I timer del protocollo TCP

Il protocollo TCP prevede l’impiego di diversi timer, atti a controllare la qualità della trasmissione, e sulla base dei quali si effettuano determinate azioni mirate ad effettuare nuove trasmissioni o l’interruzione della connessione. I timer utilizzati sono i seguenti:

Timer di ritrasmissione

Questo timer serve a verificare che ogni segmento trasmesso venga riscontrato dalla sorgente tramite il relativo Ack inviato dall’host mittente. Si tratta forse di uno dei timer più importanti, dato che l’impostazione del suo corretto valore è fondamentale in termini di efficienza della rete. Un valore troppo basso, infatti, causerebbe numerose ed inutili ritrasmissioni dei pacchetti, dato che il timer ad esempio potrebbe scattare quando il pacchetto è ancora in transito e quindi inutilmente. Di converso un valore troppo elevato può comportare attese lunghe per il completamento della trasmissione in caso di perdita di pacchetti. L’intervallo del Timer di ritrasmissione deve quindi essere pari almeno al  valore del Round Trip Time, ovvero il  valore  che indica il tempo di percorrenza a due vie di un pacchetto, dato che all’andata verrà trasmesso il pacchetto vero e proprio, e al ritorno sarà necessario aspettare l’ack da parte del destinatario. L’intervallo di tale timer, tuttavia, può variare in maniera molto aleatoria all’interno di una rete, per  via della natura della commutazione di pacchetto che rende spesso imprevedibile conoscere con esattezza i tempi di trasmissione. Il protocollo TCP adotta quindi una strategia che prevede di aggiornare frequentemente il valore di questo timer basandosi su una stima del valore medio del Round Trip Time.

Timer di persistenza

Come abbiamo visto il protocollo TCP utilizza il sistema delle finestre per gestire il controllo di flusso dei dati che il destinatario è in grado di accettare dal mittente, fatti salvi i problemi di Silly Window. Se il campo Window viene settato a zero, ciò significa che il destinatario sta chiedendo una momentanea interruzione dell’invio dati da parte del mittente. È tuttavia necessario prevedere un meccanismo che sblocchi l’invio dati nel caso in cui il segnale che il destinatario è di nuovo pronta vada perso, dal momento che il quel caso il mittente potrebbe restare in attesa del destinatario a tempo indeterminato. Questo problema si risolve nel protocollo TCP grazie ad un apposito Timer, ovvero al timer di persistenza. Questo timer stabilisce un valore di tempo scaduto il quale il mittente, che nel frattempo è in attesa dell’autorizzazione del destinatario all’invio dei dati, invia autonomamente un pacchetto sonda al destinatario per sollecitarne la risposta. In questo modo il mittente è sicuro che la finestra del destinatario sia ancora chiusa realmente (in tal caso, infatti, riceverà un nuovo pacchetto Window settato a 0) e non che il pacchetto con campo Window aperto sia andato perso.

Timer di keepalive

Questo timer nasce per gestire l’eventualità, di base non prevista in TCP, di quali azioni intraprendere quando in una connession per un certo periodo non ci sono dati da trasmettere. Alcune implementazioni del protocollo prevedono di trasmettere periodicamente dei segmenti vuoti, detti keepalive (tieni in vita), inviati allo scopo di tenere attiva la connessione tra due host. Questo approccio tipicamente è deciso dai software che si scambiano i dati, che possono decidere per svariati motivi di tenere attiva la connessione anziché terminarla. In queste circostanze esiste quindi un apposito timer, quindi il timer di keepalive, che determina l’intervallo di tempo che deve trascorrere tra l’invio di un messaggio di keepalive e l’altro. Se scaduto il tempo non si riceve nessun altro messaggio, allora la connessione verrà chiusa.

Timed wait

Questo timer misura il tempo di attesa, ovvero il tempo che deve trascorrere dall’invio dell’ultimo messaggio prima che la connessione venga definitivamente chiusa.