Il
Transmission Control Protocol (TCP) è il primo protocollo del livello di trasporto dello
stack ISO/OSI che introduciamo in questo tutorial sulle reti. Le sue
caratteristiche sono illustrate nella
RFC 793, di cui è disponibile anche una
traduzione in italiano.
Il
protocollo TCP è noto anche come
TCP/IP, ma sarebbe meglio parlare di
suite di protocolli, in quanto il
protocollo TCP e il
protocollo IP non costituiscono un'entità unica, e appartengono anche a due diversi livelli del
modello ISO/OSI.
Il motivo della diffusione di tale denominazione è da ricondurre all'introduzione dei due protocolli prima che il
modello ISO/OSI vedesse la luce, grazie al lavoro di
Vinton Cerf e
Bob Kahn all'interno del
Defense Advanced Research Projects Agency (DARPA); ulteriori dettagli sulla
storia del TCP/IP sono consultabili sul
sito Living Internet.
Il
protocollo TCP è orientato a fornire una connessione, che garantisce un
canale di comunicazione affidabile fra una coppia di processi in esecuzione, ad esempio un server web e un browser, ai quali fornisce un canale su cui inviare e ricevere flussi di dati in modalità
full-duplex. È compito del
protocollo TCP provvedere alla gestione della comunicazione mediante il
protocollo IP del livello rete, che fornisce il trasferimento e l'instradamento del pacchetto fino a destinazione.
Una delle caratteristiche salienti del
protocollo TCP è la capacità di tenere traccia dei dati trasmessi per consentire la ritrasmissione di quelle informazioni, che non sono giunte correttamente a destinazione, ovviando in tal modo alle inaffidabilità proprie del
protocollo IP; in questo senso è da intendere l'attributo affidabile usato in precedenza.
Per capire quando è necessario ritrasmettere un pacchetto di dati, il
protocollo TCP utilizza un
meccanismo di acknowledgment: se non giunge una risposta dalla destinazione entro un certo tempo limite, il pacchetto è considerato perso e viene ritrasmesso. La durata di tale tempo di attesa dipende da diverse condizioni: si va dai microsecondi tipici delle
reti Ethernet, a un paio di secondi necessari per una trasmissione su rete internet, fino a qualche minuto se volessimo tentare una trasmissione con
protocollo TCP dalla Terra a Marte, per esempio.
In tutte le moderne implementazioni del
protocollo TCP, per valutare tale intervallo di tempo viene utilizzato un
processo detto
Round-Trip Time (RTT): il sistema esegue un monitoraggio del normale scambio di pacchetti, sulla base del quale può effettuare una stima del tempo necessario a considerare come non consegnato un pacchetto. Poiché il
protocollo TCP è
orientato alla connessione, prima di poter trasmettere dei dati è necessario stabilire una connessione fra origine e destinazione; nel protocollo sono dunque definite le funzionalità necessarie a stabilire tale connessione e a terminarla quando non più necessaria.