PROTOCOLLO TCP

 


5.6 Protocollo TCP

5.6.2 Segmento di TCP

5.6.3 Operazioni di gestione di TCP

5.6.4 Finestre di scorrimento

5.6.6 Numero di porte

5.7 Protocollo UDP


5.6. Protocollo TCP

       Il protocollo TCP ( Transmission Control Protocol) è molto simile al protocollo di trasporto di quarto livello OSI. La documentazione è disponibile nella RFC 1122 e nell’aggiornamento RFC1323 disponibili sul sito: http://www.faqs.org/rfcs/

       In fig.41 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).

      

 

 

Fig.41. - Strati interessati nella comunicazione host-host.

 

       Il protocollo TCP risiede nel computer host e non nel router ed è progettato per funzionare sopra il protocollo IP.

       Quest’ultimo non prevede il sequenziamento e il riconoscimento dei dati per cui 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.

       Si ricordi, a tale proposito, il programma Winsock che attiva lo stack TCP/IP e gli applicativi in grado di gestire la posta elettronica (Outlook Express), gli ipertesti (Internet Explorer), le news di Usenet (Free Agent), FTP (Filezilla), ecc.

 

5.6.1. Caratteristiche del TCP

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

·      Gestione dei dati orientati alla connessione;

·      Trasferimento affidabile dei dati;

·      Trasferimento dei dati organizzato a flussi;

·      Funzioni di impilaggio;

·      Risequenziamento;

·      Controllo del flusso;

·      Multiplexing;

·      Trasmissione full-duplex;

·      Precedenza e sicurezza;

·      Chiusura garbata.

 

       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 strato 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.

       Il servizio di multiplexing supportato da TCP consiste nel far coesistere più sessioni contemporaneamente nello stesso PC semplicemente assegnando un numero di porta alle varie applicazioni.

       Col full-duplex TCP consente contemporaneamente la trasmissione e la ricezione senza attendere un segnale di inversione come avviene nella half-duplex.

       La chiusura garbata consiste nell’attesa del riconoscimento di tutti i dati prima di interrompere la connessione tra due host.

 

5.6.2. Segmento di TCP

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

 

Tabella 18. - 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)

URG

ACK

PSH

RST

SYN

FIN

 

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 prossimo segmento che ci si aspetta di ricevere dal TCP trasmettitore. In pratica il TCP ricevitore ha incassato e riconosciuto correttamente una quantità di byte pari a: numero di riconoscimento – 1.

       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:

 

·      URG: campo puntatore d’urgenza;

·      ACK: riconoscimento;

·      PSH: funzione di impilaggio (push);

·      RST: connessione da reinizializzare;

·      SYN: numeri di sequenza da sincronizzare;

·      FIN: il mittente non ha più dati da trasmettere.

 

       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.

       Il campo riempimento permette all’intestazione di essere un multiplo intero di 32.

       L’ultimo campo contiene i dati.

 

5.6.3. Operazioni di gestione di TCP

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

·      apertura;

·      trasferimento dati;

·      chiusura.

       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.42 nella quale si indica con ULP (Upper Layer Protocol) il protocollo dello strato superiore.

 

Fig. 42. - 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.43.

 

Fig. 43. - 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.44.

 

 

 

Fig. 44. -  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.6.4. Finestre di scorrimento

       Il semplice meccanismo della conferma di ricezione con ritrasmissione in caso di mancata ricezione ha un grosso svantaggio. Anche se i tempi di attesa sono scelti in modo ottimale, esso causa un notevole sottoutilizzo della rete.

       Infatti, indipendentemente dalla capacità della rete, i due TCP passano la maggior parte del tempo attendendo le varie conferme.

       Una tecnica di ottimizzazione usata dal TCP per rendere più efficiente il trasferimento dei dati è quella delle finestre di scorrimento (sliding window).

       Supponiamo che la finestra sia ampia 10 pacchetti. Si avvia, senza attendere conferme di ricezione, la trasmissione a raffica dei primi 10 pacchetti e poi si attendono le conferme di ricezione.

       Quando giunge a destinazione il primo pacchetto il ricevitore accusa conferma ed il trasmettitore aggiunge un undicesimo pacchetto,  poi un dodicesimo  e così via. Se un pacchetto non viene ricevuto il trasmettitore ripete l’invio e lo reinserisce nella finestra con lo stesso numero di quello che non è arrivato, tanto il destinatario può comunque riordinare i pacchetti utilizzando i numeri di sequenza.

       Se si scegliesse una dimensione della finestra tale da impegnare continuamente il canale trasmissivo si sfrutterebbe al massimo la capacità dello stesso.

       In pratica questo sistema divide la sequenza di pacchetti in tre fasce.

       La prima è rappresentata dai pacchetti spediti e di cui si è avuta la conferma di ricezione. La seconda è formata dai pacchetti spediti ma dei quali non si sa ancora niente.

La terza è formata dai pacchetti ancora da spedire.

       Con questa tecnica il TCP mantiene un timer per ogni singolo pacchetto che appartiene alla seconda fascia. Il nome "Finestra di scorrimento" deriva dal fatto che è come se ci fosse una finestra ampia quanto l’insieme di pacchetti che possono essere spediti senza attendere la conferma dell’avvenuta ricezione e che scorre in avanti un pacchetto alla volta ogni qual volta arriva una conferma.

       Anche in questo caso, come in quello del tempo di attesa prima di ritrasmettere un pacchetto, le dimensioni della finestra di scorrimento rappresentano un fattore critico per determinare l’efficienza del sistema. In generale, se le dimensioni della finestra sono maggiori del tempo di attesa per il singolo pacchetto, allora la finestra continua a scorrere regolarmente senza interruzioni, salvo nel caso di ritrasmissioni, e la capacità di carico della rete viene sfruttata al massimo.

       Le dimensioni della finestra di scorrimento non sono fisse ma variano nel tempo in funzione della capacità di ricezione del destinatario. Ogni conferma di ricezione che ritorna al mittente contiene una soglia di capacità (window advertisement) che contiene il numero di ulteriori ottetti che il destinatario è in grado di ricevere.

       In pratica questo meccanismo permette di adattare la finestra di spedizione alle dimensioni del buffer di ricezione.

       È un meccanismo di controllo del flusso dei dati che limita il numero dei dati in ingresso man mano che il buffer di ricezione si riempie fino a poter interrompere temporaneamente la trasmissione nel caso che si sia raggiunta la massima capacità di ricezione del destinatario.

       Il campo finestra nella trama TCP è di 16 bit per cui la dimensione massima della finestra è di 65536byte.

       Poiché la trasmissione è full-duplex si devono considerare due finestre di scorrimento: una per i dati in ricezione ed una per quelli in trasmissione. I due protocolli TCP dei due host che scambiano dati dovranno tener conto sia dei contatori della finestra in ricezione che di quella in trasmissione.

       Per trasmissioni velocissime il limite della finestra ampia non più di 64Kbyte è un serio problema. Infatti nel caso di trasmissioni satellitari il tempo di attesa di ACK è dell’ordine di 200-300ms  e l’intera finestra è stata ricevuta in un tempo assai inferiore. Il mittente resta inattivo per oltre l’80-90% del tempo. Una finestra più lunga consentirebbe al trasmettitore di inviare più dati aumentando l’efficienza del canale di comunicazione. La RFC 1323 consente di utilizzare, nella trama TCP, il campo opzioni nel quale definire il campo windows scale che permette di negoziare un fattore di scala che consente di definire la larghezza della finestra di scorrimento fino ad un massimo di 232 byte.

5.6.5. Tabella delle connessioni TCP

       La tabella delle connessioni TCP fornisce informazioni relative alle connessioni TCP esistenti. Di ogni connessione vengono fornite le seguenti informazioni:

 

Tabella 19. – Tabella delle connessioni TCP

 

Stato della

 connessione

Indirizzo

 locale

Porta

locale

Indirizzo

remoto

Porta

remota

Connessione 1

 

 

 

 

 

Connessione 2

 

 

 

 

 

Connessione 3

 

 

 

 

 

Connessione n

 

 

 

 

 

 

5.6.6. Numero di porte

       Quando il protocollo TCP crea una connessione identifica una coppia di punti di accesso definita socket.

       I due elementi del socket sono l’indirizzo IP ed il numero di porta.

       Quest’ultimo è un campo numerico lungo 16 bit e corrisponde, per analogia,  ad un indirizzo di I/O del computer. È  possibile definire un numero di porte fino a 65536 (216).

       Le porte riservate ai servizi standard hanno una numerazione inferiore a 256.

       Si riportano nella seguente tabella 20 i numeri di porte relativi ai più importanti servizi internet.  Maggiori informazioni sono reperibili sul sito: 

http://www.faqs.org/rfcs/rfc1060.html

 

 

Tabella 20

Numero di porta

Servizio

7

Echo

20

FTP (dati)

21

FTP (controlli)

23

Telnet

25

SMTP

80

HTTP

110

POP3

119

NNTP

 

5.7. Protocollo UDP

       Il Protocollo UDP (User Datagram Protocol) è classificato come protocollo senza connessione. La documentazione è disponibile nella RFC768 sul sito http://www.faqs.org/rfcs/rfc768.html

       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/demultiplatore.

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

 

Tabella 21. - 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 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.


5.6 Protocollo TCP

5.6.2 Segmento di TCP

5.6.3 Operazioni di gestione di TCP

5.6.4 Finestre di scorrimento

5.6.6 Numero di porte

5.7 Protocollo UDP


a cura del prof. Giuseppe Spalierno, docente di Elettronica - ultima versione febbraio 2005