Vai al contenuto
Reti di Telecomunicazione

Instradamento: Dijkstra, Bellman-Ford, OSPF e BGP

La rete come grafo pesato, algoritmo di Dijkstra con dimostrazione della correttezza, OSPF, equazione di Bellman-Ford e vettori di distanze, conteggio all'infinito, sistemi autonomi e BGP, RPKI.

Un router deve sapere, per ogni destinazione, a quale vicino passare un pacchetto. Le tabelle non le scrive nessuno a mano: le calcolano i router stessi, scambiandosi informazioni con i protocolli di instradamento. Dietro ci sono due algoritmi classici sui grafi. In questa lezione vediamo l’algoritmo di Dijkstra con la dimostrazione della sua correttezza, i protocolli a stato del collegamento come OSPF, l’algoritmo di Bellman-Ford e i protocolli a vettore di distanze con il problema del conteggio all’infinito, e il BGP, che tiene insieme le reti di Internet.

La rete come grafo

La rete si rappresenta come un grafo: i router sono i nodi, i collegamenti gli archi, ciascuno con un costo positivo scelto dall’amministratore (spesso inversamente proporzionale alla velocità del collegamento). Il cammino migliore tra due nodi è quello di costo totale minimo.

L’algoritmo di Dijkstra

Nei protocolli a stato del collegamento ogni router diffonde a tutti gli altri l’elenco dei propri vicini e dei costi. Alla fine ogni router conosce l’intero grafo e calcola da solo i cammini minimi verso tutte le destinazioni con l’algoritmo di Dijkstra (1959):

  1. il nodo sorgente ha distanza 0, tutti gli altri distanza infinita; nessun nodo è “definitivo”;
  2. si sceglie, tra i nodi non definitivi, quello con la distanza provvisoria minima, e lo si rende definitivo;
  3. per ogni suo vicino v si controlla se passare da lui accorcia la strada: se d(u) + c(u, v) \lt  d(v), si aggiorna d(v) e si ricorda che il predecessore di v è u;
  4. si torna al passo 2 finché tutti i nodi sono definitivi.
Grafo pesato con l'albero dei cammini minimi calcolato dal nodo A
I numeri nei cerchi bianchi sono i costi dei collegamenti, quelli rossi le distanze minime da A. I collegamenti verdi formano l’albero dei cammini minimi: per esempio C si raggiunge passando da B con costo 3, invece del collegamento diretto di costo 5.

Teorema. Se tutti i costi sono non negativi, quando un nodo viene reso definitivo la sua distanza provvisoria è la distanza minima dalla sorgente.

Dimostrazione. Per assurdo, sia u il primo nodo reso definitivo con una distanza d(u) maggiore della vera distanza minima \delta(u). Si consideri un cammino minimo dalla sorgente a u. Parte da un nodo definitivo (la sorgente) e arriva a u, non ancora definitivo: lungo il cammino c’è quindi un primo nodo non definitivo y, preceduto da un nodo definitivo x. Quando x è stato reso definitivo, la sua distanza era giusta (u è il primo errore), e il passo 3 ha posto d(y) \le \delta(x) + c(x, y) = \delta(y), cioè d(y) = \delta(y). Poiché i costi sono non negativi, \delta(y) \le \delta(u), essendo y su un cammino minimo verso u. Quindi d(y) = \delta(y) \le \delta(u) \lt  d(u): l’algoritmo avrebbe dovuto scegliere y prima di u, contro l’ipotesi. ∎

Con i costi negativi il ragionamento cade, ma nelle reti i costi sono sempre positivi. I predecessori formano l’albero dei cammini minimi: il router ne ricava, per ogni destinazione, il primo salto da usare. OSPF (Open Shortest Path First), il protocollo a stato del collegamento più diffuso dentro le reti aziendali e degli operatori, fa esattamente questo, e ricalcola l’albero in millisecondi quando un collegamento cambia stato.

Bellman-Ford e i vettori di distanze

L’alternativa non richiede di conoscere tutto il grafo. Ogni router x conosce solo i costi verso i vicini e i vettori di distanze che i vicini gli inviano periodicamente, e applica l’equazione di Bellman-Ford:

    \[ d_x(y) = \min_{v\ \text{vicino di}\ x}\big(c(x, v) + d_v(y)\big) \]

cioè: la mia distanza da y è la migliore tra “costo per arrivare al vicino più la distanza dichiarata dal vicino”. Ripetendo gli scambi, le stime convergono alle distanze vere. È il principio del RIP, uno dei protocolli più antichi, semplice ma lento.

Il conteggio all’infinito. Le cattive notizie viaggiano male. Si prendano tre router in fila, A, B e C, con costi 1. A dista 2 da C passando per B. Se il collegamento B-C si guasta, B cerca un’alternativa e trova che A dichiara distanza 2 da C: pensa allora di poter passare per A con costo 3, senza sapere che il cammino di A passa proprio per B. A riceve il nuovo vettore di B e porta la propria stima a 4, B a 5, e così via: le distanze crescono di uno a ogni scambio, mentre i pacchetti per C rimbalzano tra A e B. RIP limita il danno fissando l’infinito a 16 salti; tecniche come l’orizzonte diviso con avvelenamento (A dichiara a B distanza infinita verso le destinazioni che raggiunge tramite B) risolvono i casi semplici ma non tutti.

Il BGP e Internet

Internet è formata da circa 75 000 sistemi autonomi (AS): reti di operatori, università, aziende, ciascuna con una propria politica. Dentro un AS si usa OSPF o un protocollo simile; tra AS diversi si usa il BGP (Border Gateway Protocol). Il BGP è un protocollo a vettore di cammini: un annuncio non porta solo una distanza, ma l’elenco degli AS da attraversare per raggiungere un prefisso. Questo elimina gli anelli (un AS scarta gli annunci che contengono già sé stesso) e permette le politiche: un operatore può preferire un cammino più lungo ma più economico, o rifiutarsi di trasportare il traffico tra due concorrenti.

Il BGP si basa sulla fiducia negli annunci, e qui sta la sua debolezza: un AS che annuncia per errore o per malizia un prefisso non suo può attirare il traffico destinato a qualcun altro. Episodi del genere hanno reso irraggiungibili servizi globali per ore. La contromisura in corso di diffusione è l’RPKI, che firma crittograficamente quali AS sono autorizzati ad annunciare quali prefissi.

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
0
Would love your thoughts, please comment.x
()
x