# Tabella di routing

Una tabella di routing (in italiano tabella di instradamento), chiamata anche routing information base (RIB), in informatica, è una tabella di dati, memorizzata in un router o in un host, che elenca le rotte di destinazione di una data rete e in molti casi la metrica (distanza migliore) di ciascuna rotta presente (a scopo informativo). La tabella contiene informazioni sulla topologia della rete immediatamente circostante.
La costruzione della tabella di routing è un compito affidato alle sorgenti di informazioni di routing, come ad esempio i protocolli di routing, il singolo router che è a conoscenza degli indirizzi IP assegnati alle proprie interfacce (le c.d rotte direttamente connesse), o l'essere umano che, conoscendo le rotte verso destinazioni specifiche, le inserisce manualmente nella configurazione del router (in questo caso prendono il nome di rotte statiche).

## Descrizione

Una tabella di routing funziona in maniera simile al servizio postale. Ogni volta che un nodo di una rete deve inviare pacchetti di dati ad un altro nodo, deve prima conoscere dove inviarli. Se il nodo di invio non è connesso direttamente al nodo di destinazione, deve inviare i pacchetti per mezzo di altri nodi che si trovano attraverso il nodo di destinazione finale. Ogni nodo intermedio ha quindi bisogno di tenere traccia delle rotte per poter decidere in quale direzione instradare i pacchetti, e a tale scopo utilizza una tabella di routing. Una tabella di routing è un database che tiene traccia dei percorsi, come una carta geografica.
La tabella di routing è una struttura dati memorizzata nella RAM, che viene utilizzata per memorizzare informazioni sulle rotte relative alle reti direttamente connesse e alle reti remote. Essa contiene le associazioni tra l'indirizzo IP che identifica un'intera rete e il next-hop. Queste associazioni dicono ad un router che una particolare destinazione può essere raggiunta in modo ottimale trasmettendo i pacchetti a un router specifico che rappresenta la tappa successiva (appunto next-hop) sulla strada verso la destinazione finale.
Con il routing hop-by-hop, caratteristica fondamentale di IP Internetwork Layer, una tabella di routing elenca, per ciascuna delle destinazioni raggiungibili, l'indirizzo del dispositivo successivo lungo il percorso verso tale destinazione. Supponendo che le tabelle di routing siano coerenti, la semplice routine di inoltro dei pacchetti attraverso il successivo indirizzo di destinazione è sufficiente a raggiungere qualsiasi punto di una rete.
Una rete connessa direttamente è una rete che è collegata direttamente ad una delle interfacce del router. Quando vengono assegnati un indirizzo di rete e una lunghezza di prefisso (subnet mask) a un'interfaccia di un router, l'interfaccia stessa diventa un host collegato su quella rete. L'indirizzo di rete dell'interfaccia (assieme al nome e al numero della stessa) viene inserito nella tabella di routing come una rete connessa direttamente.
Una rete remota è una rete che non è collegata direttamente al router e pertanto, può essere raggiunta solamente inviando il pacchetto a un altro router. Le voci della tabella di routing relative alle reti remote possono essere aggiunte da un protocollo di routing dinamico o configurando rotte statiche. I percorsi dinamici sono le rotte per reti remote apprese automaticamente dal router, utilizzando un protocollo di routing dinamico. Le rotte statiche sono le rotte configurate manualmente da un amministratore di rete.
Le tabelle di routing sono inoltre un aspetto chiave per determinate operazioni di sicurezza, come ad esempio uRPF (unicast reverse path forwarding). In questa tecnica, che ha diverse varianti, il router guarda, nella tabella di routing, l'indirizzo di origine del pacchetto. Se non esiste nessun percorso all'indietro verso l'indirizzo sorgente, il pacchetto si presume essere malformato o proveniente da un attacco denial of service rete e viene scartato.

## Difficoltà

La necessità di memorizzare un gran numero di rotte in uno spazio di archiviazione limitato rappresenta una sfida importante nella costruzione della tabella di routing. Per quanto riguarda gli indirizzi IPv4, la tecnologia di suddivisione attualmente dominante è un metodo chiamato CIDR (Classless Inter-Domain Routing). Per risparmiare spazio nella tabella di routing e velocizzare i lookup, i protocolli di routing possono aggregare simbolicamente le reti per le quali non esiste ambiguità di destinazione in una supernetwork, (chiamata talvolta rotta aggregata, o summary) e inserire quella nella tabella di routing al posto delle numerose rotte individuali che essa rappresenta.

## Contenuti

La tabella di routing è costituito da almeno due campi di informazione:
* l'ID di rete: cioè la sotto-rete di destinazione
* salto successivo: Il salto successivo o gateway, è l'indirizzo della stazione successiva in cui il pacchetto deve essere inviato sulla strada verso la sua destinazione finale.
In base alle applicazioni e all'implementazione, potrebbe anche contenere valori aggiuntivi che aumentano il livello di precisione nella selezione del percorso
* informazioni sullo stato della rotta: Per esempio, il flag U indica che una rotta IP è operativa
* costo/metrica: il costo del percorso attraverso cui il pacchetto deve essere inviato (le metriche possono essere basate su informazioni quali la larghezza di banda, numero di hop, costo del percorso, il ritardo, carico, Maximum Transmission Unit, affidabilità e costi di comunicazione)
* criteri di filtraggio: alcune tabelle di routing mostrano se ad una rotta è associata una access control list
* interfaccia: il nome dell'interfaccia associata alle rotte direttamente connesse, che varia a seconda del produttore
Nella tabella seguente è riportato l'esempio di come potrebbe essere la tabella di routing di un router domestico basato su Linux. Dove è presente un asterisco significa che quella rotta è direttamente connessa
| Destination | Gateway | Genmask | Flags | Metric | Ref | Interface |
| 0.0.0.0 | 151.7.207.8 | 0.0.0.0 | UG | 0 | 0 | pppoe-wan |
| 10.10.10.0 | * | 255.255.255.252 | U | 0 | 0 | iptvptm0 |
| 151.7.207.8 | * | 255.255.255.255 | UH | 0 | 0 | pppoe-wan |
| 192.168.0.0 | * | 255.255.255.0 | U | 0 | 0 | br-lan |
| 192.168.168.0 | * | 255.255.255.255 | U | 0 | 0 | wl0_1 |
| 192.168.168.128 | * | 255.255.255.255 | U | 0 | 0 | wl1_1 |
Le colonne Destination e Genmask (subnet mask) costituiscono l'indirizzo IP identificativo della rete, di cui si è discusso prima. Per indicare la rete 192.168.0.0 con una subnet mask 255.255.255.0, è anche possibile scrivere 192.168.0.0/24
La colonna Gateway contiene l'indirizzo del next-hop, il gateway attraverso il quale la rete remota indicata (in questo caso 0.0.0.0, indirizzo che rappresenta tutte le reti) può essere raggiunta
La colonna Interface indica quale delle interfacce disponibili localmente è responsabile per raggiungere il gateway. In questo esempio, il gateway con indirizzo 151.7.207.8 può essere raggiunto attraverso l'interfaccia pppoe-wan (il modem VDSL integrato nel dispositivo da cui proviene la presente lista).
Di seguito invece viene proposto l'estratto delle prime 10 voci di una tabella di routing proveniente da un grande router a servizio di internet presso AT&T, che esegue il sistema operativo JunOS, con accesso pubblico per la consultazione con i seguenti comandi:
rviews@route-server.ip.att.net> show route forwarding-table
Routing table: default.inet
Internet:Enabled protocols: Bridging, :
| Destination | Type | RtRef | Next hop | Type | Index | NhRef | Netif |
| default | user | 19 | 0:0:5e:0:1:1 | ucst | 578 | 42 | em0.0 |
| default | perm | 0 | | rjct | 36 | 1 | |
| 0.0.0.0/32 | perm | 0 | | dscd | 34 | 116 | |
| 1.93.23.118/32 | user | 0 | | indr | 34 | 116 | |
| 12.0.0.0/8 | user | 0 | 0:0:5e:0:1:1 | indr ucst | 1048575 | 311 | em0.0 |
| 12.0.0.0/9 | user | 0 | 0:0:5e:0:1:1 | indr ucst | 578 | 42 | em0.0 |
| 12.0.1.0/24 | intf | 0 | | recv | 1048575 | 1 | em0.0 |
| 12.0.1.0/32 | dest | 0 | 12.0.1.0 | rslv | 565 | 1 | em0.0 |
| 12.0.1.1/32 | dest | 0 | 0:0:5e:0:1:1 | recv | 563 | 42 | em0.0 |
| 12.0.1.15/32 | dest | 0 | 0:0:5e:0:1:1 | ucst | 578 | 1 | em0.0 |
| La tabella prosegue con oltre 500 voci non mostrate qui ||||||||

### Tabelle di routing sui computer

Negli scenari di uso comune, pur non avendo attive funzionalità di routing attive di default, anche i sistemi operativi general purpose comunemente eseguiti dai personal computer possiedono una tabella di routing. Un esempio tratto da una distribuzione Linux in esecuzione su di un laptop collegato via Wi-Fi è riportato nella tabella sottostante.
| Destination | Gateway | Genmask | Flags | Metric | Ref | Iface |
| default | 192.168.0.1 | 0.0.0.0 | UG | 600 | 0 | wlp2s0 |
| link-local | 0.0.0.0 | 255.255.0.0 | U | 1000 | 0 | wlp2s0 |
| 192.168.0.0 | 0.0.0.0 | 255.255.255.0 | U | 600 | 0 | wlp2s0 |

## Tabella di forwarding

Le tabelle di routing in genere non sono utilizzate direttamente per l'inoltro dei pacchetti nelle architetture dei router moderni, tutt'al più sono utilizzate per costruire una più semplice tabella di forwarding. Questa tabella contiene solo le rotte che sono state scelte come preferite dagli algoritmi di routing. Si trova spesso in una forma compressa o precompilata che è ottimizzata per la memorizzazione e la ricerca rapida.
Questo tipo di architettura differenzia la funzione della tabella di routing, di competenza del control plane, dalla funzione della tabella di forwarding, appartenente al forwarding plane. Questa separazione dei due piani garantisce il forwarding con alte prestazioni e senza interruzioni.