|
|
Transmission Control Protocol/Internet Protocol
II Parte
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):
|
|
|
| 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.
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 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 |
ICMP (Internet Control Message Protocol)
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.
Continua...
Nuova pagina 1
|