Consulenze presso Eunet srl, via dell'Artigianato 15, 09122 Cagliari 070 753609 Lun - Ven 08:30-13:00 / 14.30-17.00

Il protocollo TCP

Il protocollo TCP è il principale protocollo di trasporto utilizzato su Internet. Fornisce un servizio connection oriented, ossia orientto alla connessione, diversamente dall’IP che è invece connetionless.

Orientato alla connessione significa che, nella comunicazione tra due host, TCP fornisce affidabilità prevedendo che il ricevente confermi la ricezione dei dati inviati oppure richieda la ritrasmissione degli stessi in quanto non ricevuti.

Il servizio che TCP offre è full-duplex poiché trasmissione e ricezione vengono consentite contemporaneamente.  TCP è in grado di servire più protocolli di livello superiore, permettendo in sostanza l’utilizzo contemporaneo del protocollo stesso da parte di più applicazioni. Quest’ultimo meccanismo prevede che a ciascuno dei processi di livello superiore che accedono ai servizi TCP sia associato un identificatore, detto porta. La connessione tra un indirizzo IP e una porta specifica di TCP che porta al livello applicativo è detta socket.

 

Tramite TCP:

  • I dati sono suddivisi in porzioni chiamate datagrammi, a cui viene aggiunta un’intestazione (header) contenente informazioni per il controllo di flusso e di connessione.

  • Esiste un timer associato alla trasmissione. Il ricevente deve inviare una conferma di ricezione entro un tempo limite dall'invio pacchetto.

  • Nell’intestazione esiste un campo checksum per la testata e i dati TCP. I pacchetti con checksum errato vengono scartati senza messaggi d'errore, di conseguenza ci sarà un timeout che prevede la ritrasmissione dei pacchetti per i quali non è stata data conferma di ricezione.

  • Ciascun pachetto trasmesso è contrassegnato da un numero di sequenza in modo da permettere la ricostruzione dell’ordine di trasmissione: in questo modo, per ottenere maggiore efficienza, i pacchetti possono essere inviati ancor prima di aver ricevuto conferma di ricezione dei precedenti. Inoltre ciascun pacchetto può seguire tempi e percorsi differenti. In ogni caso, i pacchetti ricevuti vengono riassemblati nell'ordine corretto in fase di ricezione dalla stazione di destinazione.

  • I pacchetti duplicati vengono scartati

  • Viene fornito un servizio di controllo flusso

  • I dati sono una sequenza byte stream semplice.

 

Flusso dei pacchetti: il concetto della finestra scorrevole (Sliding Window)

TCP usa un protocollo di conferma a finestra scorrevole. La stazione inviante può trasmettere pacchetti ancor prima di aver ricevuto conferma di ricezione dei precedenti. Il ricevente manda al trasmittente un ACK (Acknowledgment Number, o numero di riscontro) per ogni segmento ricevuto senza errori. La teoria prevede che, in seguito alla ricezione dell’ACK, il mittente riprenda la trasmissione con il pacchetto successivo.

Nella pratica, per ridurre il numero di conferme (ACK) ed ottimizzare lo scambio dei dati, gli host scambiano anche un numero relativo alla dimensione della finestra, detto Window size: questo numero dice quanti bytes devono essere ricevuti prima di inviare un ACK.

La dimensione della finestra viene variata in funzione degli errori e ritrasmissioni rilevate. Se gli errori sono frequenti, la finestra viene ridotta allo scopo di confermare con più frequenza un minor numero di bytes, e rispedire quindi meno segmenti. In tal caso la connessione è ovviamente più lenta.

 

La Testata TCP

Il segmento TCP e' incapsulato in un datagramma IP. La lunghezza della testata TCP e' di 20 byte.

 

Porta sorgente: indica il numero di porta utilizzato dal mittente per la trasmissione.

 

Porta di destinazione: indica il numero di porta al quale và consegnato il pacchetto.

 

Numero di Sequenza (Sequence number): identifica il byte dello stream originario rappresentato dal primo byte del segmento corrente. Il numero di sequenza e' di soli 32 bit, quindi i numeri bassi vengono riutilizzati per streams particolarmente lunghi.

 

Numero di conferma (Acknowledgement): e' il numero di sequenza che il ricevente si attende di ricevere nel prossimo segmento. TCP è full-duplex ed il numero di conferma si riferisce all'altra metà della comunicazione, nell'altro senso. In pratica indica quanti byte sono stati ricevuti dal mittente sino a quel momento. La lunghezza è quella della testata, ossia 32 bit.

 

Flags: sono sei.

  • URG - Il Puntatore Dati Urgenti e' valido

  • ACK - Il Numero Conferma e' valido

  • PSH - Il ricevente deve passare queste informazioni all'applicativo nel piu' breve tempo possibile

  • RST - Reset di connessione

  • SYN - Sincronizzare i numeri di sequenza per iniziare una connessione

  • FIN - Il trasmittente ha finito l'invio dei dati

Dimensione Finestra (Window size): esprime la lunghezza della finestra di trasmissione in byte. TCP è un protocollo a finestra di trasmissione scorrevole senza ritrasmissione selettiva: con questo campo si indica il numero di byte che il mittente può ricevere nel momento in cui spedisce il pacchetto.

 

Checksum: e' il campo di controllo consistenza, calcolato col normale algoritmo di IP, e copre l'intero segmento.

 

Puntatore Dati Urgenti: è l’offset da aggiungere al Numero di Sequenza per ottenere il numero di sequenza dell'ultimo byte di dati urgenti. TCP offre la possibilità di indicare dati di emergenza: in questo modo si indica al destinatario di leggere immediatamente il pacchetto in arrivo, lasciando perdere eventuali pacchetti arrivati in precedenza, che sono ancora in attesa di essere letti.

Opzioni: vi sono varie opzioni ammissibili, di cui la piu' importante e' l'indicazione della dimensione massima di segmento (Maximum Segment Size - MSS).

 

Gestione della Connessione TCP

Si fa uso della tecnica three-way handshake (connessione a tre fasi), con uno scambio iniziale di 3 messaggi tra host mittente e host ricevente. Le tre fasi sono:

  1. apertura

  2. uso

  3. terminazione


Apertura della Connessione

Due entità che comunicano attraverso una connessione TCP hanno ruoli diversi:

  • L'entità che avvia una nuova connessione TCP è detta client, ed invia una richiesta di connessione verso una determinata porta.

  • Affinché la connessione venga stabilita, su quella porta deve esserci un'entità server "in ascolto", che accetta di stabilire una connessione TCP.

Le porte conosciute e registrate sono quindi utilizzate dai processi server, e sono convenzionalmente associate a particolari servizi, in modo che un client sappia a quale porta connettersi per raggiungere un determinato server. Il processo server, che è in ascolto su una certa porta, rimane bloccato in attesa che un client si colleghi.

La trasmissione ha inizio lato client:

Il client genera un segmento col flag SYN settato a 1 (sincronizzazione) e specificando un numero di sequenza iniziale (ISN, Initial Sequence Number) casuale, che chiameremo X.

 

Lato server  viene generato un segmento contenente i flag SYN e ACK settati a 1, un numero di sequenza casuale che chiameremo Y, ed il campo Acknowledgment number con un valore pari a X + 1;

 

Il client risponde con un segmento contenente (nel campo ACK)  l’ISN-Y + 1, come conferma di ricezione dell’ISN del server.

 

 

 

 

Chiusura della connessione

(0 Votes)