[Reti] Routing dei pacchetti parte 2

ForkliftTruck Loaded Icon

[Reti] Routing dei pacchetti parte 2

0

Nell’ articolo precedente, abbiamo visto come i AS (Autonomous system) sanno come inoltrare i pacchetti lungo il percorso ottimo verso qualsiasi destinazione interna al gruppo e come ogni AS utilizza un proprio Algoritmi di routing interno (inter-AS).

Vediamo un’altro algoritmo inter-AS chiamato OSPF e basato su LS:

Open Shortest Path First

Il prefisso “Open” stà ad indicare che le specifiche di questo protocollo sono libere e quindi apertamente consultabili (tipo Open Source o Open Hardware).

OSPF è un protocollo a stato del collegamento: utilizza il flooding di informazioni  di stato del collegamento e l’ algoritmo di Dijkstra per la determinazione del percorso a costo minimo.

Il flooding si verifica ogni volta che c’è un cambiamento nello stato di un collegmaento: il router invia informazioni di instradamento a tutti gli altri router e periodicamente (ogni 30 minuti) viene inviato messaggio OSPF a tutto il AS.

I messaggi OPSF viaggiano in un datagramma IP usando 89 nel campo IP protocol come numero di protocollo.

Rispetto al RIP, OPSF offre:

  • Multipath: Percorsi diversi, destinazione e costi uguali: OSPF permette di usarli senza doverne sceglierne uno come avviene con RIP.
  • Supporto delle gerarchie di instradamento: Permette di strutturare i AS in modo gerarchico
  • Costo: Si possono aggiungere altre metriche di costo per collegamento (tipo hop e Capacità del collegamento).

Per creare gli alberi a costo minimo, OPSF ha bisogno di floddare l’intero AS: se questo è grande, può creare grossi volumi di traffico!

Per rimediare a questo inconveniente l’ AS viene suddiviso in aree dove ogni area è un piccolo dominio indipendente per il flooding degli LSP.

Ogni router però, ha bisogno di conoscere anche lo stato dei collegamenti delle altre aree: la backbone area ha il compito di collegare le varie aree.

In pratica quindi, un router interno in un area 1 deve conoscere solo lo stato dei collegamenti dei router nell’ area 1. Se vuole comunicare con un router in un’area 2, invierà il datagramma al router di confine che a sua volta lo passerà al giusto router della dorsale che lo invierà al router di confine dell’ area 2.

Il router interno deve conoscere solo lo stato dei collegamenti della sua area, Il router di confine deve conoscere lo stato dei collegamenti dell’aree a cui appartiene e i router della dorsale devono conoscere tutta la topologia della rete (anche se la sommarizzano).

Border Gateway Protocol

Fin’ora abbiamo detto che i protocolli di routing devono essere comuni a tutti i router all’ interno della stessa AS. Ma come fà un router a sapere la posizione di un router all’ esterno della sua AS?

RIP e OSPF vengono utilizzati come protocolli di routing all’ interno dello stesso sistema autonomo. Per determinare percorsi che interessano più sistemi autonomi si utilizza il BGP: Border Gateway Protocol (di proprietà della CISCO).

BGB è un protocollo che sfrutta il Path Vector (DC con percorsi) e che mette a disposizione di ogni AS un modo per:

  • Ottenere informazioni sulla raggiungibilità delle sottoreti da parte di AS confinanti,
  • Propagare le informazioni di raggiungibilità ai router interni di una AS,
  • Determinare percorsi “buoni” verso le sottoreti sulla base delle informazioni di raggiungibilità e delle politiche dell’ AS.

In BGP le destinazioni rappresentano solo sottoreti o collezioni di sottoreti tramite CIDR e non host.

Come fanno i router all’interno di un AS a inoltrare un pacchetto verso un’altro AS? E come fanno i router della dorsale a conoscere la direzione verso la quale inoltrare i pacchetti e quindi qual’è l’ AS di destinazione?

Il BGP è diviso fra interno (iBGP) e esterno (eBGP). Il protocollo interno, serve per il routing all’ interno dell’ AS mentre quello esterno serve ai router di confine per sapere le destinazioni raggiungibili inviando i pacchetti agli altri router di confine a cui sono collegati.

eBGP

Due router di confine, che si trovano quindi in due AS diversi e che li collegano fra di loro, creano una connessione TCP (come tutti i messaggi scambiati da BGP) e si scambiano messaggi dove annunciano le rotte raggiungibili se il pacchetto verrà inviato a loro. C’è un problema però: il router di confine di B dice ad A gli host raggiungibili attraverso di lui.

Tramite il routing interno, B conosce gli host raggiungibili nella sua AS. Ma, di fatto, come diavolo fà B a sapere le altre AS che sono collegate a lui? Ovviamente non può! Questo perchè tali informazioni non viaggiano sui protocollo di routing interni che non se ne preoccupano, ma sono comunuque informazioni che devono essere a disposizione di tutti (anche dei router non di confine – sennò neanche loro sanno in che direzione inoltrare un pacchetto diretto ad un’altro AS).

Ed è questo il motivo per cui eBGP non ci basta: avremo bisogno di iBGP.

iBGP

iBGP come eBGP, avviene creando una connessione (logica) basata su TCP  fra tutti i router verso tutti gli altri router della AS. In questo modo, cominciano tutti a scambiarsi messaggi su come raggiungere gli AS esterni: il processo continua finchè non ci sono più aggiornamenti.

I dati raccolti poi, vengono aggiunte alle tabelle di routing intra-dominio generate da RIP o OSPF.

Quando un router annuncia un percorso ad un’altro router, aggiunge anche una serie di attributi BGP. I più importanti comunque sono:

  • AS-PATH: elenca i AS attraverso i quali è passato l’annuncio del prefisso. Ogni AS non stub ha un ID univoco che permette di evitare loop.
  • NEXT-HOP: indirizzo IP dell’ interfaccia (un router ha un ip per interfaccia) su cui viene inviato il prefisso.

Ricevuto un messaggio BGP, il router applica le proprie politiche di importazione per decidere se accettare o meno tale rotta. Ad esempio, un ‘azienda potrebbe volere che i suoi pacchetti non viaggino nei router di un’altra azienda concorrente (che potrebbe filitrarli e leggerli) e quindi non salvarsi la rotta passante per tale AS.

Per scegliere quale rotta seguire, visto che ce ne potrebbe essere più di una, il router applica delle regole di eliminazione:

Alla rotta assegna un valore di preferenza locale. Si selezionano le rotte con questo valore più alto.

  1. Ce n’è più di una? Si seleziona la rotta con AS-PATH più breve.
  2. Ce n’è più di una? Si seleziona la rotta con NEXT-HOP più vicino.
  3. Ce n’è più di una? Il router si basa sugli identificatori BGP.

I possibili messaggi BGP che vengono scambiati sono:

  • Open: apre la conenssione TCP e autentica il mittente.
  • UPDATE: annuncia il nuovo percorso.
  • KEEPALIVE: manitene attiva la connessione se non ci sono UPDATE.
  • NOTIFICATION: riporta gli errori del precedente messaggio ed è anche utilizzato per chiudere la connessione.

IGMP

Finora abbiamo visto il routing unicast: il prefisso uni indica che il pacchetto è diretto verso una destinazione. Ma in verità, un host potrebbe voler inviare un pacchetto verso un gruppo di destinazione (es: per inviare aggiornamenti, per trasmettere audio/video ecc): in quel caso, ha bisogno di effettuare routing multicasting: il prefisso indica l’invio di un pacchetto uno-a-molti.

Un’altro tipo di invio, l’ultimo che rimane in verità, sono i messaggi broadcast: questi vengono inviati uno-a-tutti ovvero da un mittente a tutti gli host di una rete. In genere questo tipo di pacchetto viene utilizzato nelle LAN.

Il fatto che un host appartiene ad un gruppo, non ha nulla a che vedere col prefisso associato alla rete, infatti un host che appartiene ad un gruppo avrà un indirizzo multicast separato e aggiuntivo rispetto al primario.

Un router ha bisogno di aiuto per capire quali gruppi sono presenti in ciascuna delle sue interfaccie: quello che farà poi, è propagare l’informazione agli altri router.

Per risolvere quindi il problema uno-a-molti, ci viene in soccorso IGMP: Internet Group Message Procotol.

Un protocollo che lavora tra host e router a cui è direttamente connesso ed è un mezzo con cui un host comunica ad un router la sua appartenenza ad un gruppo multicast.

I messaggi IGMP viaggiano su pacchetti IP con ip protocol impostato a 2 e ttl impostato a 1 e possono essere:

  • Membership query: Inviato da router ad host, chiede agli host connessi a tutte le sue interfaccie se hanno aderito o meno ad un determinato gruppo.
  • Membership report: Da host a router, informa il router di un’adesione anche non in seguito ad una Membership query.
  • Leave group: Da host a router quando l’host lascia un gruppo.

Come un vero club in dove bisogna pagare l’abbonamento, i router hanno un timer entro il quale gli host devono avvisarlo della loro presenza tramite un Membership report.

Adesso però viene da chiedersi: come fanno i pacchetti ad arrivare a destinazione? Ovvero, come creiamo l’albero di instradamento?

  • Albero condiviso dal gruppo: se A vuole inviare pacchetti a B e C, invia un singolo pacchetto in modo unicast al router che si trova al centro fra A, B e C: questo poi lo invierà in multicast ai giusti riceventi. In questo caso c’è un solo albero condiviso da tutto il gruppo.
  • Albero basato sull’ origine: Viene creato un albero per ogni host, verso tutti gli altri host. Viene generato tramite un algoritmo che si basa sul percorso inverso con pruning (potatura).

Anche quì, abbiamo poi i protocolli per il multicast intra-dominio:

  • DVMPR: distance-vector multicast routing protocol
  • MOSPF: multicast open shortest path first
  • PIM: Protocol Indipentend Multicast

ed interdominio:

  • MBGP: Multicast Border gateway protocol.

IPv6

La versione 6 di ip è nata per aumentare lo spazio di indirizzi rispetto a IPv4. Con la versione 6, sono stati rivisti i protocolli ausiliari (ICMPv6) e ridisegnati gli headers di IP.

Adesso gli indirizzi sono lunghi 128 bit e IP è stato reso più efficiente (non c’è la frammentazione nei nodi intermedi e sono state aggiunte etichette di flusso per audio/video), estendibile e sicuro.

Purtroppo l’adozione è lenta in quanto sono nate alternative immediate per tamponare la richiesta di indirizzi IP:

  • Indirizzamento senza classi
  • DHCP
  • NAT

Probabilmente si migrerà verso il 2020 (non è facile dire con precisione purtroppo) e per far coesistere IPv4 e IPv6 ci sono tre alternative:

Dual Stack:

Questo è pensato per quando la transizione verso IPv6 sarà quasi completata: durante la transiszione tutti gli host devono avere una doppia pila di protocolli per la comunicazione di rete. Se l’indirizzo è IPv4, si comunicherà con IPv4 altrimenti si userà il v6.

Tunneling:

Se due host vogliono comunicare utilizzando IPv6 ma i pacchetti devono viaggiare in un tratto che supporta solo IPv4, il datagramma IPv6 viene incapsulato nel payload di IPv4 e si inseriscono come gli estremi di IP sorgente e destinazione gli estremi del tunnel.

Traduzione dell’ intestazione:

Quando un mittente invia pacchetti IPv6 ad un host che supporta solo IPv4.Il datagramma viene tradotto prima che arrivi a destinazione da IPv6 a IPv4.

About the Author

Federico Ponzi

Studente, Webmaster ed appassionato di tutto ciò che è informatico con una spruzzata di scienza.

View all posts by Federico Ponzi

Leave a Reply