
La trattazione fin qui esposta riguarda reti con differenti mezzi
fisici, ma, tuttavia, facenti parte della stessa LAN.
Vediamo ora come l'instradamento procede su reti più estese,
le cosiddette WAN.
I router appartengono a due categorie, End System (ES) ed Intermediate
System (IS). Sui primi risiedono le applicazioni che comunicano
usando la rete, i secondi hanno solo funzioni di instradamento
dei messaggi.
Un primo problema è quello di identificare in modo univoco ogni nodo della rete. A tale scopo, ad ogni sistema viene associato un indirizzo numerico. Per ragioni di comodità viene solitamente utilizzata una codifica che prevede un nome invece di un indirizzo numerico. E' perciò necessario mantenere una corrispondenza biunivoca tra gli indirizzi e i nomi; per fare questo viene utilizzato un database distribuito detto "name server".
Nel caso in cui il mittente sia su una rete diversa dal destinatario è indispensabile un'operazione di internetworking: il mittente affida il pacchetto ad un IS che si occuperà di farlo giungere fino a destinazione.
Esistono tre diverse tecniche per l'instradamento dei pacchetti:
Le tabelle di instradamento possono essere scritte manualmente dal gestore della rete oppure calcolate automaticamente da un opportuno algoritmo. Tale algoritmo opera scambiando tra gli IS informazioni relative alla topologia e allo stato della rete. Ogni IS deve conoscere quali ES sono collegati alla sua stessa LAN per inserirli nelle tabelle e propagare l'informazione della loro raggiungibilità ad altri IS. Vale anche il viceversa, perché ogni ES deve sapere a chi inviare i messaggi non destinati ai nodi collegati alla stessa LAN. Questo problema è noto con il nome di "Neighbor Greetings".
A differenza dei bridge che sono trasparenti al protocollo di livello 3,
nel senso che ignorano il contenuto del campo INFO di livello 2, i router
operano a livello 3 e utilizzano per l'internetworking tutte le
informazioni contenute nella busta di questo livello.
Visto che le buste di livello 3 di diverse architetture di rete (Decnet,
TCP/IP, etc) hanno formati incompatibili si è reso necessario l'uso di
router multiprotocollo che devono replicare il modulo di instradamento (che
contiene l'agoritmo di calcolo della tabella di instradamento, la tabella
di instradamento ed il processo di forwardind del pacchetto) per ogni
protocollo.
E' anche stata sviluppato un modulo detto di bridging per trattare
quei protocolli che non hanno un livello 3 quali, ad esempio, LAT, MOP etc.
Molto spesso a livello 3, oltre al protocollo per trasportare i dati utente, sono definiti uno o più protocolli ausiliari per il neighbor greetings e per permettere ai router di scambiarsi informazioni di instradamento. La necessità di realizzare funzionalitè di gestione (management) del router rende necessaria la presenza negli IS di protocolli specifici per la gestione, che sono collocati nei livelli superiori al terzo (lo standard "de facto" e con cui si opera normalmente sulle apparecchiature di rete è SNMP).
Il livello network può offrire servizi di tipo connesso e non connesso: l'implementazione dei servizi connessi (CONS) avviene tramite circuiti virtuali mentre i servizi non connessi (CLNS) sono adottati nelle reti quali Decnet e TCP/IP.
Gli algoritmi di instradamento hanno la funzione di ottimizzare l'utilizzo delle linee e devono avere alcune caratteristiche:
Gli algoritmi si dividono in due categorie, non adattativi ed
adattativi.
I primi utilizzano criteri fissi di instradamento e sono, perciò,
statici e deterministici, i secondi calcolano ed aggiornano le
tabelle di instradamento in funzione della topologia della rete e dello
stato dei link e sono così dinamici e non deterministici.
Nelle reti con topologia ad albero i primi sono i più efficienti,
poiché sono più semplici. Dove invece la configurazione
della rete è magliata, per sfruttare al meglio ogni possibile
percorso è bene utilizzare algoritmi dinamici.
Appartengono al primo gruppo il Fixed Directory Routing ed il
Flooding, mentre appartengono al secondo il Routing Centralizzato,
il Routing Isolato ed il Routing Distribuito.
Gli algoritmi di più moderna concezione sono quelli distribuiti
che si dividono ulteriormente in due categorie: Distance Vector
e Link State Packet.
Il Fixed Directory Routing prevede che ogni nodo abbia una tabella di instradamento che metta in corrispondenza il nodo da raggiungere con la linea da usare. Queste entry sono puramente statiche, poiché è il gestore che si occupa di determinarle e di configurare il router. Il gestore ha così il completo controllo sul traffico ed è necessario un suo intervento in caso di guasti.
È comodo utilizzare quest'algoritmo nelle zone più periferiche di una rete, dove esiste un solo collegamento che le interconnette al resto della rete, poiché risulta difficoltoso gestire le tabelle in reti di grandi dimensioni; le regole di instradamento specificate su ogni singolo router prendono il nome di route statiche.
Ciascun pacchetto che arriva ad un router viene instradato su tutte le porte, eccetto quella da cui è arrivata. Con questo metodo, concepito per reti militari, si massimizza la probabilità che i dati arrivino a destinazione, ma si induce sulla rete un carico molto elevato. Per limitare il carico prodotto si può introdurre un age-counter che permette di eliminare i pacchetti che hanno attraversato molti router, oppure si può usare una tecnica che prevede di scartare i pacchetti che passano da un router per la seconda volta.
Si presuppone che esista un RCC, Routing Control Center, che conosca la topologia di tutta la rete e che calcoli e distribuisca le tabelle di instradamento per ogni router della rete.
Questo metodo consente una gestione della rete molto accurata, in quanto le tabelle possono essere calcolate con algoritmi sofisticati, ma implica l'ipotesi di un gestore a livello mondiale, ipotesi oggi sicuramente non realistica. Il RCC dovrebbe essere duplicato e la porzione di rete intorno ad esso sarebbe soggetta ad un elevato volume di traffico di servizio; inoltre, in caso di guasti, possono verificarsi situazioni in cui il RCC perde il contatto con intere porzioni di rete e che si verifichino degli aggiornamenti solo parziali che potrebbero portare a situazioni di loop.
È un metodo esattamente opposto al precedente. Infatti, ogni router presente in rete calcola le proprie tabelle di instradamento in maniera del tutto indipendente dagli altri.
L'algoritmo più diffuso è il Backward Learning, utilizzato con successo nei bridge IEEE 802.1D all'interno di una LAN. La modifica più importante per adattarlo a situazioni più estese è l'aggiunta nell'header del pacchetto di un campo di costo, inizializzato a zero dalla stazione mittente ed incrementato da ogni stazione intermedia, di modo che ogni router possa modificare la propria tabella se si accorge che una stazione è raggiungibile con un costo minore.
Un limite di questo algoritmo è che i router si accorgono soltanto di eventuali miglioramenti dello stato della rete. È necessario, quindi, che le entry dinamiche restino valide solo per un determinato periodo di tempo, allo scadere del quale vengono riaggiornate.
È una fusione dei due metodi sopra descritti. Non esiste un RCC, ma le sue funzionalità sono realizzate in modo distribuito da ogni singolo nodo della rete. Le tabelle vengono aggiornate dai routers scambiandosi fra loro informazioni di servizio mediante un apposito protocollo. Le tabelle di instradamento, come già detto in precedenza, vengono calcolate a partire dai due parametri: costo e hops. Il costo di ciascuna linea di ciascun router è un parametro che viene impostato dal network manager tramite il software di gestione dei router stessi. Oggi gli algoritmi distribuiti principali sono il Distance Vector ed il Link state Packet (lo stato dell'arte), descritti nei paragrafi seguenti.
Ogni router mantiene in memoria, oltre alla propria tabella di instradamento,
una struttura dati, detta appunto Distance Vector per ogni linea. Il
Distance Vector associato a ciascuna linea contiene informazioni ricavate
dalla tabella di instradamento del router collegato all'altro estremo
della linea.
Il calcolo delle tabelle di instradamento avviene tramite un processo di
funzione di tutti i distance vector associati alle linee attive del router.
Tutte le volte che un router calcola una nuova tabella di instradamento,
la invia agli IS adiacenti (cioè quelli collegati da un cammino
fisico diretto) sotto forma di distance vector.
Ogni entry è composta da quattro parametri, indirizzo,
hops, costo e linea, e la tabella contiene entry relative ad ogni
nodo presente in rete.
Si nota che il router a cui appartiene questa tabella ha indirizzo 5, poiché appare raggiungibile con costo 0 ed in 0 hops.
Il Distance Vector da inviare al router adiacente è composto
dalle prime tre colonne. Il router che lo riceve prima di tutto
verifica se vi sono delle modifiche dal precedente e, in caso
affermativo, aggiorna i campi hops e costo, sommando 1 a tutti
gli hops e sommando il costo della linea da cui è arrivato
il messaggio al campo costo. Il passo successivo è l'aggiornamento
della propria tabella tramite un processo di fusione (merge) di
tutti i Distance Vector a lui pervenuti da ogni linea attiva.
La fusione avviene selezionando dalle entry con indirizzo uguale
quella con il minor costo. A parità di costo, si seleziona
quella che ha il minor numero di hops. La selezione avviene in
maniera casuale se entrambi i parametri sono uguali.
Un vantaggio di questo algoritmo è la facile implementazione.
Tuttavia è sconsigliato utilizzarlo in reti con più
di mille nodi, poiché ha una complessità elevata
(esponenziale nel caso peggiore). Inoltre è lento a convergere,
poiché dipende dalla velocità del router più
lento presente in rete.
Questo algoritmo è usato in Decnet fase IV e in alcune realizzazioni di TCP/IP (RIP e IGRP)
Questo algoritmo presuppone che ogni router abbia in memoria la mappa di tutta la rete. Non è pensabile che questa mappa sia scritta nel router da management, ma ogni router, a differenza dell'algoritmo precedente, coopera per crearla e mantenerla aggiornata, poi calcola indipendentemente la propria tabella.
Supponiamo di avere una rete con 6 nodi come in figura.

Un router apprende, tramite protocolli Neighbor Greetings, i primi n nodi vicini, associando ad ognuno di essi il costo della linea.
Il passo successivo consiste nel propagare tale informazione ai router presenti in rete tramite un messaggio definito Link State Packet (LSP). La propagazione avviene con un algoritmo di tipo Flooding.
La mappa della rete si costruisce fondendo ogni LSP e viene memorizzata
in una LSP base dati del formato mostrato nella tabella seguente.
Si nota che tale database è simile ad una matrice di adiacenza
di un grafo che rappresenta la rete intera. Tale database, se
l'algoritmo converge, deve risultare uguale in ogni IS della rete.
Il LSP database, rappresentando la mappa della rete con i costi associati,
è l'informazione necessaria e sufficiente affinchè un router
possa calcolare le sue tabelle di instradamento.
Si noti la differenza con il distance vector: in quel caso i router
cooperano direttamente per calcolare le tabelle di instradamento, qui
i router cooperano per mantenere aggiornata la mappa della rete, poi ogni
router calcola la propria tabella di instradamento in modo autonomo.
Il calcolo della tabella di instradamento si riduce ora al calcolo
dello spanning tree di tipo SPF (Shortest Path First) e lo si
effettua tramite il noto algoritmo di Dijkstra.
Lo spanning tree ad esempio del nodo D risulterà come nella figura seguente:

Ecco la relativa tabella di instradamento.
Questo algoritmo è capace di gestire reti di grandi dimensioni grazie alla sua rapida convergenza ed il suo comportamento è prevedibile, poiché ogni nodo ha in memoria la mappa intera della rete. Difficilmente si generano loop e, comunque, risulta facile identificarli ed eliminarli.
Algoritmi di tipo link state packet sono utilizzati nello stadard IS-IS e nel protocollo OSPF (adottato in alcune reti TCP/IP).

La figura precedente mostra una rete ripartita in tre aree.
Supponiamo di dover instradare il messaggio dal nodo G al nodo A.
In una prima fase si invia il messaggio ad F. F deve instradare il messaggio
all'area 1 ed ha due possibilità: il cammino diretto con costo 3 o
quello indiretto con costo 4 (tramite l'area 2). Sceglie ovviamente il
cammino diretto e passa il messaggio ad E, che lo passa a D, che lo passa a
B che lo recapita ad A, nodo destinatario.
Si noti che l'instradamento ottenuto è ottimale, ma non ottimo:
infatti il suo costo è pari a 16 mentre se si fosse passati da C
sarebbe stato pari a 10.
Questo è uno degli svantaggi del routing gerarchico in quanto,
non avendo una visione globale della rete, si compiono tante scelte ottime
di per se, ma che considerate nell'insieme possono non rappresentare l'ottimo
globale.