Copyright © 1986 Universita'
di Firenze. All rights reserved.
Free license available.
INTERNET & APPLICATIONS
Transmission Control Protocol/Internet Protocol




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):
|
|
|
| Classe |
Lowest Address |
Highest Address |
| A |
0.1.0.0 |
126.0.0.0 |
| B |
128.0.0.0 |
191.255.0.0 |
| C |
192.0.1.0 |
223.255.255.0 |
| D |
224.0.0.0 |
239.255.255.255 |
| E |
240.0.0.0 |
247.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.
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:

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:

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 (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.
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 quel particolare router
che gli permette di giungere direttamente a destinazione.
L'algoritmo che svolge queste funzioni (IP routing algorithm) utilizza su ogni macchina una
tabella di routing (IP routing table), che contiene informazioni circa alcune
possibili destinazioni e su come raggiungerle. Se comprendesse tutte le destinazioni
possibili diventerebbe troppo ingombrante e sarebbe impossibile tenerla
aggiornata.
Allora di solito ci si limita a mantenere le informazioni
degli utenti sulla stessa rete o quelle più frequentemente usate lasciando
un indirizzo di default per tutti gli altri.
Poiché i router operano in base solo alla parte di indirizzo IP relativo alla rete di
destinazione l'instradamento è molto efficiente e le tabelle necessarie
abbastanza piccole: tipicamente una tabella di routing contiene una coppia N-R,
dove N è l'indirizzo IP della rete di destinazione ed R (next-hop) è quello
del successivo router che permette di raggiungere la rete N. Chiaramente tutte le R
presenti nella tabella di un router indicheranno al più i routers connessi direttamente ad esso,
come mostrato nell'esempio in figura, che presenta quattro reti e tre routers (Q, R, S):

Nella seguente tabella è riportata la tabella di routing di R:
|
|
|
| To reach hosts on network |
Route to these address |
| 20.0.0.0 |
Deliver Directly |
| 30.0.0.0 |
Deliver Directly |
| 10.0.0.0 |
40.0.0.0 |
| 20.0.0.5 |
30.0.0.7 |
Si tratta di un meccanismo attraverso il quale i routers
e gli utenti comunicano per sondare eventuali problemi o comportamenti
anomali verificatisi in rete. Ricordiamo che il protocollo IP, di per sé, non contiene
nessuno strumento per poter riscontrare, da parte della stazione sorgente
né destinazione, la perdita di un pacchetto o il collasso di una rete.
L'ICMP consente una comunicazione straordinaria tra routers ed hosts
permettendo lo scambio di segnali di errore o di controllo attraverso le interfacce software
dell'internet, senza però arrivare su fino al livello degli applicativi; esso è
una parte necessaria ed integrante dell'IP ed è contenuto nell'area dati di un
datagramma IP.
L'ICMP include messaggi di source quench, che ritardano il rate di trasmissione,
messaggi di redirect, che richiedono ad un host di cambiare la propria tabella di routing,
e messaggi di echo request/reply, che l'host può usare per determinare se la
destinazione può essere raggiunta (ping).
Un ICMP ha tre campi di lunghezza fissa alla testa del messaggio: il type field (8 bits),
che identifica il messaggio, il code field (8 bits), che contiene informazioni circa il
tipo del messaggio, ed il checksum field (16 bits). I restanti campi del formato
ICMP variano in base al tipo di messaggio.

Ultimo aggiornamento: 11 Novembre 1996





Explore the TELEMAT Site !!!
WORK IN PROGRESS by D. Mariano e C. Guadalupi