Nel nostro studio sugli algoritmi di instradamento abbiamo considerato la rete come semplice interconnessione di router. Ciascun router non era diverso dagli altri, nel senso che tutti eseguivano lo stesso algoritmo di instradamento. Nella pratica questo modello risulta semplicistico, almeno per due motivi:
OSPF e il suo stretto parente, IS-IS, sono generalmente impiegati negli ISP di livello superiore. Il termine open indica che le specifiche del protocollo sono pubbliche.
OSPF è un protocollo LS che utilizza il flooding (inondazione) di informazioni riguardo lo stato dei collegamenti e l'algoritmo di Dijkstra per la determinazione del percorso a costo minimo. In OSPF, un router costruisce un grafo dell'intero sistema autonomo e manda in esecuzione (locale) l'algoritmo di Dijkstra per determinare un albero dei percorsi minimi verso tutte le sotto-reti (albero in cui il router stesso rappresenta il nodo radice). I costi dei collegamenti vengono fissati dall'amministratore di rete. L'amministratore di rete può scegliere di impostare i costi di tutti i collegamenti a 1 (ottenendo di conseguenza l'instradamento con il minimo numero di hop), oppure in modo inversamente proporzionale alla capacità del collegamento (al fine di scoraggiare l'uso di collegamenti con poca banda). OSPF non impone una politica sulla scelta dei pesi dei collegamenti (lavoro che compete all'amministratore di rete), ma fornisce invece i meccanismi per determinare l'instradamento con percorso a costo minimo per un dato insieme di pesi dei collegamenti. In OSPF, ogni qualvolta che si verifica un cambiamento nello stato di un collegamento (variazione di costo, o cambiamento di disponibilità), il router manda informazioni di instradamento via broadcast a tutti gli altri ruoter nel sistema autonomo. Inoltre, invia periodicamente lo stato dei collegamenti (almeno, ogni 30 minuti), anche se questo non è cambiato. Gli annunci OSPF sono contenuti in messaggi OSPF che vengono trasportati direttamente da IP come un protocollo di livello superiore con identificativo 89.
OSPF deve implementare il trasferimento affidabile dei messaggi e il broadcast dello stato dei collegamenti. Inoltre, controlla che i collegamenti siano operativi (tramite messaggio HELLO inviato a un vicino connesso) e consente ai router OSPF di accedere ai database sullo stato dei collegamenti della rete, contenuti nei router confinanti.
Tra i vantaggi ricordiamo:
Come si vede nella figura sopra, il sistema autonomo è organizzato in modo gerarchico. In questo caso abbiamo 3 aree. La dorsale (backbone) è l'area che consente la comunicazione fra tutte le aree del sistema autonomo. I router delle aree (1, 2 e 3) collegate con la backbone, sono i router di confine dell'area (area border router), mentre quelli all'interno dell'area sono detti router interni. Nella dorsale vi è poi un router connesso con l'esterno che è detto router di confine.
OSPF è un protocollo abbastanza complesso e noi lo abbiamo trattato solo in modo schematico.
Abbiamo appena appreso come gli ISP usino OSPF per determinare percorsi ottimali per le coppie sorgente destinazione all'interno dello stesso sistema autonomo. Ma come vengono determinati i percorsi ottimali tra sorgente e destinazione tra sistemi autonomi. La risposta è BGP (border gateway protocol).
In BGP, i pacchetti non vengono instradati verso uno specifico indirizzo, ma hanno come destinazione delle intere sotto-reti del tipo: 138.16.68/22 che include 1024 indirizzi IP per esempio.
La destinazione dei pacchetti in BGP sono prefissi CIDR che rappresentano una sotto-rete o una collezione di sotto-reti.
BGP mette a disposizione di ciascun router un modo per:
In questa figura abbiamo tre sistemi autonomi: AS1, AS2, e AS3.
AS3 ha una sotto-rete con prefisso x.
Ogni router in un AS funge sia da router gateway (router di bordo connesso ad altri AS) o come router interno. Prendendo in esempio AS1: 1a, 1b e 1c sono router interni, mentre 1c è di bordo (gateway).
Coppie di router interni si scambiano informazioni su connessioni TCP semi-permanenti usando la porta 179. Di seguito sono mostrate tale connessioni:
vi sono sessioni BGP esterne (eBGP) e sessioni BGP interne (iBGP).
Esaminiamo ora come BGP distribuirebbe le informazioni di raggiungibilità del prefisso x ad AS1 e AS2. Il router gateway 3a invia un messaggio eBGP "AS3 x" al router gateway 2c che a sua volta lo invia in una sessione iBGP a tutti i router AS2 compreso il gateway 2a. Quest'ultimo quindi invia un messaggio eBGP "AS2 AS3 x" al router gateway 1c, che infine usa iBGP per inviare il messaggio "AS2 AS3 x" a tutti i router di AS1. Completato tale processo tutti i router dei sistemi autonomi sono a conoscenza di x e del percorso per raggiungerlo.
Ovviamente in una rete reale esistono più percorsi da un router a una destinazione che attraversano AS diversi.
Prima di parlare di come fa un router a scegliere il percorso migliore tra i diversi percorsi che riceve attraverso annunci di raggiungibilità, facciamo una panoramica sulla terminologia BGP.
Quando un router annuncia un prefisso per una sessione BGP, include anche un certo numero di attributi BGP. In gergo, un prefisso assieme ai suoi attributi è detto rotta (route). Due dei più importanti attributi sono AS-PATH e NEXT-HOP.
AS-PATH elenca i sistemi autonomi attraverso i quali è passato l'annuncio del prefisso. Quando un prefisso attraversa un sistema autonomo, questi aggiunge il proprio ASN all'attributo AS-PATH.
Per esempio considerando la figura precedente ci sono due rotte da AS1 a x, una passa per il sistema autonomo AS2 e l'altra è direttamente collegata ad AS3.
Il primo ha AS-PATH "AS2 AS3", mentre il secondo ha l'AS-PATH "AS3".
I router usano tale attributo per rilevare ed evitare annunci reiterati, nello specifico se un router vede che il proprio AS è presente nella lista dei percorsi rifiuta l'annuncio.
L'attributo NEXT-HOP ha un ruolo sottile, ma importante.
In NEXT-HOP è riportato l'indirizzo IP dell'interfaccia del router che inizia l'AS-PATH.
Se l'AS-PATH è "AS2 AS3", NEXT-HOP è l'indirizzo IP dell'interfaccia alla sinistra di 2a (nella figura).
Mentre se l'AS-PATH è "AS3", NEXT-HOP è l'IP dell'interfaccia alla sinistra di 3d.
Quindi ogni router di AS1 conosce ora due rotte per il prefisso x:
Siamo ora pronti per discutere di algoritmi di routing BGP in modo preciso.
Inizieremo con uno dei più semplici: hot potato routing.
In un instradamento di questo tipo, il percorso scelto (tra tutti i percorsi possibili) è quello con il minor costo per il router NEXT-HOP che lo inizia. Ovvero il percorso minore verso il router direttamente collegato con l'interfaccia NEXT-HOP.
In questo esempio il router 1b consulterà le sue informazioni di routing intra-AS per trovare il percorso intra-AS a costo minimo verso il router NEXT-HOP 2a e il percorso a costo minimo verso il NEXT-HOP 3d.
Per esempio supponiamo che il costo sia definito come il numero di collegamenti attraversati;
dal router 1b al router 2a il costo è 2,
mentre dal router 1b al router 3d il costo è 3.
Verrebbe, in questo caso, scelto il primo percorso.
Il router 1b consulterebbe la sua tabella di inoltro (configurata dal suo algoritmo intra-AS) per trovare l'interfaccia
Quindi aggiunge
Questa riga verrà utilizzata per instradare il traffico destinato al router 2a attraverso l'interfaccia
Il procedimento è riassunto nella figura sopra.
Per aggiungere un prefisso al di fuori di un AS nella tabella di inoltro di un router, utilizzando instradamento a hot potato vengono utilizzati sia protocollo intra-AS (per esempio OSPF) che inter-AS (BGP).
L'idea alla base è che un router direzioni il prima possibile un pacchetto al di fuori dell'AS (col minor costo possibile), senza preoccuparsi dei costi che dovranno essere affrontati dal pacchetto successivamente.
Si noti che due ruoter nello stesso AS potrebbero selezionare percorsi diversi per lo stesso prefisso di destinazione. Per esempio 1d li invierebbe direttamente attraverso AS3 rispetto a 1b che usa 2a.
BGP utilizza un algoritmo più complesso di quello appena descritto. Per la selezione vengono considerate l'insieme delle rotte apprese e accettate dal router. Se ne esistono due o più, vengono applicate alcune regole di filtraggio:
Nel caso precedente (hot potato) da 1b veniva scelto come NEXT-HOP 2a, in questo caso invece verrebbe scartato 2a a favore di 3b, il motivo è che l'AS-PATH è più breve.
Il protocollo BGP, oltre a esse il protocollo inter-AS di internet, viene spesso usato per implementare il servizio IP anycast che è comunemente utilizzato in DNS. Per capire l'utilità di anycast si consideri che in molte applicazioni si è interessati a:
Consideriamo un caso concreto di come una CDN possa utilizzare l'anycast IP.
Consideriamo la figura sopra.
Durante la configurazione dell'anycast IP, la CDN assegna lo stesso IP a ognuno dei suoi server e utilizza BGP per annunciare tale indirizzo IP da ognuno dei suoi server.
Quando un router BGP riceve l'annuncio di più percorsi da questo IP, lo tratta come se fossero forniti diversi percorsi verso la stessa area fisica, anche se nella realtà sono percorsi diversi verso luoghi diversi. Ogni router, quando configura la sua tabella di inoltro, utilizza localmente l'algoritmo di selezione dei cammini BGP per scegliere il percorso migliore (per esempio il più vicino in base al conteggio degli hop AS) per quell'IP.
Per esempio, se un cammino BGP, corrispondente a un luogo, è solo un hop AS lontano dal router, e tutti gli altri percorsi BGP corrispondenti ad altri luoghi sono distanti più di un hop AS, il router BGP sceglierebbe di inviare i pacchetti al luogo distante un solo hop AS.
Dopo la fase iniziale di annuncio degli indirizzi BGP, la CDN può dedicarsi alla distribuzione dei contenuti.
Quando un client richiede un video alla CDN, la CDN gli fornisce (indipendentemente dal luogo in cui si trovi effettivamente il client) l'indirizzo IP usato da tutte le CDN. Quando il client inoltra la richiesta a tale IP, i router Internet inoltrano il pacchetto richiesto al server più vicino come definito da BGP.
Tale esempio illustra come le CDN potrebbero usare anycast IP, di fatto, le CDN non lo utilizzano perché cambiamenti nell'instradamento BGP potrebbero portare ad avere sulla stessa connessione TCP pacchetti differenti che arrivano a differenti istanze del server web.
Supponiamo che una CDN che utilizza l'anycast IP per distribuire contenuti a livello globale. La CDN ha server distribuiti in diverse posizioni geografiche ed è configurata in modo che lo stesso indirizzo IP anycast sia assegnato a ciascuna di queste posizioni.
Consideriamo la seguente situazione: un utente sta cercando di accedere a un sito web ospitato sulla CDN. Questo utente si trova negli Stati Uniti e sta inviando richieste HTTP a un indirizzo IP anycast della CDN.
Inizialmente, il traffico dell'utente è instradato verso un server CDN negli Stati Uniti, poiché è il più vicino.
Nel frattempo, ci sono cambiamenti nell'instradamento BGP a livello globale, che potrebbero essere causati da varie ragioni, come la manutenzione di una rete o un evento di congestione.
A causa di questi cambiamenti, la rotta BGP verso il server CDN negli Stati Uniti subisce una modifica. Invece di essere instradato verso il server negli Stati Uniti, il traffico dell'utente viene ora instradato verso un server CDN in Europa.
Il problema è che la connessione TCP dell'utente è ancora aperta, e le richieste successive dell'utente vengono ora inviate al server CDN in Europa invece del server negli Stati Uniti.
Questo cambio improvviso potrebbe portare a problemi di coerenza e prestazioni. Ad esempio, il server CDN in Europa potrebbe non avere le stesse informazioni di cache del server negli Stati Uniti, il che potrebbe influire sulla velocità di risposta e sulla coerenza dei dati.
Tuttavia anycast IP è ampiamente usato dai DNS per redirigere la richiesta al server root DNS più vicino.
Quando un router sceglie una rotta, le politiche di instradamento dell'AS possono intervenire facendo saltare qualsiasi altra considerazione riguardante per esempio la brevità del percorso.
Si osservi la seguente figura che illustra dei sistema autonomi:
W, X, Y sono reti stub, ovvero reti che hanno una sola via di uscita, come una rete domestica (esempio molto comune).
A, B, C sono reti di provider di dorsale.
Ipotizziamo che A, B, C siano provider l'uno dell'altro. Tutto il traffico che entra in una rete di accesso di un ISP è destinato a tale rete e tutto il traffico che esce da tale rete è originato in essa.
Esempio: tutto il traffico che entra va da A verso W è destinato a W, mentre tutto il traffico che esce da W ha origine solo in W.
X è è un ISP di accesso multihomed, dato che è connessa a due provider (B, C).
Come W e Y anche X deve essere sorgente o destinazione di tutto il traffico in uscita o in ingresso in attraverso X. Ma come viene implementato è imposto tale comportamento? Come si impedirà a X di smaltire traffico tra B e C? Una risposta risiede nel controllo degli annunci delle rotte BGP.
In particolare, X opererà come rete stub se annuncia ai suoi vicini B e C di non avere percorsi verso altre destinazione se non sé stessa. Anche se X fosse a conoscenza di un percorso XCY, non lo annuncerà a B. In questo modo, B, non inoltrerà mai traffico destinato a Y (né a C) attraverso X.
Consideriamo ora la rete di un provider, per esempio B e supponiamo che questo abbia appreso (da A) che A presenta un percorso AW verso W. Allora B può installare il percorso BAW nella sua struttura dati per l'instradamento. Chiaramente B vuole annunciare il percorso BAW anche al suo cliente X, per permettergli di raggiungere W tramite B.
Ma dovrebbe annunciarlo anche a C? In questo modo C potrebbe instradare anche attraverso B verso W con il percorso CBAW.
B, di suo, potrebbe pensare, giustamente, di non dover prendersi carico di tutto il peso (e costo) del traffico in transito tra A e C e che dovrebbe essere compito di A e C assicurarsi che C possa instradare da e verso i clienti di A tramite una connessione diretta tra A e C. Attualmente non esistono standard ufficiali per gestire l'instradamento reciproco degli ISP di dorsale. Una regola pratica seguita dagli ISP commerciali è quella per cui tutto il traffico che fluisce attraverso la rete di dorsale di un ISP deve avere origine e/o destinazione in una sua rete cliente. Accordi individuali di peering (e confidenziali) vengono negoziati tra coppie di ISP.