01. TCP

Caratteristiche del protocollo

Il protocollo TCP (Transmission Control Protocol) è utilizzato per il trasporto affidabile di dati, anche di grosse dimensioni, tra applicazioni presenti sugli host.

TCP offre un servizio orientato alla connessione e le applicazioni accedono ai dati percependoli come un flusso ordinato e corretto, come descritto di seguito.

Orientato alla connessione

TCP è un protocollo orientato alla connessione e richiede che due applicazioni presenti su host diversi, prima di iniziare la trasmissione dei dati, instaurino una connessione, detta Handshake (stretta di mano). In questa operazione vengono trasferite informazioni preliminari per poi poter garantire un servizio di consegna dei pacchetti affidabile.

I segmenti TCP sono inviati al destinatario, identificato da un indirizzo IP e da una porta. Le porte sono identificate tramite un numero e sono associate univocamente ad una applicazione.

Le porta comprese tra 0 e 1023 sono assegnate a servizi standard.

Full-duplex

TCP consente una comunicazione di tipo full-duplex tra mittente e destinatario; inoltre, più flussi di dati, con direzione diverse, possono coesistere contemporaneamente, anche tra più applicazioni. Ad esempio, una generica applicazione presente su un host potrà trasmettere dati ad un'altra applicazione e, contestualmente, ricevere dati da una terza applicazione senza che ciò mini l'affidabilità della trasmissione.

Connessione point-to-point

Si può definire una generica connessione TCP come una connessione di tipo point-to-point, cioè relativa ad una sola sorgente e una sola destinazione.

Gestione di flussi di dati

TCP è un protocollo orientato al flusso, nel senso che le applicazione che utilizzano i servizi di questo protocollo percepiscono i dati trasmessi come un flusso di byte ordinati e corretti.

Trasferimento affidabile dei dati

Viene garantito un servizio di dati affidabile, questo significa che tutti i dati inviati dal mittente sono recapitati al destinatario in modo completo e senza errori. Nel caso in cui, durante la trasmissione, alcuni dati dovessero andare perduti e dovessero corrompersi, TCP si occuperà di rilevare questa mancanza in ricezione e implementerà un meccanismo di recupero.

Riordinamento dei pacchetti

Questa funzionalità è estremamente importante per la corretta comprensione del messaggio da parte dell'applicazione di destinazione. Infatti può accadere che i pacchetti contenenti l'informazione subiscano ritardi all'interno della rete per via del congestionamento della stessa e, quindi, può accadere che arrivino alla destinazione non in ordine. In questi casi TCP si preoccupa di riordinare i pacchetti e consegnarli nel giusto ordine.

Controllo del flusso

Il TCP controlla che un host più veloce nella trasmissione dati non mandi in overflow il buffer di ricezione di un altro host più lento. Infatti se il TCP si accorge che l'applicazione dell'host destinazione ha difficoltà nella lettura dei dati presenti nel buffer di ricezione, abbassa la frequenza di trasmissione del mittente al fine di equilibrare le prestazioni dei due host.


Header del segmento TCP

Notiamo che il Source IP Address e Destination IP Address non sono presenti nell'header TCP, come ci si potrebbe aspettare, ma contenuti nell'header del datagram IP in cui il segmento TCP è imbustato.

Il significato di alcuni campi dell'header è descritto di seguito:

    • Sequence Number consente di numerare i segmenti che trasportano parti dello stesso messaggio.

    • Acknowledgement number è un campo utilizzato per segnalare quali pacchetti sono stati ricevuti correttamente fino a quel momento.

    • Window size indica la dimensione della finestra di ricezione dell'host mittente, cioè il numero di byte che il mittente è in grado di accettare.

    • Header len indica la lunghezza (in word da 32 bit) dell'header del segmento TCP; tale lunghezza può variare da 5 word (20 byte) a 15 word (60 byte) a seconda della presenza e della lunghezza del campo facoltativo Options.

    • Flags: con le lettere C, E, U, A, P, R, S, F si sono indicati 8 flag.

    • Options: è un campo opzionale la cui dimensione può variare da 0 a 10 word (da 32 bit).

    • Checksum: consente di verificare l'integrità sia dell'header che della parte dati. Si ricordi che IP non effettua alcuna verifica di integrità sul suo Payload.

Nota

Nel calcolo del checksum è incluso uno pseudo-header costituito da 12 byte

Lo pseudo-header non viene inviato, né la sua presenza influenza il campo lunghezza nell'header UDP ma ha solo lo scopo di migliorare il controllo sugli indirizzi coinvolti.