[successivo] [precedente] [indice]

Gestione del Flusso

Il flusso dati TCP e' di due tipi:

Flusso Interattivo

Ogni pressione di un tasto genera un segmento TCP contenente il valore del tasto come carico utile. Inoltre lo host remoto spesso compie un echo del tasto premuto. Ogni tasto imlica quindi quattro segmenti:

  1. il tasto premuto
  2. lo ACK del tasto premuto
  3. lo echo del tasto
  4. lo ACK dello echo

Normalmente i segmenti 2 e 3 sono combinati.

Inoltre, TCP non invia immediatamente un ACK alla ricezione di un segmento, ma introduce un leggero ritardo (delayed acknoledgement), nella speranza di combinare dei dati al segmento di ACK. Il ritardo tipico e' di 200 msec.

I pacchetti inviati per ciascun carattere sono di 41 bytes ciascuno (20 testata TCP, 20 testata IP e 1 dati). I pacchetti molto piccoli vengono anche detti tynigrams e possono creare congestione di rete.

Algoritmo di Nagle

La soluzione e' data dall'Algoritmo di Nagle, secondo il quale una connessione puo' avere solo un piccolo segmento di cui non e' stato dato ancora lo ACK. Non si possono inviare ulteriori piccoli segmenti finche' non e' stato ricevuto lo ACK del precedente. I dati non inviati vengono raccolti dal TCP in un unico segmento, che viene inviato quando si riceve lo ACK del precedente.

Grazie a questo algoritmo, se sulle reti veloci si ricevono ACK molto frequenti e quindi si inviano segmenti molto piccoli, sulle reti lente si ricevono ACK piu' di rado e quindi si inviano segmenti piu' grossi, contenenti anche molti caratteri per volta. E' da notare che il ritmo di trasferimento delle informazioni e' pressoche' invariato nei due casi. L'unico effetto con alcuni programmi come rlogin, e' uno spiacevole ritardo tra la pressione dei tasti ed il loro echo su video.

In alcuni casi l'algoritmo di Nagle deve essere disabilitato, per esempio con il server del Sistema X Window, quando anche i piccoli movimenti del mouse devono essere inviati come segmenti singoli per fornire un feedback in tempo reale all'utente.

Flusso di Massa

Finestra Scorrevole

TCP usa un protocollo di conferma a finestra scorrevole.

La stazione inviante manda piu' di un segmento consecutivo sulla rete verso il ricevente senza attendersi un ACK ad ogni segmento. Il ricevente manda al trasmittente un ACK dell'ultimo segmento ricevuto senza errori.

In seguito all'ACK il trasmittente invia dal pacchetto successivo a quello di cui ha ricevuto lo ACK, un numero di segmenti uguale al precedente. Il numero dei segmenti e' la dimensione della finestra, la quale e' scorrevole in avanti nella lista dei segmenti da inviare.

Alcuni segmenti possono venire inviati due volte, la ritrasmissione non e' selettiva. Il ricevente semplicemente scarta i pacchetti corretti ricevuti piu' di una volta.

La dimensione della finestra accettata viene determinata dal ricevente tramite il campo Dimensione Finestra della testata TCP.

Per mantenere il flusso il ricevente manda un ACK ogni certo numero di segmenti ricevuti, tipicamente due. Il trasmittente mantiene puntatori ai bordi destro e sinistro della finestra, ovvero dell'ultimo segmento di cui e' stata inviata una ACK e dell'ultimo segmento inviabile nella finestra corrente. Questi puntatori scorrono in avanti al ricevere degli ACK.

Inizio Lento

Secondo questo nuovo algoritmo, TCP determina il ritmo di iniezione pacchetti nella rete dal ritmo di ricezione dei messaggi di ACK.

Oltre alla finestra di trasmissione, determinata dal ricevente, TCP mantiene sul trasmittente una finestra ulteriore concatenata, la finestra di congestione. All'inizio della connessione la finestra di congestione e' inizializzata ad un segmento, ed e' aumentata di uno ad ogni ricezione di un ACK. Vengono inviati tanti segmenti quanto il valore minimo tra la finestra di congestione e la normale finestra scorrevole.

Ad un certo punto la rete si satura ed i segmenti iniziano ad essere persi.