17.2.3 Il routing

Il meccanismo che decide il tragitto dei pacchetti dall’interfaccia mittente a quella di destinazione è detto meccanismo di routing o più semplicemente routing.

L’IP utilizza un meccanismo di routing piuttosto semplice che riesce a trasferire gli IP datagram da un’interfaccia ad un’altra per passi successivi, detti hop (salti). La logica è la seguente: se il destinatario si trova sulla stessa rete (subnet) del mittente, l’IP datagram viene passato al livello sottostante (livello link), che si occuperà di effettuare l’inoltro sulla rete e l’interfaccia destinataria può così riceverlo. Nel caso in cui il destinatario non si trovi sulla stessa rete del mittente, l’IP datagram viene inviato ad un’altra macchina (router) (nell’IP datagram viene sostituito l’indirizzo IP di destinazione con quello del router, ma il MAC address rimane quello relativo all’interfaccia di destinazione reale), sulla quale ricade l’onere di consegnare il messaggio ad un’altra interfaccia che può essere quella di destinazione od un altro router, e così via. Se i router sono ben programmati, l’IP datagram arriverà a destinazione.

Per ogni macchina è definita una tabella di instradamento o routing table, che contiene gli indirizzi IP delle macchine a cui inviare gli IP datagram la cui interfaccia di destinazione appartiene ad una subnet diversa da quella mittente. In tale tabella saranno presenti delle righe, dette route, che esprimono regole del tipo: se l’indirizzo IP di destinazione è XXX.XXX.XXX.XXX invia l’IP datagram a YYY.YYY.YYY.YYY.

Il meccanismo di routing applicato dall’IP osserva nell’ordine i seguenti passi

  1. Se nella routing table è presente una route con l’indirizzo IP completo dell’interfaccia di destinazione, segue la regola relativa.
  2. Se nella routing table è presente una route con l’indirizzo IP della rete (subnet) di cui fa parte l’indirizzo di destinazione, segue la regola relativa.
  3. Se nella routing table è presente una route con l’indirizzo IP del router di default (default route), segue la regola relativa.

Se nessuno dei passi descritti è andato a buon fine, l’interfaccia non è in grado di recapitare l’IP datagram.

[da completare ...]

La routing table di una macchina GNU/Linux viene gestita con il comando route (v. sez. 20.6). Un esempio di routing table è riportato di seguito.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
Si tratta di una macchina con una interfaccia di rete il cui indirizzo IP è 192.168.1.10 ed il cui router di default è 192.168.1.1. Brevemente, la colonna Destination contiene l’indirizzo IP di destinazione del pacchetto, la colonna Gateway contiene l’indirizzo IP del router (o gateway), la colonna Genmask contiene la subnet mask relativa all’indirizzo di destinazione e la colonna Iface indica l’interfaccia interessata dalla route (per ulteriori dettagli v. sez. 20.6).

Le tabelle di instradamento di un router possono essere molto più complesse di quelle di una macchina che non instrada pacchetti (non funge da router). Inoltre esiste la possibilità di aggiornare automaticamente la tabella tramite dei protocolli di routing dinamico (RIP, OSPF, BGP, ...). Le problematiche legate a questi protocolli esulano dagli scopi di questo testo.

Un router è una macchina sulla quale sono installate almeno due interfacce di rete e che effettua l’instradamento dei pacchetti, ovvero sulla macchina è attivata la caratteristica di IP forwarding, che viene impostata inserendo il valore ‘1’ nel file /proc/sys/net/ipv4/ip_forward. Questo può essere fatto con il comando

# echo 1 > /proc/sys/net/ipv4/ip_forward
[da completare ...]