Il TCP (Transmission Control Protocol, Protocollo di Controllo di Trasmissione) è un protocollo orientato alla connessione. Questo significa che il software di rete che implementa TCP deve assicurare due condizioni fondamentali:
Il programma applicativo destinatario è attivo;
Tutti i pacchetti inviati dal mittente raggiungono la loro destinazione.
Per fare questo, il protocollo TCP ha bisogno d' informazioni supplementari rispetto a quelle contenute nell' intestazione IP, e quindi aggiunge un' ulteriore intestazione ad ogni pacchetto IP da inviare.
Quest' intestazione TCP è usata dal software di rete del computer ricevente per determinare se tutti i pacchetti sono stati ricevuti correttamente. L'intestazione TCP contiene le seguenti informazioni:
Numero di porta sorgente TCP;
Numero di porta di destinazione TCP;
Numero di sequenza;
Somma di controllo TCP;
Dimensioni della finestra a scorrimento TCP;
Bit di segnalazione (flag).
I numeri di porta TCP d' origine e di destinazione identificano le applicazioni che stanno comunicando attraverso la connessione TCP. Ogni porta rappresenta di fatto un punto di accesso a un' applicazione nel sistema. Qualunque applicazione che accetta connessioni TCP deve disporre di un proprio numero di porta, che deve essere specificato (insieme, ovviamente, all’ indirizzo IP della macchina su cui si trova l’applicazione) dagli altri programmi applicativi che devono contattarla. Alcune applicazioni che realizzano servizi standard (ad esempio, i server Web) usano numeri di porta convenzionali, i cosiddetti numeri di porta well known, che sono assegnati da un apposito organismo internazionale (Internet Application Board - IAB). Esempi di questi well known port sono 21 per i servizi FTP, 23 per telnet e 80 per i server Web. Ovviamente, chi sviluppa proprie applicazioni di rete può usare il numero di porta che preferisce, purché sia superiore a 1024 (i numeri inferiori sono infatti riservati, fino a 256, ai well-known port e per i valori superiori ad applicazioni di sistema). Una lista delle porte well-known attualmente assegnate è reperibile a ftp://ds.internic.net/rfc/rfc1060.txt (documento RFC 1060). Spesso, gli utenti che usano applicazioni di rete (come Internet Explorer o Netscape) non si accorgono dell’ esistenza dei numeri di porta well-known, perché l’ applicazione li aggiunge automaticamente agli indirizzi. Il meccanismo di base utilizzato sia dal TCP che da molti altri protocolli cosiddetti "affidabili" è quello della ritrasmissione in caso di mancata conferma (“positive acknowledgement with retrasmission”). Si tratta di un meccanismo concettualmente semplice: ogni qual volta uno dei due interlocutori di una connessione spedisce dei dati, questi attende una conferma dell’avvenuta ricezione. Se questa arriva entro un tempo stabilito viene spedito il pacchetto successivo, altrimenti l’applicazione rispedisce quello precedente. Tale tempo viene misurato con un timer che viene fatto partire ogni volta che un pacchetto è spedito. Questo meccanismo risolve il problema dei pacchetti persi o danneggiati, ma può crearne un altro, quello della duplicazione dei pacchetti. Questo problema viene risolto facendo numerare sequenzialmente al mittente tutti i pacchetti da spedire e facendo verificare al destinatario la sequenza ricevuta. Questo non vale solo per i messaggi ma anche per le conferme agli stessi, in quanto anche una conferma potrebbe venire erroneamente duplicata. Il numero di sequenza nell' intestazione TCP stabilisce quindi l' ordine che la destinazione deve usare per riassemblare i segmenti. Quando al computer ricevente perviene un pacchetto IP, il ricevente risponde al mittente con un piccolo pacchetto di conferma detto ACK (ACKnowledgment) o conferma di ricezione. Il numero di ciascuna conferma di ricezione coincide con il numero di sequenza del pacchetto che è stato ricevuto, più uno. Ogni intestazione TCP contiene anche un numero detto somma di controllo (checksum), che è calcolato in base al contenuto del pacchetto di dati. La somma di controllo è ricalcolata alla destinazione e se le due somme di controllo corrispondono, questo significa che l'intero pacchetto di dati è stato ricevuto correttamente. Se le somme di controllo non corrispondono, il pacchetto è rifiutato e l'ACK per quel pacchetto non è inviata al mittente. Il mancato ACK viene rilevato dal mittente: se non riceve una conferma di ricezione per ogni pacchetto che ha trasmesso, il mittente rimanda il pacchetto in questione. Il meccanismo della conferma di ricezione con ritrasmissione ha però 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 interlocutori passano la maggior parte del tempo attendendo le varie conferme. Una tecnica di ottimizzazione usata dal TCP per rendere più efficiente il meccanismo della conferma di ricezione con ritrasmissione è quella delle finestre di scorrimento (sliding window): 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, e 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. Per saperne di più consulta i seguenti approfondimenti:
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.