Fondamenti di reti

Tecnologie di rete

Si definisce una rete come un insieme di macchine interconnesse tra loro mediante un qualche mezzo di trasmissione; per macchine si intende sia computer che stampanti o altri dispositivi che abbiano la possibilità di comunicare tra loro; come mezzo di trasmissione, si pensi ai comuni cavi coassiali, alle fibre ottiche, ai satelliti.

 

Parlando comunemente, esistono due tipi di tecnologie di trasmissione:

 

Le reti a broadcast hanno un unico canale di comunicazione condiviso da tutte le macchine della rete: i pacchetti inviati da una macchina sono ricevuti da tutte le altre e un campo indirizzo, all’interno del pacchetto, specifica a chi esso è diretto; la macchina che possiede il giusto indirizzo elabora il pacchetto, mentre tutte le altre lo scartano.

 

 

 

 

 

 

 

Le reti point-to-point consistono di connessioni individuali tra coppie di macchine: un pacchetto per raggiungere la corretta destinazione potrà visitare una o più macchine intermedie.

 

 

 

 

 

Si possono suddividere le reti in base alla loro dimensioni:

 

 

Local Area Network (LAN)

 

Le LAN sono reti private all’interno di un singolo edificio o di una università; possono estendersi al più per qualche chilometro; sono maggiormente utilizzate per scambiare informazioni e condividere risorse (stampanti, scanner...). Spesso usano una tecnologia di trasmissione che sfrutta un solo cavo al quale sono collegate tutte le macchine; permettono velocità di trasmissione che vanno da 10 a centinaia di Mbps.

 

 

Metropolitan Area Network e Wide Area Network (MAN e WAN)

 

Le MAN sono sostanzialmente delle LAN ingrandite e usano delle tecnologie simili; possono essere sia pubbliche che private e riescono a coprire più uffici a distanza di poche decine di chilometri. Possono supportare la trasmissione di voce oltre che di dati.

 

Le WAN coprono vaste aree geografiche, anche una nazione: sono composte da insiemi di macchine collegate a sottoreti; ogni sottorete ha il compito di trasportare i pacchetti tra le varie macchine. Le sottoreti sono composte da linee di trasmissione, che fanno viaggiare le informazioni, e da elementi di commutazione, cioè macchine specializzate nel collegare due o più linee di comunicazione.

 

Per i nostri scopi, focalizzeremo l'attenzione sulle LAN e in particolare modo sul funzionamento delle reti IEEE 802.3, meglio conosciute come reti Ethernet.

 

 

Ethernet

 

L’IEEE ha prodotto diversi standard per le LAN, noti come IEEE 802 che includono CSMA/CD, Token Bus e Token Ring. I vari standard differiscono nel livello fisico e MAC, ma sono compatibili al livello data link.

 

Lo standard IEEE 802.3 è per una LAN CSMA/CD: un certo numero di macchine sono connesse ad un cavo comune; tutte le macchine possono “ascoltare” il cavo; se una macchina vuole trasmettere, ascolta il cavo per determinare se esso è già in uso; se il cavo è impegnato, la macchina attende finché non diventerà libero, altrimenti trasmette immediatamente. Se due o più stazioni iniziano la trasmissione contemporaneamente, avverrà una collisione: le macchine coinvolte termineranno immediatamente la trasmissione e, prima di riprovare, attenderanno una quantità di tempo casuale.

Lo standard 802.3 ha una storia interessante: il primo sistema era un ALOHA al quale fu aggiunto il rilevamento della portante; nel 1976 Bob Metcalfe e David Boggs, del  Xerox PARC (Palo Alto Research Center) presentarono alla comunità informatica un documento intitolato: “Ethernet: distributed packet switching for local computer networks”. Veniva descritto un sistema CSMA/CD a 2,94 Mbps per connettere più di 100 workstation su di un cavo di 1 km. Questo sistema fu chiamato Ethernet, ed ebbe un così grande successo, che la Xerox, la DEC e l’Intel decisero uno standard per una Ethernet a 10 Mbps. Questo standard è alla base dell’802.3.

Fino a quel momento le reti, soprattutto quelle più sviluppate, erano tutte dipendenti dai mainframe di rete (computer specializzati che suddividevano e instradavano le connessioni) e prima ancora si utilizzava il metodo del time sharing, in cui il mainframe svolgeva anche funzioni di calcolo per il sistema: più persone potevano accedere direttamente alle risorse attraverso dei limitati terminali.

Il protocollo ethernet, invece, è stato sviluppato sul concetto di condivisione: tutte le macchine di una rete locale condividono la stessa connessione, lo stesso cavo.

Poiché molte macchine possono condividere una singola connessione ethernet, ognuna di esse deve possedere un identificatore (in realtà, è la scheda di rete, l’hardware, a possedere un indirizzo, non la macchina in se); ciò non accade quando si comunica con una connessione dial-up utilizzando il modem casalingo, perché si presuppone che tutti i dati che si inviano siano destinati all’entità che risiede all’altro capo della linea (in genere l'Internet Service Provider, che assegna un indirizzo IP dinamico).

Tuttavia, se si comunica attraverso una rete ethernet, bisogna specificare esattamente a quale macchina saranno consegnati i pacchetti inviati, anche se la rete fosse composta solamente da due computer; infatti il protocollo ethernet fu sviluppato per permettere a migliaia di macchine di dialogare fra loro.

Ciò è possibile ‘inserendo’ un numero esadecimale in ogni destinazione ethernet; questo numero, in apparenza astruso (ad esempio: 00-40-05-A5-4F-9D) è l’indirizzo MAC (Media Access Control).

 

 

MAC address

 

MAC è l’acronimo di Media Access Control ed è l'indirizzo fisico (è infatti memorizzato nel firmware della scheda) dell'interfaccia di rete. Il MAC address è composto da 48 bit: 24 bit identificano il nome del produttore della scheda ethernet; altri 22 bit identificano il numero di serie UNICO assegnato alla scheda dallo stesso produttore: in questo modo l’indirizzo MAC di due ethernet adapter non sarà mai uguale; questo serial number è chiamato OUI (Organizationally Unique Identifier).

I restanti due bit indicano, uno se l’indirizzo è multicast/broadcast, l’altro indica se l’indirizzo è stato riassegnato come indirizzo gestito localmente (locally administered address).

 

 

Il ‘promiscuos mode

 

Solitamente la scheda di rete accetta solo i pacchetti destinati ad essa, mentre ignora quelli destinati ad altre macchine. Esiste, tuttavia, una modalità di funzionamento della scheda detto 'promiscuos mode' (modalità promiscua) in cui è permessa l'accettazione di tutto il traffico, ovvero anche quello non destinato ad essa.

 

 

Indirizzi IP

 

Al fine di mascherare le differenze esistenti tra le varie componenti che costituiscono Internet (reti, router, web-server, etc..) è stato introdotto un sistema di indirizzamento universale basato su identificativi di prefissata lunghezza, denominati indirizzi IP, dal nome del protocollo responsabile di mascherare tali differenze.

Il concetto alla base del protocollo è quello di assegnare un indirizzo IP ad ogni interfaccia hardware connessa alla rete Internet, sia essa appartenente ad una workstation, ad un server o ad un nodo intermedio (gateway). Queste entità potranno essere fisicamente connesse a Internet per mezzo di tipologie diverse di collegamento: alcune stazioni utilizzeranno connessioni telefoniche commutate, altre utilizzeranno LAN, Token Ring e così via.

Al fine di regolare il flusso del traffico IP da una rete all’altra esistono dei dispositivi d’interconnessione in grado di processare datagram (o pacchetti) IP. Tali dispositivi sono chiamati router o IP gateway.

Ciò implica che il gateway stesso abbia più interfacce e ad ognuna di essa sarà associato un indirizzo IP.

Una regola sempre valida nell’associazione degli indirizzi è l’impossibilità di destinare lo stesso indirizzo IP a due interfacce distinte e contemporaneamente connesse a Internet, in quanto sarebbe impossibile distinguerle.

Sul fronte opposto, se ad una interfaccia non sia stato preliminarmente assegnato alcun indirizzo, nessun datagramma IP potrà raggiungerla.

Quindi, ad ogni entità che vuol far parte di Internet, deve essere associato un indirizzo IP univoco e universale, che la contraddistingua da tutte le altre presenti sulla rete.

 

 

Ciascun indirizzo IP è costituito da 32 bit: essi vengono resi facilmente comprensibili e memorizzabili all’uomo attraverso la notazione decimale puntata: una serie di 4 cifre decimali separate da punti, in cui ogni cifra (compresa tra 0 e 255) rappresenta un byte dell’indirizzo IP. L’indirizzo 00001010000000000000000000000001 (32 bit) può essere così comodamente espresso in 10.0.0.1.

Gli ideatori del protocollo stabilirono di assegnare a macchine appartenenti ad una stessa rete locale indirizzi di uno stesso tipo (uno stesso pool di indirizzi IP), in modo da semplificare l’instradamento dei datagram.

 

Si pensi ad un indirizzo IP come se fosse diviso in due parti distinte:

- i bit più significativi stabiliscono il gruppo di appartenenza (la rete locale)

- i bit meno significativi stabiliscono l’identità della stazione all’interno del gruppo

 

Secondo l’idea originaria l’indirizzamento prevedeva una semplice gerarchia a due livelli; i primi bit rappresentano il network address, comune ad un gruppo di stazioni; i rimanenti bit rappresentano un identificativo univoco all’interno della rete locale (host address):

 

network address

host address

1 1 0 0 0 0 0 0. 1 0 1 0 1 0 0 0 . 0 0 0 0 0 1 1 1 .

1 0 0 0 0 1 1 0

 

192.168.7.134

 

Gli indirizzi di rete vengono assegnati da un’autorità nazionale (o regionale) competente, sulla base delle necessità di ciascuna organizzazione che ne fa richiesta. Per ottenere un pool d’indirizzi IP sarà necessario sottoporre all’attenzione dell’autorità competente la topologia della propria rete, indicando, tra l’altro:

-         il numero delle stazioni attive;

-         il numero dei server e dei servizi internet attivi;

-         un dettagliato piano di sviluppo dell’infrastruttura di rete per il prossimo futuro.

L’insieme di network address e di host address compone il vero e proprio indirizzo IP dell’interfaccia della stazione o del gateway.

Quando fu progettato il protocollo IP, si pensò che 32 bit potessero fornire un numero di combinazioni di indirizzi più che sufficiente per far fronte a tutte le richieste, ma il problema dell’esaurimento degli indirizzi IP nacque fin dai primi anni del protocollo, poco dopo il passaggio della maggior parte delle reti al protocollo IP.
Siccome il numero di stazioni ospitate in una rete locale varia considerevolmente da organizzazione a organizzazione, si rese indispensabile stabilire pool di indirizzi di dimensioni differenti per poter accomodare le diverse necessità dell’utenza, senza sprecare indirizzi IP.
Per questo motivo sono state definite tre diverse classi di indirizzi IP, ognuna delle quali permette di gestire un certo numero di indirizzi da assegnare alle interfacce; le classi originariamente definite furono tre: A, B e C.

Il numero di interfacce che possono essere ospitate da una rete locale è di fatto dipendente dal numero di bit riservati all’host address. Le diverse classi si differenziano fondamentalmente per la diversa lunghezza dei bit del network address e dell’host address.
Indipendentemente dalla classe di indirizzo, due particolari indirizzi non potranno essere assegnati ad alcuna interfaccia: l’indirizzo con i bit dell’host address tutti a zero (xxx.xxx.xxx.000) e quello con tutti i bit dell’host address a uno (xxx.xxx.xxx.255): il primo identifica la rete nel suo complesso, mentre il secondo individua un indirizzo di broadcast locale.

Un significato speciale hanno anche gli indirizzi IP: 0.0.0.0 e 255.255.255.255; al primo è stato assegnato il significato di questa stazione, al secondo è stato assegnato il significato di tutte le stazioni.

 

Vediamo quali sono le classi di indirizzi IP:

 

A

0

(network) +7 bit

host (24 bit)

 

B

10

(network) +14 bit

(16 bit)

 

C

110

(network) +21 bit

host (8 bit)

 

D

1110

multicast

 

E

1111

riservati a sperimentazione

 

Le reti di classe A comprendono gli indirizzi in cui il primo byte è compreso tra 0 e 126, con 8 bit riservati al network address e 24 riservati all’host address; il numero di reti è fissato a 126; il numero di interfacce possibili con una rete di classe A è: 16.777.214 (224-2).

La rete 127.x.x.x, sempre di classe A è riservata e viene definita rete di loopback, mentre l’indirizzo IP 127.0.0.1 è usato, ad esempio, per la comunicazione tra programmi server e client residenti sulla stessa macchina, che può anche essere priva di interfacce fisiche.

Le reti di classe B comprendono indirizzi IP con il primo byte compreso tra 128 e 191; la classe B riserva 16 bit al network address e altrettanti all’host address.

Il numero complessivo di reti è fissato a 16128, mentre il numero di stazioni che possono trovare posto in una rete di classe B è: 65.534 (216-2).
Le reti di classe C sono sensibilmente più numerose delle altre e rappresentano la soluzione ideale per numerose organizzazioni di limitate dimensioni.

Gli indirizzi delle reti di classe C sono individuati dal valore dei primi tre bit (1 1 0) per ottenere un primo byte compreso tra 192 e 223. 24 bit sono riservati al network address, i rimanenti 8 sono lasciati all’host address.

Il numero complessivo di reti di classe C è fissato a 2.097.152 mentre il numero di interfacce possibili è stato limitato a 254 (28-2).

Le classi speciali D ed E hanno funzioni particolari: la prima  è riservata alla trasmissione di datagram IP in modalità multicast (primo byte tra 224 e 239), la seconda (primo byte compreso tra 240 e 254) è utilizzata a fini sperimentali.

 

 

Pacchetti

 

Qualunque cosa si voglia trasmettere tra macchine collegate ad una rete viaggia all'interno di entità chiamate 'pacchetti'. Come nel sistema postale, ogni pacchetto viene etichettato con un indirizzo di destinazione ed uno del mittente, ed al suo interno sono presenti le informazioni. Per far comunicare correttamente ed in maniera indipendente macchine collegate a reti diverse, si utilizzano gli indirizzi IP, mentre le macchine appartenenti alla stessa Ethernet usano anche l'indirizzo MAC. Nei pacchetti viaggiano anche delle informazioni supplementari, necessarie a vari scopi, come ad esempio per verificare se si sono verificati errori nella trasmissione, per dividere e riassemblare i pacchetti, ...

In genere, gli indirizzi e le informazioni di controllo memorizzate nei pacchetti "avvolgono" i dati veri e propri; tutto ciò che si trova prima dei dati è chiamato header (intestazione), mentre il trail (coda) è presente dopo i dati.

 

Vediamo con un breve esempio come avviene la comunicazione:

A possiede un indirizzo IP: 195.142.131.23 (tutti i pacchetti inviati da A avranno questo indirizzo sorgente)

B possiede invece l’indirizzo IP: 192.168.100.54

Per comunicare con B, A deve creare un pacchetto IP con questi indirizzi destinazione e sorgente (questo compito è svolto dalle applicazioni usate da A per spedire i dati lungo la rete). I dati "grezzi" vengono incapsulati in un pacchetto: ogni protocollo che opera sul pacchetto memorizza alcune informazioni nell'header ed eventualmente nel trail.

Per macchine collegate ad Internet, i protocolli che eseguiranno questo lavoro sono IP e TCP (Transmission Control Protocol ) o UDP (User Datagram Protocol); poiché generalmente, i dati passano attraverso reti Ethernet, al pacchetto così costruito, saranno aggiunte ancora altre informazioni:

 

MAC destinazione MAC sorgente Info IP Info TCP o UDP DATI CRC


Non appena il pacchetto è stato creato, A lo invierà a B:  esso attraverserà uno o più router prima di raggiungere la destinazione finale; ogni router che il pacchetto incontrerà, leggendo l'indirizzo IP di destinazione, deciderà il corretto cammino dei dati verso B.
 

 

Header

 

Le informazioni supplementari che precedono i dati nei pacchetti, costituiscono l'header del pacchetto.

Tali informazioni variano a secondo dei protocolli che elaborano il pacchetto. In genere, i pacchetti che viaggiano su Internet sono datagram IP, che trasportano segmenti TCP o datagram UDP, i quali, al loro interno, trasportano i dati veri e propri (payload).

In figura si può osservare la struttura generica di un pacchetto; l'header totale è costituito dagli header inseriti dagli specifici protocolli (IP, TCP, UDP, ICMP). Ogni header ha dei campi obbligatori, mentre altri sono opzionali; comunque, ogni protocollo specifica precisamente la struttura e il significato di ogni campo del suo header (Stevens, Comer).