Transmission Control Protocol
Transmission Control Protocol, TCP, è un protocollo di trasporto che offre un servizio connection-oriented affidabile, con comunicazione full-duplex, ordine di consegna garantito, conferma dell’avvenuta ricezione, controllo di flusso e controllo di congestione.
Struttura del segmento
Il pacchetto TCP, chiamato anche segmento, è composto dai seguenti campi:
- Source e destination port: i numeri di porta associati, rispettivamente, alle applicazioni mittente e destinatario del pacchetto.
- Sequence number: il numero di sequenza associato al primo byte contenuto nel campo data. Questo campo viene usato dal destinatario per capire se ci sono segmenti persi o fuori ordine.
- Acknowledgement number: conferma la ricezione dei segmenti da parte del destinatario, indicando il numero di sequenza del byte successivo che il destinatario si aspetta di ricevere. Ad esempio, un acknowledgement number pari a 201 significa che il destinatario ha ricevuto tutti i byte fino al numero 200, e si aspetta quindi di ricevere altri byte a partire dal numero 201.
- Header length: la lunghezza dell’header, espressa in parole da 32 bit.
- Il campo flags contiene 6 bit, ciascuno dei quali ha un proprio significato:
- URG indica se il segmento contiene dati urgenti
- ACK indica se il segmento contiene informazioni di riscontro (conferma) di ricezione
- PSH indica se il ricevitore deve passare immediatamente i dati al livello superiore (il livello applicativo)
- RST, SYN e FIN sono usati per stabilire e interrompere la connessinoe
- Advertised window: indica lo spazio disponibile nel buffer del ricevitore (misurato in byte). Quest’informazione è usata per il controllo di flusso.
- Checksum: un campo per il controllo degli errori.
- Urgent pointer: indica dove finiscono i dati urgenti, espresso come offset in byte rispetto al primo byte di dati del segmento
- Options: dei campi opzionali
- Data: la SDU di livello di trasporto, che corrisponde alla PDU di livello applicativo.
Creazione e rilascio della connessione
Siccome TCP è connection-oriented, prima che possa avvenire lo scambio di dati tra un client e un server è necessaria una fase di creazione (setup) della connessione. Questa avviene secondo un protocollo chiamato three-way handshake:
- Il client manda al server una richiesta di connessione, inviando un pacchetto con il flag SYN (sincronizzazione) e un qualche sequence number $x$ (ad esempio $x=100$), dal quale il client inizierà a contare i byte inviati.