2. Introduzione (Introduction)
La RFC 793 contiene una discussione sugli obiettivi di progettazione di TCP e fornisce esempi del suo funzionamento, inclusi esempi di stabilimento di connessione (Connection Establishment), terminazione di connessione (Connection Termination) e ritrasmissione di pacchetti (Packet Retransmission) per riparare le perdite.
Questo documento descrive la funzionalità di base attesa nelle implementazioni TCP moderne e sostituisce la specifica del protocollo nella RFC 793. Non replica né tenta di aggiornare il contenuto introduttivo e filosofico nelle sezioni 1 e 2 della RFC 793. Altri documenti sono referenziati per fornire spiegazioni sulla teoria del funzionamento, motivazione e discussione dettagliata delle decisioni di progettazione. Questo documento si concentra solo sul comportamento normativo del protocollo.
La "TCP Roadmap (Roadmap TCP)" [49] fornisce una guida più estesa alle RFC che definiscono TCP e descrivono vari algoritmi importanti. La TCP Roadmap contiene sezioni su miglioramenti fortemente incoraggiati che migliorano le prestazioni e altri aspetti di TCP oltre al funzionamento di base specificato in questo documento. Come esempio, l'implementazione del controllo della congestione (Congestion Control) (ad esempio, [8]) è un requisito TCP, ma è un argomento complesso di per sé e non è descritto in dettaglio in questo documento, poiché ci sono molte opzioni e possibilità che non influenzano l'interoperabilità di base. Allo stesso modo, la maggior parte delle implementazioni TCP oggi include le estensioni ad alte prestazioni in [47], ma queste non sono strettamente richieste o discusse in questo documento. Le considerazioni multipath (Multipath) per TCP sono anche specificate separatamente in [59].
Un elenco delle modifiche rispetto alla RFC 793 è contenuto nella sezione 5.
2.1. Linguaggio dei requisiti (Requirements Language)
Le parole chiave "MUST" (deve), "MUST NOT" (non deve), "REQUIRED" (richiesto), "SHALL" (deve), "SHALL NOT" (non deve), "SHOULD" (dovrebbe), "SHOULD NOT" (non dovrebbe), "RECOMMENDED" (raccomandato), "NOT RECOMMENDED" (non raccomandato), "MAY" (può) e "OPTIONAL" (opzionale) in questo documento devono essere interpretate come descritto nel BCP 14 [3] [12] quando, e solo quando, appaiono in maiuscolo, come mostrato qui.
Ogni uso delle parole chiave RFC 2119 nel documento è individualmente etichettato e referenziato nell'appendice B, che riassume i requisiti di implementazione.
Le frasi che utilizzano "MUST" sono etichettate come "MUST-X" con X che è un identificatore numerico che consente di individuare facilmente il requisito quando referenziato dall'appendice B.
Allo stesso modo, le frasi che utilizzano "SHOULD" sono etichettate con "SHLD-X", "MAY" con "MAY-X" e "RECOMMENDED" con "REC-X".
Ai fini di questa etichettatura, "SHOULD NOT" e "MUST NOT" sono etichettati allo stesso modo delle istanze "SHOULD" e "MUST".
2.2. Concetti chiave di TCP (Key TCP Concepts)
TCP fornisce un servizio di flusso di byte (Byte-Stream Service) affidabile (Reliable) e ordinato (In-Order) alle applicazioni.
Il flusso di byte dell'applicazione viene trasmesso sulla rete tramite segmenti TCP (TCP Segments), con ciascun segmento TCP inviato come datagramma del protocollo Internet (Internet Protocol, IP).
L'affidabilità di TCP consiste nel rilevare perdite di pacchetti (tramite numeri di sequenza (Sequence Numbers)) ed errori (tramite checksum per segmento (Per-Segment Checksums)), nonché nella correzione tramite ritrasmissione (Retransmission).
TCP supporta la consegna unicast (Unicast Delivery) dei dati. Esistono applicazioni anycast (Anycast) che possono utilizzare con successo TCP senza modifiche, sebbene vi sia un certo rischio di instabilità a causa di cambiamenti nel comportamento di inoltro del livello inferiore [46].
TCP è orientato alla connessione (Connection Oriented), sebbene non includa intrinsecamente una capacità di rilevamento della vitalità (Liveness Detection Capability).
Il flusso di dati è supportato bidirezionalmente (Bidirectionally) sulle connessioni TCP, sebbene le applicazioni siano libere di inviare dati solo unidirezionalmente, se lo desiderano.
TCP utilizza numeri di porta (Port Numbers) per identificare i servizi applicativi (Application Services) e per multiplexare flussi distinti (Distinct Flows) tra gli host.
Una descrizione più dettagliata delle funzionalità TCP rispetto ad altri protocolli di trasporto può essere trovata nella sezione 3.1 di [52]. Un'ulteriore descrizione delle motivazioni per lo sviluppo di TCP e del suo ruolo nello stack di protocolli Internet può essere trovata nella sezione 2 di [16] e nelle versioni precedenti della specifica TCP.