Passa al contenuto principale

2. Philosophy (Filosofia)

Questo capitolo riassume la base filosofica (philosophical basis) del design TCP, spiegando la posizione di TCP nell'ambiente Internet, i principi di progettazione e i concetti fondamentali.


2.1. Elements of the Internetwork System (Elementi del sistema internet)

L'ambiente internet è costituito da host collegati a reti che sono a loro volta interconnesse tramite gateway. Si presume qui che le reti possano essere reti locali (ad esempio, ETHERNET) o reti di grandi dimensioni (ad esempio, ARPANET), ma in ogni caso si basano sulla tecnologia di commutazione di pacchetto. Gli agenti attivi che producono e consumano messaggi sono i processi. Vari livelli di protocolli nelle reti, nei gateway e negli host supportano un sistema di comunicazione interprocesso che fornisce un flusso di dati bidirezionale su connessioni logiche tra le porte di processo.

Concetti fondamentali

  • Processi (Processes): Agenti attivi che producono e consumano messaggi
  • Sistema di comunicazione interprocesso: Vari livelli di protocolli nelle reti, nei gateway e negli host supportano un flusso di dati bidirezionale su connessioni logiche tra le porte di processo

Il termine pacchetto (packet) è usato qui in modo generico per indicare i dati di una transazione tra un host e la sua rete. Il formato dei blocchi di dati scambiati all'interno di una rete generalmente non ci riguarderà.

Definizioni terminologiche

TermineDefinizione
HostComputer collegati a una rete e, dal punto di vista della rete di comunicazione, sono le sorgenti e le destinazioni dei pacchetti
Processo (Process)Elementi attivi nei computer host (in accordo con la definizione abbastanza comune di un processo come un programma in esecuzione)
Porta (Port)Punti finali logici attraverso cui un processo comunica; un processo può avere più porte

Punto importante: Tutta la comunicazione è considerata come comunicazione interprocesso (inter-process communication). Anche i terminali e i file o altri dispositivi di I/O sono considerati come comunicanti tra loro attraverso l'uso di processi.

Poiché un processo può aver bisogno di distinguere tra diversi flussi di comunicazione tra sé stesso e un altro processo (o processi), immaginiamo che ogni processo possa avere un certo numero di porte attraverso le quali comunica con le porte di altri processi.


2.2. Model of Operation (Modello di funzionamento)

Flusso di trasmissione dati

Processo mittente
↓ [Chiama TCP, passa buffer di dati]
TCP mittente
↓ [Impacchetta i dati in segmenti]
Modulo Internet
↓ [Incapsula in datagrammi Internet]
Rete locale
↓ [Incorpora in pacchetti di rete locale]
... (attraverso commutatori di pacchetti, gateway) ...

Rete locale di destinazione
↓ [Spacchetta]
Modulo Internet di destinazione
↓ [Estrae i segmenti TCP]
TCP ricevente
↓ [Posiziona i dati nei buffer utente]
Processo ricevente

Descrizione dettagliata

Lato trasmissione:

  • I processi trasmettono dati chiamando il TCP e passando buffer di dati come argomenti
  • Il TCP impacchetta i dati da questi buffer in segmenti
  • Il TCP chiama il modulo Internet per trasmettere ogni segmento al TCP di destinazione

Lato ricezione:

  • Il TCP ricevente posiziona i dati da un segmento nel buffer dell'utente ricevente
  • Il TCP ricevente notifica l'utente ricevente

Informazioni di controllo:

  • I TCP includono informazioni di controllo nei segmenti che usano per garantire una trasmissione dati ordinata affidabile

Modello di comunicazione Internet

[Segmento TCP] → [Datagramma Internet] → [Pacchetto rete locale] → ...Inoltro Gateway... → [Destinazione]

Modulo Internet:

  • Associato a ogni TCP
  • Fornisce un'interfaccia alla rete locale
  • Impacchetta i segmenti TCP all'interno di datagrammi Internet
  • Instrada questi datagrammi a un modulo Internet di destinazione o a un gateway intermedio

Trasmissione sulla rete locale:

  • Per trasmettere il datagramma attraverso la rete locale, viene incorporato in un pacchetto di rete locale
  • I commutatori di pacchetti possono (may) eseguire ulteriori impacchettamenti, frammentazioni o altre operazioni per ottenere la consegna del pacchetto locale al modulo Internet di destinazione

Operazione del gateway

A un gateway tra reti:

  1. Spacchettamento: Il datagramma Internet viene "spacchettato" dal suo pacchetto locale
  2. Esame: Determina attraverso quale rete il datagramma Internet dovrebbe viaggiare successivamente
  3. Riconfezionamento: Il datagramma Internet viene "confezionato" in un pacchetto locale adatto alla rete successiva
  4. Instradamento: Instradato al gateway successivo o alla destinazione finale

Meccanismo di frammentazione:

  • Un gateway è autorizzato a suddividere un datagramma Internet in frammenti di datagramma Internet più piccoli se questo è necessario per la trasmissione attraverso la rete successiva
  • Per fare ciò, il gateway produce un insieme di datagrammi Internet, ciascuno contenente un frammento
  • I frammenti possono (may) essere ulteriormente suddivisi in frammenti più piccoli nei gateway successivi
  • Il formato del frammento di datagramma Internet è progettato in modo che il modulo Internet di destinazione possa riassemblare i frammenti in datagrammi Internet

Destinazione finale:

  • Un modulo Internet di destinazione spacchetta il segmento dal datagramma (dopo aver riassemblato il datagramma, se necessario)
  • Lo passa al TCP di destinazione

Tipo di servizio

Questo semplice modello dell'operazione trascura molti dettagli. Una caratteristica importante è il tipo di servizio (type of service). Questo fornisce informazioni al gateway (o modulo Internet) per guidarlo nella selezione dei parametri di servizio da utilizzare nell'attraversamento della rete successiva.

Incluso nelle informazioni sul tipo di servizio:

  • Precedenza del datagramma (precedence): Livello di priorità per l'elaborazione
  • Informazioni sulla sicurezza (security information): Per consentire agli host e ai gateway che operano in ambienti sicuri multilivello di segregare correttamente i datagrammi per considerazioni di sicurezza

2.3. The Host Environment (L'ambiente host)

Si presume che il TCP sia un modulo in un sistema operativo. Gli utenti accedono al TCP in modo molto simile a come accederebbero al file system. Il TCP può (may) chiamare altre funzioni del sistema operativo, ad esempio per gestire strutture dati.

Interfaccia di rete:

  • Si presume che l'interfaccia effettiva alla rete sia controllata da un modulo driver di dispositivo
  • Il TCP non chiama direttamente il driver del dispositivo di rete
  • Piuttosto chiama il modulo di protocollo datagramma Internet che a sua volta può (may) chiamare il driver del dispositivo

Implementazione front-end:

  • I meccanismi di TCP non escludono l'implementazione del TCP in un processore front-end
  • Tuttavia, in tale implementazione, un protocollo host-to-front-end deve (must) fornire la funzionalità per supportare il tipo di interfaccia TCP/utente descritto in questo documento

2.4. Interfaces (Interfacce)

Interfaccia TCP/Utente

L'interfaccia TCP/utente fornisce chiamate effettuate dall'utente sul TCP per:

  • OPEN (aprire) o CLOSE (chiudere) una connessione
  • SEND (inviare) o RECEIVE (ricevere) dati
  • Ottenere lo STATUS (stato) di una connessione

Queste chiamate sono come altre chiamate da programmi utente sul sistema operativo, ad esempio, le chiamate per aprire, leggere e chiudere un file.

Interfaccia TCP/Internet

L'interfaccia TCP/Internet fornisce chiamate per inviare e ricevere datagrammi indirizzati a moduli TCP in host ovunque nel sistema Internet. Queste chiamate hanno parametri per passare:

  • Indirizzo
  • Tipo di servizio
  • Precedenza
  • Sicurezza
  • Altre informazioni di controllo

2.5. Relation to Other Protocols (Relazione con altri protocolli)

Il seguente diagramma illustra la posizione del TCP nella gerarchia dei protocolli:

+------+ +-----+ +-----+       +-----+
|Telnet| | FTP | |Voice| ... | | Livello applicazione
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | RTP | ... | | Livello host
+-----+ +-----+ +-----+
| | |
+-------------------------------+
| Internet Protocol & ICMP | Livello gateway
+-------------------------------+
|
+---------------------------+
| Local Network Protocol | Livello rete
+---------------------------+

Relazioni dei protocolli

Punti chiave:

  • Si prevede che il TCP sarà in grado di supportare efficientemente protocolli di livello superiore
  • Dovrebbe essere facile interfacciare protocolli di livello superiore come ARPANET Telnet o AUTODIN II THP al TCP

2.6. Reliable Communication (Comunicazione affidabile)

Un flusso di dati inviato su una connessione TCP viene consegnato in modo affidabile e in ordine alla destinazione.

Meccanismi di affidabilità

Numeri di sequenza e acknowledgment:

  • La trasmissione è resa affidabile tramite l'uso di numeri di sequenza e acknowledgment
  • Concettualmente, a ogni ottetto di dati viene assegnato un numero di sequenza
  • Il numero di sequenza del primo ottetto di dati in un segmento viene trasmesso con quel segmento ed è chiamato numero di sequenza del segmento (segment sequence number)
  • I segmenti portano anche un numero di acknowledgment (acknowledgment number) che è il numero di sequenza del prossimo ottetto di dati atteso delle trasmissioni nella direzione inversa

Ritrasmissione:

  • Quando il TCP trasmette un segmento contenente dati, ne mette una copia in una coda di ritrasmissione e avvia un timer
  • Quando viene ricevuto l'acknowledgment per quei dati, il segmento viene eliminato dalla coda
  • Se l'acknowledgment non viene ricevuto prima della scadenza del timer, il segmento viene ritrasmesso

Nota importante:

  • Un acknowledgment da parte di TCP non garantisce che i dati siano stati consegnati all'utente finale
  • Significa solo che il TCP ricevente ha assunto la responsabilità di farlo

Controllo di flusso

Per governare il flusso di dati tra i TCP, viene impiegato un meccanismo di controllo di flusso:

  • Il TCP ricevente riporta una "finestra" (window) al TCP mittente
  • Questa finestra specifica il numero di ottetti, a partire dal numero di acknowledgment, che il TCP ricevente è attualmente preparato a ricevere

2.7. Connection Establishment and Clearing (Stabilimento e chiusura della connessione)

Indirizzamento socket

Identificatore di porta:

  • Per identificare i flussi di dati separati che un TCP può (may) gestire, il TCP fornisce un identificatore di porta (port identifier)
  • Poiché gli identificatori di porta sono selezionati indipendentemente da ogni TCP, potrebbero non essere univoci

Creazione del socket:

  • Per fornire indirizzi univoci all'interno di ogni TCP, concateniamo un indirizzo Internet che identifica il TCP con un identificatore di porta per creare un socket
  • Un socket sarà univoco in tutte le reti connesse insieme

Specifica della connessione:

  • Una connessione è completamente specificata dalla coppia di socket alle estremità
  • Un socket locale può (may) partecipare a molte connessioni verso socket esteri diversi
  • Una connessione può (can) essere utilizzata per trasportare dati in entrambe le direzioni, cioè è "full duplex" (bidirezionale completa)

Associazione porta e processo

Proprietà della porta:

  • I TCP sono liberi di associare le porte ai processi come preferiscono
  • Tuttavia, diversi concetti di base sono necessari in qualsiasi implementazione:
    • Devono (must) esistere socket ben noti che il TCP associa solo ai processi "appropriati" con qualche mezzo
    • Immaginiamo che i processi possano (may) "possedere" porte
    • I processi possono iniziare connessioni solo sulle porte che possiedono

Specifica della connessione nella chiamata OPEN:

  • Una connessione è specificata nella chiamata OPEN dagli argomenti di porta locale e socket estero
  • In cambio, il TCP fornisce un nome di connessione locale (breve) con cui l'utente fa riferimento alla connessione nelle chiamate successive

Blocco di controllo della trasmissione (TCB)

Per memorizzare le informazioni sulla connessione, immaginiamo che esista una struttura dati chiamata Blocco di controllo della trasmissione (Transmission Control Block, TCB):

  • Una strategia di implementazione farebbe del nome di connessione locale un puntatore al TCB per questa connessione
  • La chiamata OPEN specifica anche se lo stabilimento della connessione deve (should) essere attivamente perseguito o passivamente atteso

OPEN passivo:

  • Una richiesta di OPEN passivo significa che il processo vuole accettare richieste di connessione in arrivo piuttosto che tentare di iniziare una connessione
  • Spesso il processo che richiede un OPEN passivo accetterà una richiesta di connessione da qualsiasi chiamante
  • In questo caso, un socket estero di tutti zeri viene utilizzato per denotare un socket non specificato
  • I socket esteri non specificati sono consentiti solo su OPEN passivi

2.8. Data Communication (Comunicazione dati)

Una volta stabilita una connessione, i dati possono fluire bidirezionalmente tra i processi. Il TCP garantisce che questo flusso di dati sia:

  • Affidabile (Reliable): I dati arrivano correttamente
  • Ordinato (Ordered): I dati arrivano nell'ordine corretto
  • Controllato dal flusso (Flow controlled): L'estremità ricevente non è sopraffatta

2.9. Precedence and Security (Precedenza e sicurezza)

Il TCP fornisce meccanismi per gestire:

  • Precedenza (Precedence): Livelli di priorità per il traffico
  • Classificazioni di sicurezza (Security classifications): Per operare in ambienti sicuri multilivello
  • Compartimentazione (Compartmentation): Segregazione di diversi domini di sicurezza

Queste caratteristiche sono ereditate dal livello del protocollo Internet e sono mantenute end-to-end attraverso la connessione TCP.


2.10. Robustness Principle (Principio di robustezza)

Un principio guida per l'implementazione TCP è il principio di robustezza (Robustness Principle), spesso enunciato come:

"Sii conservativo in ciò che invii, sii liberale in ciò che accetti" ("Be conservative in what you send, be liberal in what you accept")

Questo significa:

  • Le implementazioni TCP dovrebbero (should) aderire attentamente alle specifiche quando inviano dati
  • Ma dovrebbero essere tolleranti e flessibili quando ricevono dati, tentando di interpretare anche input leggermente malformati quando possibile

Questo principio aiuta a garantire l'interoperabilità tra diverse implementazioni e promuove la stabilità complessiva di Internet.


Successivo: 3. Functional Specification (Specifica funzionale) - Specifica dettagliata delle operazioni TCP e dei formati dei segmenti