INTERNET (10/10)
5.6.3 Operazioni di gestione del 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.
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.
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) |
|
U R G |
A C K |
P S H |
R S T |
S Y N |
F I N |
|
||
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.
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.
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.
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.
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.