Passa al contenuto principale

3. Specifica funzionale (Functional Specification)

Questo capitolo descrive la specifica funzionale di TCP, inclusi il formato dell'intestazione, le definizioni delle opzioni, la gestione dei numeri di sequenza, la gestione delle connessioni e i meccanismi di trasmissione dei dati.

3.1. Formato dell'intestazione (Header Format)

I segmenti TCP vengono inviati come datagrammi internet. L'intestazione del protocollo Internet (Internet Protocol, IP) contiene diversi campi informativi, inclusi gli indirizzi degli host di origine e destinazione. Un'intestazione TCP segue le intestazioni IP, fornendo informazioni specifiche per TCP.

Struttura dell'intestazione TCP

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |C|E|U|A|P|R|S|F| |
| Offset| Rsrvd |W|C|R|C|S|S|Y|I| Window |
| | |R|E|G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| [Options] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ Data /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Descrizioni dei campi

Source Port (Porta di origine): 16 bit

  • Il numero di porta di origine

Destination Port (Porta di destinazione): 16 bit

  • Il numero di porta di destinazione

Sequence Number (Numero di sequenza): 32 bit

  • Il numero di sequenza del primo ottetto di dati in questo segmento (tranne quando il flag SYN è impostato)
  • Se SYN è impostato, il numero di sequenza è il numero di sequenza iniziale (Initial Sequence Number, ISN) e il primo ottetto di dati è ISN+1

Acknowledgment Number (Numero di acknowledgment): 32 bit

  • Se il bit di controllo ACK è impostato, questo campo contiene il valore del prossimo numero di sequenza che il mittente del segmento si aspetta di ricevere
  • Una volta stabilita una connessione, questo viene sempre inviato

Data Offset (Offset dati): 4 bit

  • Il numero di parole a 32 bit nell'intestazione TCP
  • Indica dove iniziano i dati
  • L'intestazione TCP (anche una che include opzioni) ha una lunghezza che è un multiplo intero di 32 bit

Reserved (Riservato): 4 bit

  • Un insieme di bit di controllo riservati per uso futuro
  • Deve (must) essere zero nei segmenti generati
  • Deve (must) essere ignorato nei segmenti ricevuti se le corrispondenti funzionalità future non sono implementate dall'host mittente o ricevente

Control Bits (Bit di controllo): I bit di controllo sono anche noti come "flag". L'assegnazione è gestita dall'IANA dal registro "TCP Header Flags". I bit di controllo attualmente assegnati sono CWR, ECE, URG, ACK, PSH, RST, SYN e FIN.

  • CWR (Congestion Window Reduced, finestra di congestione ridotta): 1 bit

    • Vedi RFC 3168
  • ECE (ECN-Echo, eco ECN): 1 bit

    • Vedi RFC 3168
  • URG (Urgent, urgente): 1 bit

    • Il campo del puntatore urgente è significativo
  • ACK (Acknowledgment, riconoscimento): 1 bit

    • Il campo di acknowledgment è significativo
  • PSH (Push, push): 1 bit

    • Funzione push
  • RST (Reset, reset): 1 bit

    • Resetta la connessione
  • SYN (Synchronize, sincronizza): 1 bit

    • Sincronizza i numeri di sequenza
  • FIN (Finish, termina): 1 bit

    • Niente più dati dal mittente

Window (Finestra): 16 bit

  • Il numero di ottetti di dati a partire da quello indicato nel campo di acknowledgment che il mittente di questo segmento è disposto ad accettare
  • Il valore viene spostato quando viene utilizzata l'estensione di scaling della finestra
  • La dimensione della finestra deve (MUST-1) essere trattata come un numero senza segno, altrimenti le grandi dimensioni della finestra appariranno come finestre negative e TCP non funzionerà

Checksum (Checksum): 16 bit

  • Il complemento a uno a 16 bit della somma del complemento a uno di tutte le parole a 16 bit nell'intestazione e nel testo
  • Il checksum TCP non è mai opzionale
  • Il mittente deve (MUST-2) generarlo e il ricevitore deve (MUST-3) verificarlo

Urgent Pointer (Puntatore urgente): 16 bit

  • Comunica il valore corrente del puntatore urgente come offset positivo dal numero di sequenza in questo segmento
  • Il puntatore urgente punta al numero di sequenza dell'ottetto successivo ai dati urgenti
  • Questo campo deve essere interpretato solo nei segmenti con il bit di controllo URG impostato

Options (Opzioni): Lunghezza variabile

  • Le opzioni possono occupare spazio alla fine dell'intestazione TCP e hanno una lunghezza multipla di 8 bit
  • Tutte le opzioni sono incluse nel checksum

Nota: Questo capitolo è molto esteso. La specifica funzionale completa include definizioni delle opzioni, panoramica della terminologia, gestione dei numeri di sequenza, stabilimento della connessione, chiusura della connessione, segmentazione, comunicazione dati, interfacce e elaborazione degli eventi. Si prega di fare riferimento al capitolo 3 completo di RFC 9293 per tutti i dettagli.


3.2. Opzioni obbligatorie

Le implementazioni TCP devono (MUST-4) supportare le seguenti opzioni:

KindLengthSignificato
0-Fine dell'elenco delle opzioni (End of Option List)
1-Nessuna operazione (No-Operation)
24Dimensione massima del segmento (Maximum Segment Size)

3.3. Stati di connessione

Una connessione TCP progredisce attraverso una serie di stati durante la sua vita:

  • CLOSED - Rappresenta nessuno stato di connessione
  • LISTEN - In attesa di una richiesta di connessione da qualsiasi TCP remoto e porta
  • SYN-SENT - In attesa di una richiesta di connessione corrispondente dopo aver inviato una richiesta di connessione
  • SYN-RECEIVED - In attesa di un acknowledgment di conferma della richiesta di connessione dopo aver sia ricevuto che inviato una richiesta di connessione
  • ESTABLISHED - Rappresenta una connessione aperta, i dati ricevuti possono essere consegnati all'utente
  • FIN-WAIT-1 - In attesa di una richiesta di terminazione della connessione dal TCP remoto, o di un acknowledgment della richiesta di terminazione della connessione precedentemente inviata
  • FIN-WAIT-2 - In attesa di una richiesta di terminazione della connessione dal TCP remoto
  • CLOSE-WAIT - In attesa di una richiesta di terminazione della connessione dall'utente locale
  • CLOSING - In attesa di un acknowledgment della richiesta di terminazione della connessione dal TCP remoto
  • LAST-ACK - In attesa di un acknowledgment della richiesta di terminazione della connessione precedentemente inviata al TCP remoto
  • TIME-WAIT - In attesa che passi tempo sufficiente per essere sicuri che il TCP remoto abbia ricevuto l'acknowledgment della sua richiesta di terminazione della connessione

Per il contenuto completo del capitolo 3, si prega di fare riferimento al documento ufficiale RFC 9293, che include informazioni dettagliate su:

  • Definizioni ed elaborazione delle opzioni
  • Meccanismi dei numeri di sequenza
  • Handshake a tre vie per lo stabilimento della connessione
  • Handshake a quattro vie per la chiusura della connessione
  • Segmentazione e riassemblaggio dei dati
  • Controllo di flusso e controllo della congestione
  • Meccanismi di ritrasmissione
  • Specifiche dell'interfaccia utente
  • Logica di elaborazione degli eventi