Transmission Control Protocol/Internet Protocol

Torna alla pagina delle informazioni tecniche
Torna alla Home Page di Jack


1. Introduzione 


2. Modelli a strati 


3. Confronto tra TCP/IP e ISO/OSI (ex: X.25) 


4. Protocolli: Multiplexing e Demultiplexing 


5. Internet Protocol Addresses 

     - ARP (Address Resolution Protocol) 

     - RARP (Reverse Address Resolution Protocol) 


6. IP (Internet Protocol) 
     - Il datagramma IP 


7. Routing 


8. ICMP (Internet Control Message Protocol) 


9. UDP (User Datagram Protocol) 
     - Le porte del protocollo UDP 


10. TCP (Transmission Control Protocol) 
       - Le porte del protocollo TCP 
       - Il controllo della Congestione 








Introduzione


I protocolli sono gli standard che specificano come avvengono i trasferimenti da una macchina ad un'altra. Essi specificano come sono rappresentati i dati, le tecniche per la rivelazione d'errore e il meccanismo di acknowledgment per i pacchetti trasmessi. Infine tali protocolli rendono invisibile all'utente l'hardware sottostante durante una qualsiasi sessione di lavoro.
Per TCP/IP non si intende solo il protocollo di trasmissione TCP ed il protocollo di rete IP, ma una famiglia di protocolli comprendente anche l'UDP, l'ICMP, l'ARP, il RARP ed altri, da cui però sono escluse le applicazioni quali la posta elettronica (E-mail) , il trasferimento di file (FTP) e l'emulazione di terminale remota (TELNET). 
Il TCP/IP, al contrario di molti standards diventati in seguito protocolli, è nato prima come protocollo e successivamente è stato affinato per farlo diventare uno standard, effettuando prove "sul campo"; è in qualche modo uno standard "cooperativo". 





Modelli a strati

Il modello a strati è una comoda rappresentazione dei sistemi di rete che permette concettualmente di separare le diverse funzionalità in strati di protocolli, permettendo così di studiare più facilmente i protocolli di rete. 
L'idea della stratificazione è fondamentale per poter disegnare l'architettura software strutturata in livelli, ognuno dei quali con i suoi vari protocolli, tratta una parte specifica dei problemi di trasmissione. 
Il concetto di stratificazione poggia su un principio basilare il quale, in sostanza, afferma che lo strato ennesimo alla stazione destinazione deve ricevere un pacchetto identico a quello che è uscito dal medesimo livello alla stazione sorgente. I due principali esempi di modelli stratificati sono rappresentati dal Open System Interconnection (OSI) dell'ISO e dal TCP/IP. Si può pensare al software di una macchina come costituito da tanti strati ognuno dei quali svolge una funzionalità specifica propria. 
Inoltre è importante sottolineare che uno strato comunica soltanto con uno strato immediatamente superiore od inferiore, tramite delle interfacce standard, mentre all'interno dello strato la comunicazione può avvenire in un qualunque modo; per poter comunicare da uno strato n ad uno strato n-2 (n+2) bisogna necessariamente passare attraverso lo strato intermedio n-1 (n+1). 
Concettualmente, mandare un messaggio da un programma su una macchina ad un programma su un'altra, significa trasferire tale messaggio giù attraverso tutti i vari strati fino al livello di rete e, tramite l'hardware, raggiungere l'altra macchina, risalire gli strati software in successione fino al livello di applicazione dell'utente destinazione. 
In particolare il software TCP/IP è organizzato concettualmente in quattro livelli più un quinto costituito dal supporto fisico vero e proprio. La figura mostra i quattro livelli: 





Application Layer : A livello più alto, l'utente invoca i programmi applicativi che permettono di accedere ai servizi disponibili attraverso Internet; tale livello riguarda tutte le possibili opzioni, chiamate, necessità dei vari programmi. In pratica gestisce l'interattività tra l'utente e la macchina.
Un programma applicativo interagisce con uno dei protocolli di livello trasporto per inviare o ricevere dati e li passa al livello trasporto nella forma richiesta.

Tranport Layer
: Lo scopo primario del livello trasporto è consentire la connessione in rete fra due utenti ovvero permettere la comunicazione tra un livello applicativo ed un altro; una comunicazione di questo tipo è spesso detta "end-to-end". 
Il software di tale livello divide il flusso di dati in pacchetti (di solito di circa 500 byte) che vengono passati insieme all'indirizzo di destinazione allo strato sottostante. Il livello di trasporto deve accettare dati da molti utenti contemporaneamente e, viceversa, deve smistare i pacchetti che gli arrivano dal sotto ai vari specifici programmi; deve quindi usare dei codici appositi per indicare le cosiddette porte. 
Le routine di trasporto pacchetti aggiungono ad ogni di pacchetto, alcuni bit in più atti a codificare, fra l'altro, i programmi sorgente e destinazione. 
Il livello di trasporto può regolare il flusso di informazioni e può, nel caso del TCP (a differenza dell'UDP), fornire un trasporto affidabile assicurando che i dati giungano a destinazione senza errori ed in sequenza mediante un meccanismo di acknowledgement e ritrasmissione. 

Internet Layer (IP) : Questo livello gestisce la comunicazione tra una macchina ed un'altra; accetta una richiesta di inoltro di un pacchetto da un livello di trasporto insieme all'identificazione della macchina alla quale il pacchetto deve essere inviato.
È il livello più caratteristico della internet, detto appunto IP (internet protocol) che crea il datagramma di base della rete, sostanzialmente, riceve e trasferisce senza garanzie i pacchetti, che gli arrivano da sopra, verso la macchina destinataria.
Esso accetta i pacchetti TCP, li spezzetta se necessario e li incapsula nei datagramma di base IP, riempie gli header necessari ed usa l'algoritmo di rouiting per decidere a chi deve mandare questo pacchetto, in particolare se si tratta di un caso di routing diretto o indiretto.
Il livello Internet gestisce anche i datagrammi in ingresso, verifica la loro validità ed usa l'algoritmo di routing per decidere se il datagramma deve essere inoltrato o processato localmente; in quest'ultimo caso il software elimina l' header del datagramma e sceglie quale protocollo di trasporto gestirà il pacchetto.
In tale fase non solo si svolge la funzione di instradamento, ma si verifica anche la validità dei pacchetti ricevuti. 
Inoltre questo livello gestisce integralmente i messaggi ICMP in ingresso ed uscita. 

Network Interface Layer : Il quarto ed ultimo strato è costituito da una interfaccia di rete che accetta il datagramma IP e lo trasmette, previo incapsularlo in appositi frame, sull'hardware di rete (il cavo) tramite, ad esempio, un transceiver. 








Da notare che se necessario il pacchetto può attraversare altre macchine intermedie (router) prima di giungere a destinazione, ma in queste penetra solo i due strati più bassi dell'interfaccia di rete e del datagramma base IP. 
Uno dei vantaggi più significativi di questa separazione concettuale è che diventa possibile, entro certi termini, sostituire una parte senza disturbare necessariamente le altre, cosicché ricerca e sviluppo possono procedere concorrentemente su ognuno dei tre livelli. 







Confronto tra TCP/IP e ISO/OSI (ex: X.25)


La prima differenza tra i due modelli sta nel numero di strati, in particolare, sette per l'OSI e cinque per internet. Esistono due sottili ma importanti differenze fra lo schema a strati dell'internet e quello del X.25 che è il più famoso protocollo aderente alla normative ISO. La prima riguarda l'affidabilità del servizio di trasporto dati e la seconda la localizzazione dell'autorità e controllo.
Nel modello X.25 il software del protocollo verifica l'integrità dei dati ad ognuno dei primi quattro livelli (escluso ovviamente il livello fisico di rete). In particolare, i livelli due e tre, cioè del link e del network, includono oltre al checksum un meccanismo di "timeout and retransmission", mentre il livello quattro del transport realizza l'affidabilità finale detta "end-to-end". Questo crea dei problemi, poiché ogni operazione di checksum mette in rete un ack ed ogni volta che si eccede il timeout viene duplicato un pacchetto, tutte queste operazioni sono ripetute ad ogni nodo attraversato anche se di passaggio (nel senso che vi si penetra solo al livello minimo, cioè di link).
Al contrario, nell'internet l'affidabilità è solamente un problema "end-to-end", infatti il livello di trasporto, e quindi la destinazione e la sorgente, è l'unico a gestire le ritrasmissioni e gli ack; i nodi di passaggio sono pressoché trasparenti anche se in effetti, hanno la capacità di buttar via i pacchetti se sono corrotti o se i buffer sono pieni. 






Protocolli: Multiplexing e Demultiplexing 

In generale, il multiplexing ed il demultiplexing sono tecniche largamente usate per sfruttare meglio il mezzo trasmissivo. Ad esempio, il TDMA permette di trasmettere più canali multiplexati, sfruttando un unico supporto fisico, salvo demultiplexare i canali stessi a destinazione. 
In particolare, una rete non usa un singolo protocollo per adempiere ai molteplici compiti della trasmissione, ma, piuttosto, si basa su quella che potremmo definire una famiglia di protocolli. In pratica nei sistemi di comunicazione si usa una tecnica di multiplexing e demultiplexing per distinguere fra i vari protocolli ad uno stesso livello gerarchico. 
Quando si spedisce un messaggio, il computer sorgente include dei bit in più per codificare il tipo di messaggio, il processo che lo ha generato ed il protocollo usato. Alla destinazione finale, la macchina demultiplexa i codici e guida così l'informazione verso la giusta procedura. 





 


La figura illustra come il software del Network Interface Layer usa il frame type per scegliere la procedura che gestirà il frame in arrivo; in particolare, un frame fisico può contenere un datagramma IP, un ARP o un RARP. 
A sua volta l'Internet Layer demultiplexa un datagramma IP che può contenere un ICMP, un UDP, un pacchetto TCP oppure un VMTP, come mostrato in figura:







 

 


Internet Protocol Addresses

Affinchè un sistema di comunicazione sia universale è necessario utilizzare un metodo di identificazione di ogni computer connesso ad esso (host). Il TCP/IP assegna ad ogni host, come identificatore universale, un indirizzo binario a 32 bits detto Internet Address o IP Address, usando una struttura analoga a quella degli indirizzi fisici di rete. 
Per rendere questi indirizzi più comprensibili, essi sono suddivisi in quattro gruppi di bits con i rispettivi valori scritti in decimale e separati da punti (Dotted Decimal Notation). 
Concettualmente, ciascun indirizzo IP è una coppia netid-hostid, dove il netid identifica la rete dove è connesso l'host mentre l'hostid identifica lo stesso host su quella rete, come mostrato in figura:

 

 

Gli indirizzi IP sono divisi in cinque classi, di cui tre primarie (A, B, C) distinguibili dai tre bit di ordine più alto. 


Classe A: usata per reti con più di 2 alla 16 (65536) hosts, dedica 7 bits per la netid e 24 per la hostid. 

Classe B: usata per reti con un numero di hosts compreso tra 2 alla 8 (256) e 2 alla 16 (65536) hosts, dedica 14 bits per la netid e 16 per la hostid. 

Classe C: usata per reti con meno di 2 alla 8 (256) hosts, dedica 21 bits per la netid e 8 per la hostid. 

Classe D: è usata per la particolare distribuzione dei dati, detta multicasting. 

Classe E: è destinata ad usi futuri. 


Nella tabella seguente sono riportati i range della Dotted Decimal Notation corrispondenti a ciascuna classe degli indirizzi IP; alcuni valori sono riservati per scopi specifici (127.0.0.0 è riservato al local host):


   
ClasseLowest AddressHighest Address
A0.1.0.0126.0.0.0
B128.0.0.0191.255.0.0
C192.0.1.0223.255.255.0
D224.0.0.0239.255.255.255
E240.0.0.0247.255.255.255

 

Materialmente le reti sono interconnesse tramite computer molto veloci detti router che instradano i pacchetti leggendo l'indirizzo internet. Considerando che un router possa essere connesso a due o più reti fisiche, è necessario assegnare altrettanti indirizzi IP per identificare ciascuna rete; tali computers sono definiti multi-homed hosts. 
Poichè gli indirizzi IP codificano entrambi la rete e l'host ad essa connessa, essi non possono specificare un particolare computer, ma una "connessione" ad una rete. Perciò un router che connette n reti necessita di altrettanti indirizzi IP. 
L'operazione di routing è molto efficace perché, in realtà, viene svolta leggendo solo la parte di indirizzo relativo alla rete. 

Uno dei vantaggi della struttura di indirizzamento Internet è che la sua forma può specificare un indirizzo per un particolare host, una rete o tutti gli hosts su una rete (Broadcast). Lo svantaggio è che, se una macchina ha più indirizzi, la conoscenza di un indirizzo di rete potrebbe essere non sufficiente per raggiungerla, se tale rete non è disponibile. 



ARP (Address Resolution Protocol) 


Gli indirizzi IP sono assegnati indipendentemente dagli indirizzi fisici di una machina. I router utilizzano gli indirizzi internet, ma è bene sottolineare come due macchine qualsiasi possono comunicare solo se conoscono gli indirizzi fisici di rete; sorge quindi il problema di associare agli indirizzi IP quelli reali a livello fisico di ogni rete. 
Per risolvere tale problema esiste l'Address Resolution Protocol (ARP): una macchina, a partire dall'indirizzo IP, usa un messaggio broadcast (ARP request) per trovare l'indirizzo fisico di un'altra macchina. 
Tra tutte le macchine che ricevono l'ARP request, quella a cui corrisponde l'indirizzo IP risponde inviando il proprio indirizzo fisico alla macchina che ha inoltrato la richiesta. 
La figura seguente mostra il protocollo ARP:

 


 

RARP (Reverse Address Resolution Protocol) 


Quando, per vari motivi possibili, una macchina non conosce il proprio indirizzo IP, procede con il Reverse Address Resolution Protocol (RARP) emettendo un ARP-broadcast request ed indicando sè stesso come destinazione finale; sarà compito di alcuni server di rete autorizzati a fornire il servizio RARP, rispondere fornendo l'indirizzo richiesto. 
Nella figura seguente è mostrato il protocollo RARP: 


 

IP (Internet Protocol) 

Concettualmente l'internet prevede tre tipi di servizi, come mostrato in figura, che hanno tra di loro una chiara gerarchia di dipendenze.

Dunque, a livello più basso, un servizio di recapito connectionless rappresenta la base su cui si poggia ogni cosa; infatti il protocollo IP è fondamentale perché, anche se di per sé realizza una trasmissione non sicura, fornisce il supporto necessario per tutti gli altri protocolli affidabili (reliable transport service) quali il TCP e quindi per gli stessi applicativi (application services) quali l'FTP ed il TELNET. 
Tecnicamente, il protocollo IP è definito: 
Unreliable: è un servizio senza garanzie; i pacchetti possono essere persi, venire duplicati o consegnati fuori ordine senza per questo avvisare né l'utente sorgente né quello destinazione. Va comunque sottolineato che la perdita di un pacchetto avviene solamente in casi abbastanza eccezionali, quali la congestione totale di un componente o, addirittura, la caduta della rete. 

Connectionless: è un servizio non orientato alla connessione; ogni pacchetto viene trattato indipendentemente da tutti gli altri. Una sequenza di pacchetti spediti da un computer ad un altro potrebbero seguire cammini diversi per giungere a destinazione. 

Best-effort: il protocollo IP effettua un serio tentativo nell'inoltro dei pacchetti. 
In sostanza IP definisce l'unità base del datagramma e la forma esatta di tutti i dati che passano attraverso Internet, gestisce le funzioni di routing (specificando il percorso sul quale verranno spediti i dati) ed include un insieme di regole che caratterizzano come gli hosts ed i routers processano i pacchetti, la generazione dei messaggi di errore e le condizioni sotto le quali un pacchetto è scartato.  


 

Il datagramma IP 
Il datagramma IP (IP datagram) è l'unità di trasferimento base del TCP/IP. Esso presenta una forte analogia con i frames di una rete reale; infatti si compone di una header area e di una data area. 
L'header (di almeno 20 byte) contiene l'indirizzo di destinazione (Destination IP Address) e di partenza (Source IP Address), anche perché ricordiamo che il livello IP svolge funzioni di routing fondamentali per l'architettura dell'intera rete internet proprio su questi indirizzi. La differenza con l'header del frame fisico reale è che, mentre quest'ultimo contiene un indirizzo fisico, quello del datagramma contiene un indirizzo IP. 
La figura mostra la struttura del datagramma IP:

Più in dettaglio, l'header contiene anche un type field, che identifica il contenuto del datagramma, un checksum field, che assicura l'integrità dei valori contenuti in esso ed il Time To Live, che specifica quanto tempo (in secondi) può sopravvivere un datagramma IP nella rete (questo per evitare che girino sempre nella rete internet causando ovvi problemi). 
Un altro campo molto importante è il "protocol"; infatti un datagramma IP, può contenere al suo interno un pacchetto TCP, un UDP, un ICMP o un VMTP e quindi è necessario procedere con un demultiplex logico basato appunto su tale campo. 
Fra le altre informazioni, l'header del datagramma contiene il controllo della frammentazione, delle precedenze e degli errori veri e propri. 
Nel caso ideale, un intero datagramma IP viene incapsulato in un frame fisico, per rendere efficiente la trasmissione attraverso una rete fisica reale. Tuttavia, ogni rete locale consente una dimensione minima e massima (indicata con Maximum Transfer Unit MTU) per i pacchetti che la attraversano, ed è quindi ovvio che, siccome i datagrammi IP devono essere incapsulati in un frame, non possono prescindere da queste dimensioni per altro fortemente variabili a seconda del tipo di rete. 
Allora per tutelarsi dalla disomogeneità delle reti, invece di strutturare il datagramma in modo eccessivamente aderente ai vincoli fisici dei vari prodotti, si è deciso di scegliere una dimensione dei datagrammi IP conveniente ed escogitare poi un metodo ("segmentation and reassembly") di dividerli in piccoli pezzi detti frammenti per poter essere accettati da una rete con qualsivoglia piccolo MTU e, ovviamente, riassemblati in uscita. 





Routing 

In un sistema packets switching quale il TCP/IP, il routing rappresenta il processo di scelta del percorso su cui inoltrare i pacchetti ed il router è un computer che effettua tale instradamento. 
Da sottolineare che il routing IP avviene in ambiente software, mentre in realtà il routing fisico è a livello di MAC. Idealmente il routing IP dovrebbe esaminare la connessione alla rete, la lunghezza del datagramma e quando selezionare il percorso migliore. 
Quando un programma applicativo su un host tenta di instaurare una comunicazione con un host remoto, sia l'host locale che i routers partecipano all'instradamento dei datagrammi IP fino alla loro destinazione.

Si può parlare di due tipi di routing: 


Diretto: se l'host locale ed il remoto appartengono alla stessa rete fisica (es. una singola Ethernet); in questo caso non sarà necessario l'impiego di routers. 

Indiretto: se l'utente destinazione è connesso ad una rete fisica diversa ed è necessario instradare il datagramma sorgente attraverso un router. 


Per sapere se una destinazione appartiene alla propria rete, l'utente sorgente estrae dall'indirizzo IP di destinazione la parte relativa alla rete, la cosiddetta netid, e la confronta con la propria: se differisce, evidentemente la destinazione del datagramma è esterna. 


Nel primo caso, il Network Interface Layer dell'utente sorgente incapsula il datagramma IP in un frame fisico, associa l'indirizzo IP al relativo fisico ed usa l'hardware della rete (il cavo) per trasferirlo. Un possibile meccanismo per conoscere l'indirizzo fisico corrispondente è quello di utilizzare il protocollo ARP. 

Il caso del routing indiretto è più difficoltoso, perché l'utente sorgente deve identificare il router a cui inviare il datagramma; se nella rete locale c'è un solo router che permette la connessione con altre reti, il routing diventa più semplice in quanto, appena l'host locale ha capito che la destinazione non appartiene alla propria rete, indirizza il datagramma direttamente al router; in generale, se è connesso a più routers, lo indirizzerà al più vicino. 

Una volta che il frame contenente il datagramma ha raggiunto il router, il software del Network Interface Layer estrae il datagramma incapsulato e le routine di routing, e sulla base degli indirizzi internet, il software IP seleziona il prossimo router a cui inviare il datagramma, incapsulato in un nuovo frame. 
I routers in Internet formano una struttura interconnessa in continuo contatto fra loro nella quale il datagramma scorre finché non raggiunge qu"#int">Introduzione 


2. Modelli a strati 


3. Confronto tra TCP/IP e ISO/OSI (ex: X.25) 


4. Protocolli: Multiplexing e Demultiplexing 


5. Internet Protocol Addresses 

     - ARP (Address Resolution Protocol) 

     - RARP (Reverse Address Resolution Protocol) 


6. IP (Internet Protocol) 
     - Il datagramma IP 


7. Routing 


8. ICMP (Internet Control Message Protocol) 


9. UDP (User Datagram Protocol) 
     - Le porte del protocollo UDP 


10. TCP (Transmission Control Protocol) 
       - Le porte del protocollo TCP 
       - Il controllo della Congestione 








Introduzione


I protocolli sono gli standard che specificano come avvengono i trasferimenti da una macchina ad un'altra. Essi specificano come sono rappresentati i dati, le tecniche per la rivelazione d'errore e il meccanismo di acknowledgment per i pacchetti trasmessi. Infine tali protocolli rendono invisibile all'utente l'hardware sottostante durante una qualsiasi sessione di lavoro.
Per TCP/IP non si intende solo il protocollo di trasmissione TCP ed il protocollo di rete IP, ma una famiglia di protocolli comprendente anche l'UDP, l'ICMP, l'ARP, il RARP ed altri, da cui però sono escluse le applicazioni quali la posta elettronica (E-mail) , il trasferimento di file (FTP) e l'emulazione di terminale remota (TELNET). 
Il TCP/IP, al contrario di molti standards diventati in seguito protocolli, è nato prima come protocollo e successivamente è stato affinato per farlo diventare uno standard, effettuando prove "sul campo"; è in qualche modo uno standard "cooperativo". 





Modelli a strati

Il modello a strati è una comoda rappresentazione dei sistemi di rete che permette concettualmente di separare le diverse funzionalità in strati di protocolli, permettendo così di studiare più facilmente i protocolli di rete. 
L'idea della stratificazione è fondamentale per poter disegnare l'architettura software strutturata in livelli, ognuno dei quali con i suoi vari protocolli, tratta una parte specifica dei problemi di trasmissione. 
Il concetto di stratificazione poggia su un principio basilare il quale, in sostanza, afferma che lo strato ennesimo alla stazione destinazione deve ricevere un pacchetto identico a quello che è uscito dal medesimo livello alla stazione sorgente. I due principali esempi di modelli stratificati sono rappresentati dal Open System Interconnection (OSI) dell'ISO e dal TCP/IP. Si può pensare al software di una macchina come costituito da tanti strati ognuno dei quali svolge una funzionalità specifica propria. 
Inoltre è importante sottolineare che uno strato comunica soltanto con uno strato immediatamente superiore od inferiore, tramite delle interfacce standard, mentre all'interno dello strato la comunicazione può avvenire in un qualunque modo; per poter comunicare da uno strato n ad uno strato n-2 (n+2) bisogna necessariamente passare attraverso lo strato intermedio n-1 (n+1). 
Concettualmente, mandare un messaggio da un programma su una macchina ad un programma su un'altra, significa trasferire tale messaggio giù attraverso tutti i vari strati fino al livello di rete e, tramite l'hardware, raggiungere l'altra macchina, risalire gli strati software in successione fino al livello di applicazione dell'utente destinazione. 
In particolare il software TCP/IP è organizzato concettualmente in quattro livelli più un quinto costituito dal supporto fisico vero e proprio. La figura mostra i quattro livelli: 





Application Layer : A livello più alto, l'utente invoca i programmi applicativi che permettono di accedere ai servizi disponibili attraverso Internet; tale livello riguarda tutte le possibili opzioni, chiamate, necessità dei vari programmi. In pratica gestisce l'interattività tra l'utente e la macchina.
Un programma applicativo interagisce con uno dei protocolli di livello trasporto per inviare o ricevere dati e li passa al livello trasporto nella forma richiesta.

Tranport Layer
: Lo scopo primario del livello trasporto è consentire la connessione in rete fra due utenti ovvero permettere la comunicazione tra un livello applicativo ed un altro; una comunicazione di questo tipo è spesso detta "end-to-end". 
Il software di tale livello divide il flusso di dati in pacchetti (di solito di circa 500 byte) che vengono passati insieme all'indirizzo di destinazione allo strato sottostante. Il livello di trasporto deve accettare dati da molti utenti contemporaneamente e, viceversa, deve smistare i pacchetti che gli arrivano dal sotto ai vari specifici programmi; deve quindi usare dei codici appositi per indicare le cosiddette porte. 
Le routine di trasporto pacchetti aggiungono ad ogni di pacchetto, alcuni bit in più atti a codificare, fra l'altro, i programmi sorgente e destinazione. 
Il livello di trasporto può regolare il flusso di informazioni e può, nel caso del TCP (a differenza dell'UDP), fornire un trasporto affidabile assicurando che i dati giungano a destinazione senza errori ed in sequenza mediante un meccanismo di acknowledgement e ritrasmissione. 

Internet Layer (IP) : Questo livello gestisce la comunicazione tra una macchina ed un'altra; accetta una richiesta di inoltro di un pacchetto da un livello di trasporto insieme all'identificazione della macchina alla quale il pacchetto deve essere inviato.
È il livello più caratteristico della internet, detto appunto IP (internet protocol) che crea il datagramma di base della rete, sostanzialmente, riceve e trasferisce senza garanzie i pacchetti, che gli arrivano da sopra, verso la macchina destinataria.
Esso accetta i pacchetti TCP, li spezzetta se necessario e li incapsula nei datagramma di base IP, riempie gli header necessari ed usa l'algoritmo di rouiting per decidere a chi deve mandare questo pacchetto, in particolare se si tratta di un caso di routing diretto o indiretto.
Il livello Internet gestisce anche i datagrammi in ingresso, verifica la loro validità ed usa l'algoritmo di routing per decidere se il datagramma deve essere inoltrato o processato localmente; in quest'ultimo caso il software elimina l' header del datagramma e sceglie quale protocollo di trasporto gestirà il pacchetto.
In tale fase non solo si svolge la funzione di instradamento, ma si verifica anche la validità dei pacchetti ricevuti. 
Inoltre questo livello gestisce integralmente i messaggi ICMP in ingresso ed uscita. 

Network Interface Layer : Il quarto ed ultimo strato è costituito da una interfaccia di rete che accetta il datagramma IP e lo trasmette, previo incapsularlo in appositi frame, sull'hardware di rete (il cavo) tramite, ad esempio, un transceiver. 








Da notare che se necessario il pacchetto può attraversare altre macchine intermedie (router) prima di giungere a destinazione, ma in queste penetra solo i due strati più bassi dell'interfaccia di rete e del datagramma base IP. 
Uno dei vantaggi più significativi di questa separazione concettuale è che diventa possibile, entro certi termini, sostituire una parte senza disturbare necessariamente le altre, cosicché ricerca e sviluppo possono procedere concorrentemente su ognuno dei tre livelli. 







Confronto tra TCP/IP e ISO/OSI (ex: X.25)


La prima differenza tra i due modelli sta nel numero di strati, in particolare, sette per l'OSI e cinque per internet. Esistono due sottili ma importanti differenze fra lo schema a strati dell'internet e quello del X.25 che è il più famoso protocollo aderente alla normative ISO. La prima riguarda l'affidabilità del servizio di trasporto dati e la seconda la localizzazione dell'autorità e controllo.
Nel modello X.25 il software del protocollo verifica l'integrità dei dati ad ognuno dei primi quattro livelli (escluso ovviamente il livello fisico di rete). In particolare, i livelli due e tre, cioè del link e del network, includono oltre al checksum un meccanismo di "timeout and retransmission", mentre il livello quattro del transport realizza l'affidabilità finale detta "end-to-end". Questo crea dei problemi, poiché ogni operazione di checksum mette in rete un ack ed ogni volta che si eccede il timeout viene duplicato un pacchetto, tutte queste operazioni sono ripetute ad ogni nodo attraversato anche se di passaggio (nel senso che vi si penetra solo al livello minimo, cioè di link).
Al contrario, nell'internet l'affidabilità è solamente un problema "end-to-end", infatti il livello di trasporto, e quindi la destinazione e la sorgente, è l'unico a gestire le ritrasmissioni e gli ack; i nodi di passaggio sono pressoché trasparenti anche se in effetti, hanno la capacità di buttar via i pacchetti se sono corrotti o se i buffer sono pieni. 






Protocolli: Multiplexing e Demultiplexing 

In generale, il multiplexing ed il demultiplexing sono tecniche largamente usate per sfruttare meglio il mezzo trasmissivo. Ad esempio, il TDMA permette di trasmettere più canali multiplexati, sfruttando un unico supporto fisico, salvo demultiplexare i canali stessi a destinazione. 
In particolare, una rete non usa un singolo protocollo per adempiere ai molteplici compiti della trasmissione, ma, piuttosto, si basa su quella che potremmo definire una famiglia di protocolli. In pratica nei sistemi di comunicazione si usa una tecnica di multiplexing e demultiplexing per distinguere fra i vari protocolli ad uno stesso livello gerarchico. 
Quando si spedisce un messaggio, il computer sorgente include dei bit in più per codificare il tipo di messaggio, il processo che lo ha generato ed il protocollo usato. Alla destinazione finale, la macchina demultiplexa i codici e guida così l'informazione verso la giusta procedura. 





 


La figura illustra come il software del Network Interface Layer usa il frame type per scegliere la procedura che gestirà il frame in arrivo; in particolare, un frame fisico può contenere un datagramma IP, un ARP o un RARP. 
A sua volta l'Internet Layer demultiplexa un datagramma IP che può contenere un ICMP, un UDP, un pacchetto TCP oppure un VMTP, come mostrato in figura:







 

 


Internet Protocol Addresses

Affinchè un sistema di comunicazione sia universale è necessario utilizzare un metodo di identificazione di ogni computer connesso ad esso (host). Il TCP/IP assegna ad ogni host, come identificatore universale, un indirizzo binario a 32 bits detto Internet Address o IP Address, usando una struttura analoga a quella degli indirizzi fisici di rete. 
Per rendere questi indirizzi più comprensibili, essi sono suddivisi in quattro gruppi di bits con i rispettivi valori scritti in decimale e separati da punti (Dotted Decimal Notation). 
Concettualmente, ciascun indirizzo IP è una coppia netid-hostid, dove il netid identifica la rete dove è connesso l'host mentre l'hostid identifica lo stesso host su quella rete, come mostrato in figura:

 

 

Gli indirizzi IP sono divisi in cinque classi, di cui tre primarie (A, B, C) distinguibili dai tre bit di ordine più alto. 


Classe A: usata per reti con più di 2 alla 16 (65536) hosts, dedica 7 bits per la netid e 24 per la hostid. 

Classe B: usata per reti con un numero di hosts compreso tra 2 alla 8 (256) e 2 alla 16 (65536) hosts, dedica 14 bits per la netid e 16 per la hostid. 

Classe C: usata per reti con meno di 2 alla 8 (256) hosts, dedica 21 bits per la netid e 8 per la hostid. 

Classe D: è usata per la particolare distribuzione dei dati, detta multicasting. 

Classe E: è destinata ad usi futuri. 


Nella tabella seguente sono riportati i range della Dotted Decimal Notation corrispondenti a ciascuna classe degli indirizzi IP; alcuni valori sono riservati per scopi specifici (127.0.0.0 è riservato al local host):


   
ClasseLowest AddressHighest Address
A0.1.0.0126.0.0.0
B128.0.0.0191.255.0.0
C192.0.1.0223.255.255.0
D224.0.0.0239.255.255.255
E240.0.0.0247.255.255.255

 

Materialmente le reti sono interconnesse tramite computer molto veloci detti router che instradano i pacchetti leggendo l'indirizzo internet. Considerando che un router possa essere connesso a due o più reti fisiche, è necessario assegnare altrettanti indirizzi IP per identificare ciascuna rete; tali computers sono definiti multi-homed hosts. 
Poichè gli indirizzi IP codificano entrambi la rete e l'host ad essa connessa, essi non possono specificare un particolare computer, ma una "connessione" ad una rete. Perciò un router che connette n reti necessita di altrettanti indirizzi IP. 
L'operazione di routing è molto efficace perché, in realtà, viene svolta leggendo solo la parte di indirizzo relativo alla rete. 

Uno dei vantaggi della struttura di indirizzamento Internet è che la sua forma può specificare un indirizzo per un particolare host, una rete o tutti gli hosts su una rete (Broadcast). Lo svantaggio è che, se una macchina ha più indirizzi, la conoscenza di un indirizzo di rete potrebbe essere non sufficiente per raggiungerla, se tale rete non è disponibile. 



ARP (Address Resolution Protocol) 


Gli indirizzi IP sono assegnati indipendentemente dagli indirizzi fisici di una machina. I router utilizzano gli indirizzi internet, ma è bene sottolineare come due macchine qualsiasi possono comunicare solo se conoscono gli indirizzi fisici di rete; sorge quindi il problema di associare agli indirizzi IP quelli reali a livello fisico di ogni rete. 
Per risolvere tale problema esiste l'Address Resolution Protocol (ARP): una macchina, a partire dall'indirizzo IP, usa un messaggio broadcast (ARP request) per trovare l'indirizzo fisico di un'altra macchina. 
Tra tutte le macchine che ricevono l'ARP request, quella a cui corrisponde l'indirizzo IP risponde inviando il proprio indirizzo fisico alla macchina che ha inoltrato la richiesta. 
La figura seguente mostra il protocollo ARP:

 


 

RARP (Reverse Address Resolution Protocol) 


Quando, per vari motivi possibili, una macchina non conosce il proprio indirizzo IP, procede con il Reverse Address Resolution Protocol (RARP) emettendo un ARP-broadcast request ed indicando sè stesso come destinazione finale; sarà compito di alcuni server di rete autorizzati a fornire il servizio RARP, rispondere fornendo l'indirizzo richiesto. 
Nella figura seguente è mostrato il protocollo RARP: 


 

IP (Internet Protocol) 

Concettualmente l'internet prevede tre tipi di servizi, come mostrato in figura, che hanno tra di loro una chiara gerarchia di dipendenze.

Dunque, a livello più basso, un servizio di recapito connectionless rappresenta la base su cui si poggia ogni cosa; infatti il protocollo IP è fondamentale perché, anche se di per sé realizza una trasmissione non sicura, fornisce il supporto necessario per tutti gli altri protocolli affidabili (reliable transport service) quali il TCP e quindi per gli stessi applicativi (application services) quali l'FTP ed il TELNET. 
Tecnicamente, il protocollo IP è definito: 
Unreliable: è un servizio senza garanzie; i pacchetti possono essere persi, venire duplicati o consegnati fuori ordine senza per questo avvisare né l'utente sorgente né quello destinazione. Va comunque sottolineato che la perdita di un pacchetto avviene solamente in casi abbastanza eccezionali, quali la congestione totale di un componente o, addirittura, la caduta della rete. 

Connectionless: è un servizio non orientato alla connessione; ogni pacchetto viene trattato indipendentemente da tutti gli altri. Una sequenza di pacchetti spediti da un computer ad un altro potrebbero seguire cammini diversi per giungere a destinazione. 

Best-effort: il protocollo IP effettua un serio tentativo nell'inoltro dei pacchetti. 
In sostanza IP definisce l'unità base del datagramma e la forma esatta di tutti i dati che passano attraverso Internet, gestisce le funzioni di routing (specificando il percorso sul quale verranno spediti i dati) ed include un insieme di regole che caratterizzano come gli hosts ed i routers processano i pacchetti, la generazione dei messaggi di errore e le condizioni sotto le quali un pacchetto è scartato.  


 

Il datagramma IP 
Il datagramma IP (IP datagram) è l'unità di trasferimento base del TCP/IP. Esso presenta una forte analogia con i frames di una rete reale; infatti si compone di una header area e di una data area. 
L'header (di almeno 20 byte) contiene l'indirizzo di destinazione (Destination IP Address) e di partenza (Source IP Address), anche perché ricordiamo che il livello IP svolge funzioni di routing fondamentali per l'architettura dell'intera rete internet proprio su questi indirizzi. La differenza con l'header del frame fisico reale è che, mentre quest'ultimo contiene un indirizzo fisico, quello del datagramma contiene un indirizzo IP. 
La figura mostra la struttura del datagramma IP:

Più in dettaglio, l'header contiene anche un type field, che identifica il contenuto del datagramma, un checksum field, che assicura l'integrità dei valori contenuti in esso ed il Time To Live, che specifica quanto tempo (in secondi) può sopravvivere un datagramma IP nella rete (questo per evitare che girino sempre nella rete internet causando ovvi problemi). 
Un altro campo molto importante è il "protocol"; infatti un datagramma IP, può contenere al suo interno un pacchetto TCP, un UDP, un ICMP o un VMTP e quindi è necessario procedere con un demultiplex logico basato appunto su tale campo. 
Fra le altre informazioni, l'header del datagramma cont acknowledgment ampia limita il traffico in rete generato dagli ack, poiché lo stesso numero di byte trasmesso viene riconosciuto valido con meno pacchetti ACK.

Il meccanismo della finestra è molto importante anche perché fornisce al ricevente un mezzo per governare la mole di dati spediti dall'utente sorgente. Infatti, nell'header dei pacchetti TCP esiste un campo specifico, detto "window", tramite il quale il ricevente indica al trasmittente la dimensione in byte della finestra che è disposto attualmente a ricevere (finestra del ricevente). Questo accordo avviene quando il ricevente spedisce un ACK (che è anche esso un pacchetto TCP) nel quale specifica innanzitutto l'ultima posizione riconosciuta valida e, a partire da questa, il numero di byte che attualmente può accettare.

Headers

L'unità di trasporto tra i software TCP di due macchine è detto segment. I segmenti sono scambiati per stabilire connessioni, trasferimenti di dati, inviare ACK, comunicare la dimensione della Sliding Windows e chiudere le connessioni.
Poichè il TCP usa il piggybacking (trasmissione contemporanea di dati in entrambe le direzioni), un ACK che viaggia da una macchina A ad una macchina B potrebbe viaggiare in uno stesso segmento in cui viaggiano i dati tra A e B, sebbene l'ACK sia riferito ai dati spediti tra B ed A.
La figura mostra il formato del segmento TCP:


Ciascun segmento è diviso in due parti: un TCP header ed un TCP data.
Un header ha una lunghezza di almeno 20 byte e comprende molti campi; i più importanti sono sicuramente il "port number" e il "sequence number", sia della sorgente che della destinazione.
Il numero di porta serve per distinguere fra loro dei trasferimenti che avvengono contemporaneamente; ovviamente devo conoscere anche i numeri di porta degli altri tre nodi.
Il numero di sequenza identifica la posizione dei byte dati nel flusso spedito all'interno del segmento; serve per ordinare i pacchetti in ricezione e per verificare di non averne perso nessuno; da notare che tale numerazione riguarda i byte non i pacchetti, nel senso che se si usano pacchetti da 500 byte, il primo è numerato 500, il secondo 1000, il terzo 1500 e così via.
Un altro campo è il "acknowledgment number"; anche esso, come il "sequence number", è cumulativo e conta i byte anziché i pacchetti.
Il campo da 2 byte "window" è quello che consente al ricevente di indicare al trasmittente la dimensione della finestra da usare per il trasferimento in corso; da notare che due alla sedici fa 64 K, cioè la dimensione massima della finestra.
Gli ultimi due campi sono il "checksum" dell'header e un "urgent pointer" per alcuni casi particolari.
Ovviamente, in ricezione il livello TCP ritaglia l'header TCP, il livello IP ritaglia l'header IP, il livello di rete ritaglia l'header e il checksum relativo ad esso.


 Le porte del protocollo TCP

Le porte del TCP sono molto più complesse rispetto a quelle dell'UDP, perchè un dato numero di porta non corrisponde ad un singolo oggetto. Infatti nel TCP gli oggetti da identificare sono delle connessioni di circuito virtuali tra due programmi applicativi, e non delle particolari porte.
Il TCP usa la connessione, e non la porta di protocollo, come sua fondamentale astrazione; le connessioni sono identificate da una coppia di end points, ognuno dei quali è costituito da due interi host,port, dove l'host è l'indirizzo IP dell'host e port è il numero di porta TCP su quell'host (per esempio: l'end point 128.10.2.3,25 specifica la porta 25 sulla macchina di indirizzo 128.10.2.3).
Poichè il TCP identifica una connessione con una coppia di valori, uno dato numero di porta può essere condiviso da più connessioni su una stessa macchina, senza che si crei ambiguità. Perciò la macchina identificata da 128.10.2.3,53 può comunicare simultaneamente con le macchine identificate da 128.2.254.139,1184 e 128.9.0.32,1184.
Si possono così creare servizi concorrenti con connessioni multiple simultanee, senza dover riservare un numero di porta locale per ogni connessione. Per esempio, alcuni sistemi forniscono un accesso concorrente al loro servizio di posta elettronica, permettendo a più utenti di spedire un E-mail contemporaneamente.


Ci sono due fondamentali approcci per l'assegnazione delle porte, usando:

Central Authority: due computers che devono interoperare tra di loro, si accordano per permettere ad un'autorità centrale di assegnare i numeri di porta (Well-known ports) che necessitano e di pubblicare la lista di tutte le assegnazioni (Universal assignment) il software che gestisce le porte sarà realizzato in base a tale lista.

Dynamic Binding: in questo approccio le porte non sono universalmente conosciute; infatti, se un programma necessita di una porta, è il software di rete ad assegnargliela. Per sapere la porta corrente assegnata su un altro computer, è necessario inviargli una richiesta del numero di porta assegnata al servizio di interesse.

I progettisti del TCP/IP usano un approccio ibrido che assegna alcuni numeri di porta a priori (Low values) e lascia altri disponibili per siti locali o programmi applicativi (High values).
La tabella seguente contiene alcune tra le più significative TCP well-known ports:

Decimal

Keyword

UNIX Keyword

Description

7

ECHO

echo

Echo

9

DISCARD

discard

Discard

11

USERS

systat

Active Users

20

FTP-DATA

ftp-data

File Transfer Protocol (data)

21

FTP

ftp

File Transfer Protocol

23

TELNET

telnet

Terminal connection

25

SMTP

smtp

Simple Mail Transport Protocol

42

NAMESERVER

name

Host Name Server

43

NICNAME

whois

Who is

53

DOMAIN

nameserver

Domain Name Server



     

 Il controllo della Congestione

Esistono almeno due notevoli problemi col TCP, relativi alla congestione della rete ed al meccanismo di "timeout and retransmission".
La congestione è una condizione di ritardo critico causata da un sovraccaricamento dei datagrammi in uno o più switching points (es. router). Quando avviene una congestione, il ritardo aumenta ed i routers iniziano ad accodare datagrammi, finchè non sono in grado di instradarli.
Nel peggiore dei casi, il numero dei datagrammi che arrivano ad un router congestionato cresce (esponenzialmente nel tempo) fino a che esso non raggiunge la sua massima capacità e comincia a perdere datagrammi. Dal punto di vista degli hosts, la congestione è semplicemente un aumento di ritardo.
Inoltre, poichè la maggiorparte dei protocolli usa un meccanismo di timeout and retransmission, essi rispondono al ritardo ritrasmettendo datagrammi, aggravando così la congestione.
Un aumento di traffico produce un aumento di ritardo, che provoca a sua volta un aumento del traffico, e così via, finchè la rete non può essere più usata: tale condizione è detta Congestion Collapse (Collasso dovuto alla congestione).
Non esiste un meccanismo esplicito per risolvere il controllo della congestione, anche se un'attenta implementazione del TCP/IP può permette di individuare ed affrontare meglio la situazione.
Esistono due modi per affrontare il problema della congestione di rete: recuperare la funzionalità una volta che la congestione ha avuto luogo (Recovery) oppure evitarla (Avoidance).
Per evitare il collasso della rete, il TCP può utilizzare la tecnica del Multiplicative Decrease Congestion Avoidance. Il TCP/IP mantiene un secondo limite, oltre dimensione della finestra del ricevente, detto congestion window limit; in oogni istante il TCP assume come dimensione della finestra di trasmissione, la minima tra le due.
In condizioni normali, le due finestre sono uguali, ma in condizioni di congestione, la congestion window riduce il traffico che il TCP immette in rete, dimezzando la propria dimensione ogni volta che si perde un segmento (fino ad un minimo di uno). Il rate di trasmissione è ridotto in modo esponenziale ed il valore del timeout viene raddoppiato per ogni perdita.
Se , una volta superata la congestione, si dovesse invertire la tecnica del Multiolicative Decrase, raddoppiando la congestion window, si avrebbe un sistema instabile che oscillerebbe ampiamente tra assenza di traffico e congestione.
Per ripristinare le condizioni di normale funzionamento, una volta che è avvenuto il collasso, il TCP può invece adottare una tecnica di Slow Start Recovery. Non appena inizia il traffico su una nuova connessione o aumenta dopo un periodo di congestione, la congestion window ha la dimensione di un singolo segmento ed ogni volta che arriva un ACK, viene incrementata di uno.
In questo modo, dopo aver trasmesso il primo segmento ed aver ricevuto il suo ACK, la finestra di congestione viene raddoppiata; una volta inviati i due segmenti, per ogni ACK ricevuto la congestion window sarà incrementata di una unità, così il TCP potrà spedire quattro segmenti, e così via, fino a raggiungere il limite imposto dalla finestra del ricevente.
Per evitare che la dimensione della finestra si incrementi troppo velocemente e causi congestione addizionale, il TCP impone una ulteriore restrizione. Una volta che la finestra di congestione raggiunge la metà del suo valore originale, il TPC entra in una fase di congestion avoidance e rallenta il rate di incremento; in questo caso la dimensione della finestra sarà incrementata di una sola unità dopo che tutti i segmenti della finestra hanno ricevuto ACK.
La combinazione delle due tecniche di Recovery ed Avoidance migliora drasticamente le prestazioni del TCP senza bisogno dell'aggiunta di ulteriori strumenti per il controllo della congestione.

 

 

Fine del manuale



Torna alla pagina delle informazioni tecniche
Torna alla Home Page di Jack
(C) 2003-2024 Jack aka JackMauro aka Mauro