INTERNET (10/10)


5.6 Protocollo TCP

5.6.1 Caratteristiche del TCP

5.6.2 Segmento di TCP

5.6.3 Operazioni di gestione del TCP

5.7 Protocollo UDP

5.8 Considerazioni finali

5.6. Protocollo TCP

Il protocollo TCP ( Transmission Control Protocol) è molto simile al protocollo di trasporto di quarto livello OSI.

In fig.9 si mostra la collocazione del protocollo TCP tra i diversi strati e gli strati interessati nella comunicazione dei dati da un host della rete A ad un host della rete C attraverso i router 1 e 2 (o gateway).

Poiché il protocollo IP non prevede il sequenziamento e il riconoscimento dei dati, spetta al protocollo TCP le operazioni di affidabilità dei dati, il controllo di flusso e il sequenziamento delle sessioni delle applicazioni.

I protocolli di livello superiore come HTTP per il trasferimento di ipertesti, l'FTP per il trasferimento dei file e l'SMTP (Simple Mail Transfer Protocol) per il trasferimento semplice della posta elettronica si basano sui servizi TCP.

Molte delle funzioni svolte da TCP possono essere eseguite dall'interno del software applicativo; in realtà, però, si preferisce affidare tutte le funzioni ad un programma specifico richiamabile dal software applicativo.


Fig.9 Strati interessati nella comunicazione host-host.


Si ricordi, a tale proposito, il programma Trumpet Winsock che attiva lo stack TCP/IP e gli applicativi in grado di gestire la posta elettronica (Eudora), gli ipertesti (Netscape), le news di Usenet (Fort Agent), il trasferimento di files (WS_FTP), ecc.

5.6.1. Caratteristiche del TCP

I servizi garantiti dal protocollo TCP si possono elencare nei seguenti:

Il protocollo TPC è orientato alla connessione nel senso che conserva le informazioni relative allo stato del flusso dati che l'ha attraversato.

Il TCP ricevente adotta la tecnica del checksum per il controllo degli errori: una PDU errata viene scartata e, in base al numero di sequenza, il TCP ricevente comunica al trasmittente quale PDU ritrasmettere; se la PDU è verosimilmente corretta il TCP ricevente risponde con un messaggio di riconoscimento ACK.

Il TCP trasmittente invia altri segmenti prima di ricevere il messaggio ACK.

La funzione di impilaggio consente ad un'applicazione di verificare che sono stati trasmessi i dati trasferiti al protocollo di starto inferiore.

Se per qualche motivo il TCP trasmittente inoltra uno stesso segmento, il ricevente scarta i duplicati.

Per questi motivi le PDU possono giungere a destinazione in ordine non corretto e il TCP ricevente utilizza il numero di sequenza per il risequenziamento dei segmenti.

Il protocollo TCP riceve i dati dallo strato superiore a flussi, cioè un byte per volta; è suo compito organizzarli in segmenti TCP che vengono passati a IP o ad un altro protocollo di strato inferiore.

Un'altra funzione assicurata dal TCP è il controllo di flusso dei dati del mittente: essa si basa sull'emissione di un valore, definito finestra, alla stazione trasmittente; quest'ultima deve interrompere la trasmissione quando il numero di byte raggiunge quello specificato in finestra.

La chiusura garbata consiste nell'attesa del riconoscimento di tutti i dati prima di interrompere la connessione.

5.6.2. Segmento di TCP

Nella tabella 4 si mostra il tipico segmento del protocollo TCP. In parentesi si indica il numero di bit del campo relativo.

Tabella 4. Segmento del TCP.

Porta d'origine (16) Porta di destinazione (16)

Numero di sequenza (32)

Numero di riconoscimento (32)

Scosta- mento dei dati (4)


Riservato
(6)

U R G

A C K

P S H

R S T

S Y N

F I N


Finestra (16)

Checksum (16)

Puntatore d'urgenza (16)

Opzioni (variabile)

Riempimento

Dati (variabile)


Il segmento si compone di due parti: il campo intestazione (24 byte) e il campo dati.

I primi due campi sono la porta d'origine e quella di destinazione: essi servono per identificare i programmi applicativi dello strato superiore.

Il campo numero di sequenza (ISS = Initial Send Sequence = Sequenza di trasmissione iniziale) si riferisce al primo byte del campo dati e specifica la posizione del flusso di byte del modulo trasmittente.

Il numero di riconoscimento contiene il numero d'ordine, all'interno del file in trasmissione, del primo byte del segmento corrente.

Il campo scostamento dei dati contiene il numero di parole a 32 bit utilizzate per l'intestazione. In questo modo è possibile individuare il punto da cui iniziano i dati.

I sei bit, dopo il campo riservato, sono dei flag utilizzati da TCP per controlli:

Il campo finestra indica quanti byte il ricevitore è disposto ad accettare.

Il campo checksum è il codice di controllo a 16 bit effettuato sull'intero segmento, comprendente intestazione e dati, organizzato come parole a 16 bit.

Il campo puntatore d'urgenza è utilizzato solo se il flag URG è settato ed indica i byte urgenti, definiti dati fuori banda. I dati urgenti possono essere segnali di controllo come interrupt, punti di arresto, ecc.

Il campo opzioni è previsto per ampliamenti futuri.

5.6.3. Operazioni di gestione di TCP

Le operazioni fondamentali per una connessione gestita dal protocollo TCP consistono nelle seguenti tre fasi fondamentali:

In realtà la situazione è più complessa di quanto si creda perché TCP può essere utilizzato contemporaneamente da più processi di utente per cui TCP deve conservare le informazioni riguardanti ciascun processo.

Apertura di TCP

Esaminiamo le principali operazioni che avvengono tra due TCP per realizzare l'apertura di una comunicazione facendo riferimento alla fig.10 nella quale si indica con ULP (Upper Layer protocol) il protocollo dello strato superiore.


Fig. 10 Apertura di TCP.

L'utente A invia una apertura attiva a B al suo TCP A indicata dalla freccia 2; il TCP A prepara un segmento con il flag SYN posto ad 1 che invia a TCP B, come si vede in figura dalla freccia numero 3, codificato come SYN SEQ 100. La comparsa della parola SYN significa che il relativo flag è posto ad 1 mentre il numero di sequenza ISS, indicato con SEQ 100, potrebbe avere anche un altro valore.

Il TCP B riconosce il segmento SYN e risponde settando il flag ACK col numero di sequenza 101 come indicato dalla freccia 4; inoltre trasmette il segmento SYN col numero di sequenza 150. Il TCP A riconosce il segmento SYN e risponde col segmento ACK avente numero di sequenza 151 come indicato dalla freccia 5.

Dopo queste operazioni, note come sincronizzazione tridirezionale, i TCP effettuano le aperture ai relativi utenti.

La freccia numero 1 indica una apertura passiva che è quella che normalmente compie un server che attende l'arrivo di una richiesta di connessione da parte di un utente remoto. Ciò consente di evitare il tempo necessario all'apertura attiva.

Trasferimento dati di TCP

Esaminiamo le principali operazioni svolte per effettuare un trasferimento dati facendo riferimento alla fig.11.


Fig. 11 Trasferimento dati di TCP.

A titolo di esempio supponiamo che l'utente A vuole trasmettere 40 byte, a partire dal byte n.101, all'utente B e, viceversa, l'utente B desidera rispondere con un messaggio di 11 byte a partire dal byte n.151.

L'utente A, nella fase 1, invia i dati al protocollo TCP A che incapsula 40 byte in un segmento che invia a TCP B durante la successiva fase 2 con numero di sequenza 101 che identifica il primo byte dei dati da trasmettere. I dati vengono consegnati all'utente B nella fase 3 e nella fase 4 il protocollo TCP B risponde col messaggio di riconoscimento ACK avente numero di sequenza 141. Tale numero conferma il riconoscimento dei 40 byte trasmessi durante la fase 2.

L'utente B invia dati durante la fase 5: questi vengono incapsulati da TCP B ed inviati a TCP A durante la fase 6 con numero di sequenza 151. Nella fase 7 TCP A accusa la ricevuta di 11 byte poiché risponde con ACK 162. Nella fase 8 i dati vengono consegnati all'utente A.


Chiusura di TCP

Esaminiamo le principali operazioni che avvengono tra due TCP per realizzare la chiusura di una comunicazione facendo riferimento alla fig.12.



Fig. 12 Chiusura di TCP.

Nella fase 1 l'utente A manifesta la volontà di chiudere il collegamento con l'utente B. L'effetto di ciò è l'inoltro di un segmento col flag FIN settato durante la fase 2.

Il numero di sequenza 141 è la continuazione della operazione di trasferimento dati.

Nella fase 3 il TCP B emette un segmento con numero di sequenza pari a 162 e di riconoscimento pari a 142, successivo a 141. TCP B, nella fase 4, invia un comando di chiusura a ULP B. Nella fase 5 ULP B riconosce e concede la chiusura ad A. Nella fase 6 si ha il segmento finale emesso da TCP B che consiste nel flag FIN settato ad 1 e il numero di sequenza pari a 162 e di riconoscimento pari a 142. Il TCP A riconosce questo segmento finale emettendo un numero di riconoscimento pari a 163 durante la fase 7. Nella fase 8 TCP A chiude la connessione all'utente A e nella fase 9 TCP B chiude la connessione all'utente B.

5.7. Protocollo UDP

Il Protocollo UDP (User Datagram Protocol) è classificato come protocollo senza connessione.

Talvolta UDP sostituisce TCP quando i servizi di quest'ultimo non sono necessari. Questo accade per i protocolli dello strato superiore di trasferimento file triviale TFTP (Trivial File Tranfer Protocol), il protocollo semplice per la gestione di rete SNMP (Simple Network Management Protocol) e la chiamata di procedure remote RPC (Remote Procedure Call).

UDP non possiede funzioni di sicurezza, controllo di flusso e correzione di errori ma cura sostanzialmente la ricetrasmissione di dati IP come multiplatore/demultiplatori.

Si riporta nella tabella 5 il formato di un datagramma UDP. In parentesi si indica il numero di bit del campo in esame.

Tabella 5. Formato del datagrama UDP.

Porta di origine (16)

Porta di destinazione (16)

Lunghezza (16)

Checksum (16)

Dati (variabile)

Il numero inserito nel campo porta di origine specifica la porta del processo applicativo emittente; quello inserito nel campo porta di destinazione individua il processo ricevente sulla macchina di destinazione; la lunghezza si riferisce al datagramma che, comunque non può essere inferiore a 8. Il campo checksum, facoltativo, effettua il controllo degli errori di trasmissione.

5.8. Considerazioni finali

Nei precedenti paragrafi sono stati descritti, anche se in modo non del tutto approfondito, i protocolli più importanti dello stack TCP/IP.

Esistono numerosi altri protocolli, ognuno dei quali abilitato a svolgere specifiche funzioni quali, ad esempio: protocolli per la scoperta del percorso, dello strato delle applicazioni (TELNET, FTP, SMTP, POP3, HTTP) e protocolli vari come PPP, NTP, Finger, Ping, BOOTP, NFS.