Transmission Control Protocol

protocollo di trasmissione dati su internet

Template:Link AdQ

Transmission Control Protocol (TCP) è il protocollo di trasporto, definito nel RFC 793, su cui si appoggiano gran parte delle applicazioni Internet.

Il TCP è un protocollo corrispondente al livello 4 (trasporto) del modello di riferimento OSI, e di solito è usato in combinazione con il protocollo di livello 3 (rete) IP. La corrispondenza con il modello OSI non è perfetta, in quanto il TCP e l'IP nascono prima. La loro combinazione è indicata come TCP/IP ed è, alle volte, erroneamente considerata un unico protocollo.

Il TCP nacque nel 1970 come frutto del lavoro di un gruppo di ricerca del dipartimento di difesa statunitense. I suoi punti di forza sono l'alta affidabilità e robustezza. La sua popolarità si deve anche grazie ad una sua implementazione diffusa dalla Berkeley University of California sotto forma di sorgenti.

Le caratteristiche principali del TCP sono:

  • La creazione di una connessione (protocollo orientato alla connessione)
  • La gestione di connessioni punto-punto
  • La garanzia che i dati trasmessi giungano a destinazione in ordine e senza perdita di informazione (tramite il meccanismo di acknowlegment e ritrasmissione)
  • Attraverso il meccanismo della finestra scorrevole, offre funzionalità di controllo di flusso e controllo della congestione, vitali per il buon utilizzo della rete IP, che non offre alcuna garanzia in ordine alla consegna dei pacchetti, al ritardo, alla congestione.
  • Una funzione di multiplazione delle connessioni ottenuta attraverso il meccanismo delle porte.

TCP header

Struttura dell'header di un segmento TCP
Struttura dell'header di un segmento TCP

L'header di un segmento TCP è così strutturato:

  • Porta sorgente (Source port) [16 bit]
  • Porta di destinazione (Destination port) [16 bit]
  • Numero di sequenza (Sequence number) [32 bit], indica la posizione del primo byte di dati del segmento TCP all'interno del flusso completo; se il flag SYN è settato, il valore del sequence number corrisponde all'Initial Sequence Number (ISN);
  • Numero di acknowledgment (Acknowledgment number) [32 bit], contiene il valore del prossimo sequence number che la sorgente del segmento TCP è in attesa di ricevere ed è utilizzato congiuntamente al flag ACK;
  • Data offset [4 bit], indica la lunghezza (in word da 32 bit) dell'header del segmento TCP;
  • 6 bit riservati (Reserved), non utilizzati e predisposti per sviluppi futuri del protocollo;
  • Bit di controllo (Control bits) [6 bit], possono essere settati ad 1 o 0 e indicano:
    • URG: il valore dell'urgent pointer è valido;
    • ACK: il valore dell'acknowledgment number è valido;
    • PSH: l'host che riceve il segmento TCP deve provvedere a trasferire i dati al Livello applicazioni il più velocemente possibile;
    • RST: reset della connessione;
    • SYN: se settato, indica che si tratta del primo segmento della connessione;
    • FIN: se settato, indica che si tratta dell'ultimo segmento della connessione;
  • Finestra (Windows) [16 bit], indica il numero di byte che il destinatario è in grado di accettare a partire dal byte indicato dall'acknowledgment number;
  • Checksum [16 bit], utilizzato per il controllo della validità del segmento;
  • Urgent pointer [16 bit], puntatore al sequence number di dati con priorità di trasferimento;
  • Opzioni (facoltative)
  • Padding, utilizzato per completare i bit non utilizzati dalle opzioni

Instaurazione della connessione

 
Three-way handshake

La procedura utilizzata per instaurare in modo affidabile una connessione TCP tra due host è chiamata three-way handshake (triplice stretta di mano), ad indicare la necessità di scambiare tre messaggi per garantire la corretta creazione della connessione. Supponiamo, per esemplificare, che l'host A (il client) intenda instaurare una comunicazione TCP con l'host B (il server); i passi indicati dalla tecnica three-way handshake sono:

  1. A invia un segmento SYN a B, contenente il suo sequence number x;
  2. B invia un segmento SYN/ACK ad A, contenente il suo sequence number y e l'acknowledgment del sequence number x di A;
  3. A invia un segmento ACK a B con l'acknowldedgment del sequence number y di B.

Collegamenti esterni

  • RFC 793 Transmission Control Protocol Specifications