Passa al contenuto principale

1. Introduction (Introduzione)

Il Transmission Control Protocol (TCP) è destinato all'uso come protocollo host-to-host (host-to-host protocol) altamente affidabile tra host in reti di comunicazione informatica a commutazione di pacchetto e in sistemi interconnessi di tali reti.

Questo documento descrive le funzioni da eseguire dal Transmission Control Protocol, il programma che lo implementa e la sua interfaccia con i programmi o gli utenti che richiedono i suoi servizi.


1.1. Motivation (Motivazione)

I sistemi di comunicazione informatica stanno svolgendo un ruolo sempre più importante in ambienti militari, governativi e civili. Questo documento si concentra principalmente sui requisiti di comunicazione informatica militare, in particolare sulla robustezza (robustness) in presenza di inaffidabilità della comunicazione e sulla disponibilità (availability) in presenza di congestione, ma molti di questi problemi si trovano anche nel settore civile e governativo.

Man mano che le reti di comunicazione informatica strategiche e tattiche vengono sviluppate e implementate, è essenziale fornire mezzi per interconnetterle e fornire protocolli di comunicazione interprocesso (interprocess communication protocols) standard che possano supportare un'ampia gamma di applicazioni. In previsione della necessità di tali standard, il Vice Sottosegretario alla Difesa per la Ricerca e l'Ingegneria ha dichiarato che il Transmission Control Protocol (TCP) qui descritto costituirà la base per la standardizzazione dei protocolli di comunicazione interprocesso a livello del DoD.

Caratteristiche chiave di TCP

TCP è un protocollo affidabile end-to-end orientato alla connessione (connection-oriented, end-to-end reliable protocol) progettato per adattarsi a una gerarchia stratificata di protocolli (layered hierarchy of protocols) che supportano applicazioni multi-rete. Il TCP fornisce una comunicazione interprocesso affidabile tra coppie di processi in computer host collegati a reti di comunicazione informatica distinte ma interconnesse.

TCP fa pochissime ipotesi sull'affidabilità dei protocolli di comunicazione al di sotto del livello TCP. TCP presume di poter ottenere un servizio datagramma semplice e potenzialmente inaffidabile (datagram service) dai protocolli di livello inferiore. In linea di principio, il TCP dovrebbe essere in grado di operare al di sopra di un ampio spettro di sistemi di comunicazione che vanno da connessioni cablate a reti a commutazione di pacchetto o a commutazione di circuito.

Fondamento teorico

TCP si basa su concetti descritti per la prima volta da Cerf e Kahn in [1]. Il TCP si inserisce in un'architettura di protocollo stratificata appena sopra un protocollo Internet di base (Internet Protocol, [2]) che fornisce un modo per il TCP di inviare e ricevere segmenti di informazioni (segments) di lunghezza variabile racchiusi in "buste" di datagrammi Internet (internet datagram). Il datagramma Internet fornisce un mezzo per indirizzare i TCP di origine e destinazione in reti diverse. Il protocollo Internet gestisce anche qualsiasi frammentazione (fragmentation) o riassemblaggio (reassembly) dei segmenti TCP richiesti per ottenere il trasporto e la consegna attraverso più reti e gateway di interconnessione. Il protocollo Internet trasporta anche informazioni sulla precedenza (precedence), sulla classificazione di sicurezza (security classification) e sulla compartimentazione (compartmentation) dei segmenti TCP, in modo che queste informazioni possano essere comunicate end-to-end attraverso più reti.

Stratificazione del protocollo (Protocol Layering)

+---------------------+
| higher-level | ← Protocolli del livello applicazione (HTTP, FTP, SMTP, ecc.)
+---------------------+
| TCP | ← Livello di trasporto (questo protocollo)
+---------------------+
| Internet Protocol | ← Livello di rete (RFC 791)
+---------------------+
|communication network| ← Livello collegamento/fisico
+---------------------+

Gran parte di questo documento è scritto nel contesto di implementazioni TCP che coesistono con protocolli di livello superiore nel computer host. Alcuni sistemi informatici saranno connessi alle reti tramite computer front-end (front-end computers) che ospitano i livelli TCP e protocollo Internet, nonché software specifico della rete. La specifica TCP descrive un'interfaccia ai protocolli di livello superiore che sembra essere implementabile anche per il caso front-end, purché venga implementato un protocollo host-to-front-end appropriato.


1.2. Scope (Ambito)

Il TCP è destinato a fornire un servizio di comunicazione processo-a-processo affidabile (reliable process-to-process communication service) in un ambiente multi-rete (multinetwork environment). Il TCP è destinato a essere un protocollo host-to-host di uso comune in più reti.


1.3. About This Document (Informazioni su questo documento)

Questo documento rappresenta una specifica del comportamento richiesto da qualsiasi implementazione TCP, sia nelle sue interazioni con protocolli di livello superiore sia nelle sue interazioni con altri TCP. Il resto di questa sezione offre una panoramica molto breve delle interfacce e del funzionamento del protocollo.

Struttura del documento

  • Sezione 2: Riassume la base filosofica (philosophical basis) del progetto TCP
  • Sezione 3: Offre una descrizione dettagliata di:
    • Le azioni richieste al TCP quando si verificano vari eventi (arrivo di nuovi segmenti, chiamate utente, errori, ecc.)
    • I dettagli dei formati dei segmenti TCP

1.4. Interfaces (Interfacce)

Il TCP interagisce da un lato con utenti o processi applicativi (application processes) e dall'altro lato con un protocollo di livello inferiore come il protocollo Internet.

Interfaccia TCP/Utente (TCP/User Interface)

L'interfaccia tra un processo applicativo e il TCP è illustrata con dettagli ragionevoli. Questa interfaccia consiste in un insieme di chiamate molto simili alle chiamate che un sistema operativo fornisce a un processo applicativo per manipolare i file.

Chiamate di interfaccia principali:

  • OPEN: Aprire una connessione
  • CLOSE: Chiudere una connessione
  • SEND: Inviare dati su una connessione stabilita
  • RECEIVE: Ricevere dati su una connessione stabilita

Il TCP può anche comunicare in modo asincrono (asynchronously communicate) con i programmi applicativi. Sebbene sia consentita notevole libertà agli implementatori TCP per progettare interfacce appropriate a un particolare ambiente di sistema operativo, è richiesta una funzionalità minima (minimum functionality) all'interfaccia TCP/utente per qualsiasi implementazione valida.

Interfaccia TCP/Protocollo di livello inferiore (TCP/Lower Level Protocol Interface)

L'interfaccia tra TCP e il protocollo di livello inferiore è essenzialmente non specificata (essentially unspecified) tranne che si presume esista un meccanismo mediante il quale i due livelli possano passare informazioni l'uno all'altro in modo asincrono. Tipicamente, ci si aspetta che il protocollo di livello inferiore specifichi questa interfaccia.

TCP è progettato per funzionare in un ambiente molto generale di reti interconnesse. Il protocollo di livello inferiore presunto in tutto questo documento è il protocollo Internet (Internet Protocol, [2]).


1.5. Operation (Funzionamento)

Come notato sopra, lo scopo principale del TCP è fornire un servizio di circuito logico o connessione affidabile e sicuro (reliable, securable logical circuit or connection service) tra coppie di processi. Per fornire questo servizio su un sistema di comunicazione Internet meno affidabile sono necessarie strutture nelle seguenti aree:

Panoramica delle funzioni principali

1. Basic Data Transfer (Trasferimento dati di base)

Il TCP è in grado di trasferire un flusso continuo di ottetti in ciascuna direzione tra i suoi utenti impacchettando un certo numero di ottetti (octets) in segmenti (segments) per la trasmissione attraverso il sistema Internet. In generale, i TCP decidono da soli quando bloccare e inoltrare i dati.

Funzione Push (Push Function): A volte gli utenti devono assicurarsi che tutti i dati che hanno inviato al TCP siano stati trasmessi. A tale scopo è definita una funzione push. Per assicurare che i dati inviati a un TCP vengano effettivamente trasmessi, l'utente mittente indica che dovrebbero essere spinti (pushed) all'utente ricevente. Un push fa sì che i TCP inviino e consegnino immediatamente i dati fino a quel punto al ricevitore. Il punto di push esatto potrebbe non essere visibile all'utente ricevente e la funzione push non fornisce un marcatore di confine del record (record boundary marker).

2. Reliability (Affidabilità)

Il TCP deve (must) recuperare da dati danneggiati, persi, duplicati o consegnati fuori ordine dal sistema di comunicazione Internet. Ciò si ottiene assegnando un numero di sequenza (sequence number) a ciascun ottetto trasmesso e richiedendo un acknowledgment positivo (positive acknowledgment, ACK) dal TCP ricevente. Se l'ACK non viene ricevuto entro un intervallo di timeout, i dati vengono ritrasmessi. Al ricevitore, i numeri di sequenza vengono utilizzati per ordinare correttamente i segmenti che possono essere ricevuti fuori ordine e per eliminare i duplicati. Il danneggiamento viene gestito aggiungendo un checksum (checksum) a ciascun segmento trasmesso, controllandolo al ricevitore e scartando i segmenti danneggiati.

Meccanismi di affidabilità:

  • Timeout e ritrasmissione: Se l'ACK non viene ricevuto entro l'intervallo di timeout, i dati vengono ritrasmessi
  • Sequenziamento: Al ricevitore, i numeri di sequenza vengono utilizzati per ordinare correttamente i segmenti ricevuti fuori ordine
  • Eliminazione duplicati: Eliminare i segmenti duplicati
  • Checksum: Gestire il danneggiamento aggiungendo un checksum a ciascun segmento trasmesso, controllandolo al ricevitore e scartando i segmenti danneggiati

Finché i TCP continuano a funzionare correttamente e il sistema Internet non diventa completamente partizionato (completely partitioned), nessun errore di trasmissione influenzerà la corretta consegna dei dati. TCP recupera dagli errori del sistema di comunicazione Internet.

3. Flow Control (Controllo di flusso)

TCP fornisce un mezzo per il ricevitore di controllare la quantità di dati inviati dal mittente. Ciò si ottiene restituendo una "finestra" (window) con ogni ACK indicando un intervallo di numeri di sequenza accettabili oltre l'ultimo segmento ricevuto con successo. La finestra indica un numero consentito di ottetti che il mittente può (may) trasmettere prima di ricevere ulteriore autorizzazione.

Finestra scorrevole (Sliding Window): La finestra indica il numero di ottetti consentiti che il mittente può trasmettere prima di ricevere ulteriore autorizzazione.

4. Multiplexing (Multiplexing)

Per consentire a molti processi all'interno di un singolo host di utilizzare simultaneamente le strutture di comunicazione TCP, il TCP fornisce un insieme di indirizzi o porte (ports) all'interno di ciascun host. Concatenato con gli indirizzi di rete e host dal livello di comunicazione Internet, questo forma un socket. Una coppia di socket identifica univocamente ciascuna connessione. Cioè, un socket può (may) essere utilizzato simultaneamente in più connessioni.

Associazione porta (Port Binding):

  • L'associazione delle porte ai processi viene gestita indipendentemente da ciascun host
  • I processi utilizzati di frequente (ad esempio, un "logger" o un servizio di time-sharing) sono collegati a socket fissi che vengono resi noti al pubblico
  • È possibile accedere a questi servizi tramite indirizzi noti
  • Stabilire e apprendere gli indirizzi delle porte di altri processi può (may) coinvolgere meccanismi più dinamici

5. Connections (Connessioni)

I meccanismi di affidabilità e controllo di flusso descritti sopra richiedono che i TCP inizializzino e mantengano determinate informazioni di stato (status information) per ciascun flusso di dati. La combinazione di queste informazioni, inclusi socket, numeri di sequenza e dimensioni della finestra, è chiamata connessione (connection). Ogni connessione è specificata in modo univoco da una coppia di socket che identificano i suoi due lati.

Ciclo di vita della connessione:

  1. Stabilimento: Quando due processi desiderano comunicare, i loro TCP devono (must) prima stabilire una connessione (inizializzare le informazioni di stato su ciascun lato)
  2. Utilizzo: Fase di trasferimento dati
  3. Terminazione: Quando la comunicazione è completa, la connessione viene terminata (terminated) o chiusa (closed) per liberare le risorse per altri usi

Handshake a tre vie (Three-Way Handshake): Poiché le connessioni devono (must) essere stabilite tra host inaffidabili e su un sistema di comunicazione Internet inaffidabile, viene utilizzato un meccanismo di handshake con numeri di sequenza basati su clock (handshake mechanism with clock-based sequence numbers) per evitare l'inizializzazione errata delle connessioni.

6. Precedence and Security (Precedenza e sicurezza)

Gli utenti di TCP possono (may) indicare la sicurezza e la precedenza della loro comunicazione. Vengono forniti valori predefiniti da utilizzare quando queste funzionalità non sono necessarie.


Considerazioni sull'implementazione (Implementation Considerations)

Requisiti minimi di funzionalità

Qualsiasi implementazione TCP valida deve (must) fornire:

  1. Gestione delle connessioni (stabilimento, manutenzione, terminazione)
  2. Trasferimento dati affidabile (acknowledgment, ritrasmissione, sequenziamento)
  3. Controllo di flusso (finestra scorrevole)
  4. Multiplexing (gestione delle porte)
  5. Rilevamento errori (checksum)

Flessibilità

Sebbene questa specifica definisca il comportamento TCP, gli implementatori hanno notevole libertà per quanto riguarda:

  • La progettazione della struttura dati interna
  • L'approccio di integrazione con i sistemi operativi
  • Le strategie di ottimizzazione delle prestazioni
  • Le forme specifiche delle interfacce utente

Relazione con altri protocolli (Relation to Other Protocols)

Livello applicazione:  HTTP, FTP, SMTP, Telnet, ecc.

Livello trasporto: TCP (questo protocollo) | UDP (RFC 768)

Livello rete: IP (RFC 791)

Livello collegamento: Ethernet, Wi-Fi, ecc.

TCP risiede nel livello di trasporto dello stack di protocolli, fornendo servizi di comunicazione end-to-end affidabili al livello applicazione e si basa sul protocollo IP del livello di rete per il routing e l'indirizzamento.


Successivo: 2. Philosophy (Filosofia) - Esplorazione approfondita della filosofia progettuale di TCP e dei fondamenti teorici