Il protocollo TCP (v. RFC 793) fornisce un meccanismo di comunicazione di tipo connesso (connection-oriented), cioè la comunicazione tra due socket A e B avviene soltanto dopo aver stabilito una connessione tra i socket stessi. La connessione (connection) tra due socket è univocamente identificata dall’insieme dei socket considerati, ovvero dalla tupla <indirizzo IP mittente, porta mittente, indirizzo IP destinatario, porta destinatario>.
La comunicazione tra i socket è di tipo full-duplex, ovvero il flusso dei pacchetti può avvenire contemporaneamente in entrambe le direzioni (da A a B e da B ad A). Si tratta inoltre di un protocollo affidabile (reliable), nel senso che è gestito un meccanismo che garantisce il recapito dei pacchetti dall’interfaccia mittente a quella di destinazione ed un sistema di ritrasmissione automatica dei pacchetti nel caso in cui non si riceva dal destinatario una conferma dell’avvenuta consegna entro un certo tempo.
Ogni byte trasmesso, viene associato ad un numero detto sequence number, incrementato dal trasmittente. Inoltre il ricevente comunica a sua volta un valore, detto window, che specifica il numero di byte che si aspetta di ricevere dal trasmittente.
Il ricevente deve comunque comunicare al mittente la ricezione dei pacchetti inviati, mediante un meccanismo di acknowledge cumulativo, riferito ad un valore di sequence number: l’acknowledge relativo ad un sequence number X indica che si sono ricevuti tutti i byte relativi ai sequence number precedenti ad X (X è escluso).