[successivo] [precedente] [indice]

Transmission Control Protocol

Il protocollo TCP fornisce un servizio connection oriented alla comunicazione tra due stazioni. Il documento di riferimento e' RFC793.

TCP fornisce affidabilita' alla comunicazione:

TCP non interpreta i dati del messaggio che l'applicativo ad alto livello gli fornisce per trasmetterli. Se l'applicativo compie piu' operazioni di scrittura, TCP puo' aggregare le scritture in un unico segmento, senza delimitatori. I dati sono una sequenza byte stream semplice.

La Testata TCP

Il segmento TCP e' incapsulato in un datagramma IP.

La lunghezza della testata TCP e' di 20 byte.

I campi Porto Sorgente e Porto Destinazione identificano gli applicativi intercomunicanti. Questi due campi, uniti ai campi Indirizzo Sorgente ed Indirizzo destinazione, identificano univocamente una connessione.

La combinazione Porto e corrispondente Indirizzo IP sono chiamati un socket, che descrive uno dei due capi di una comunicazione.

Una connessione e' identificata da una coppia di socket.

Il Numero di Sequenza 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.

Il Numero di Conferma e' il numero di sequenza che il ricevente si attende di ricevere nel prossimo segmento. TCP e' full-duplex ed il numero di conferma si riferisce all'altra meta' della comunicazione, nell'altro senso.

La Lunghezza e' la lunghezza della testata, comprensiva di opzioni, misurata in parole da 32 bit. La dimensione massima della testata e' di 60 byte, senza opzioni la lunghezza e' di 30 byte.

I Flag sono sei:

Il campo Dimensione Finestra esprime la lunghezza della finestra di trasmissione in byte. TCP e' un protocollo a finestra di trasmissione scorrevole senza ritrasmissione selettiva.

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

Il Puntatore Dati Urgenti e' lo offset da aggiungere al Numero di Sequenza per ottenere il numero di sequenza dell'ultimo byte di dati urgenti. TCP offre la possibilita' di indicare dati di emergenza.

Vi sono varie opzioni ammissibili, di cui la piu' importante e' l'indicazione della dimensione massima di segmento (Maximum Segment Size - MSS). Questa opzione viene normalmente scambiata nel primo segmento di una connessione.

Il campo dati e' opzionale e in alcuni casi non viene usato. In tal caso il segmento TCP serve allo scambio di informazioni di controllo.

Il Flag di Push

Questo flag serve ad indicare l'urgenza dei dati inviati o ricevuti. All'invio, i segmenti con questo flag vengono subito inviati senza attendere il riempirsi del buffer di trasmissione. Alla ricezione vengono subito passati all'applicativo ricevente.

In realta' il flag di Push non e' usato nelle implementazioni moderne come da specifiche e non vi e' una opzione dell'interfaccia API di programmazione per indicare il settaggio del flag. Le versioni Berkeley settano il flag di Push in quasi tutte le operazioni di write, ma lo ignorano in ricezione poiche' normalmente passano subito i dati all'applicativo.

Opzioni TCP

Le uniche opzioni previste nella specifica originale erano No Option, End of Options e Maximum Segment Size. Nuove specifiche TCP, in particolare nel documento RFC1323, hanno definito opzioni aggiuntive.

Ogni opzione inizia con un byte di Tipo. Alcune opzioni sono Seguite da un byte di Llunghezza, che specifica la lunghezza dell'intera opzione, e da altri campi.

L'opzione No Option serve come pad per portare il campo opzioni ad un multiplo di 32 bit.

Le opzioni sono usate in estensioni sperimentali al protocollo TCP.