Differences between revisions 3 and 4
Revision 3 as of 2015-12-27 15:52:33
Size: 8397
Editor: lukisi
Comment:
Revision 4 as of 2016-01-06 16:01:35
Size: 8421
Editor: lukisi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 4: Line 4:
Ogni nodo quando inizia la sua attività si sceglie un identificativo casuale in uno spazio sufficientemente grande per supporre che sia univoco a livello dei domini di collisione in cui partecipa con le sue interfacce di rete. Un intero di 32 bit è più che sufficiente. In ogni nodo, il demone ''ntkd'', quando inizia la sua attività, si sceglie un identificativo casuale in uno spazio sufficientemente grande per supporre che sia univoco a livello dei domini di collisione in cui partecipa con le sue interfacce di rete. Un intero di 32 bit è più che sufficiente.
Line 6: Line 6:
Può succedere che un nodo assuma diverse identità. Ad esempio il nodo 𝛽 che era nel g-nodo ''g'' e migra in ''h'' vuole mantenere una identità in ''g'' e costituirne una nuova in ''h''. Allora per la nuova identità, quella in ''h'', il nodo si sceglie un altro identificativo casuale. Inoltre il demone ''ntkd'', per ogni interfaccia di rete che gestisce nel nodo, attiva l'interfaccia di rete e si assegna un indirizzo [[http://en.wikipedia.org/wiki/Link-local_address|link-local]] in IPv4 scelto a caso. Questo indirizzo serve alle comunicazioni del demone ''ntkd'' coi nodi diretti vicini. E anche per individuare il nodo come gateway per una destinazione nelle tabelle di routing. L'associazione tra l'indirizzo MAC di una interfaccia di rete e il suo indirizzo IP link-local rimane la stessa per tutta la durata della vita del demone ''ntkd''.
Line 8: Line 8:
Poi il nodo attiva la sua interfaccia di rete e si assegna un indirizzo [[http://en.wikipedia.org/wiki/Link-local_address|link-local]] in IPv4 scelto a caso. Questo indirizzo serve alle comunicazioni del demone ''ntkd'' coi nodi diretti vicini. E anche per individuare il nodo come gateway per una destinazione nelle tabelle di routing. Può succedere che il demone ''ntkd'' in un nodo, per quanto riguarda in particolare le operazioni del modulo QSPN, assuma diverse identità. Ad esempio il nodo 𝛽 che era nel g-nodo ''g'' e migra in ''h'' vuole mantenere una posizione in ''g'' e prenderne una nuova in ''h''. In questo momento, il demone ''ntkd'' crea una sua nuova identità, per la quale si sceglie un altro identificativo casuale. Inoltre il demone ''ntkd'', sopra ogni interfaccia di rete che gestisce, realizza una nuova pseudo-interfaccia con un distinto indirizzo MAC e un distinto indirizzo IP link-local. Infine, per ogni arco che la precedente identità del demone aveva con un nodo diretto vicino, la nuova identità ne crea un duplicato.
Line 10: Line 10:
L'indirizzo link-local di un nodo resta sempre quello. Quando il nodo assume una ulteriore identità continua comunque a comunicare con il medesimo indirizzo link-local; infatti ogni messaggio (del demone ''ntkd'') ricevuto contiene comunque informazioni sufficienti a individuare l'identità del nodo che la deve processare e l'identità dell'altro nodo che l'ha inviato. Avviene inoltre, una sorta di scambio di attributi degli archi tra le due identità. In questo senso. La vecchia identità assume ora la gestione della posizione che il nodo 𝛽 mantiene in ''g''. La nuova identità assume la gestione della posizione nuova che il nodo 𝛽 prende in ''h''. Il controllo delle interfacce di rete che prima erano gestite dalla vecchia identità passa ora alla nuova identità. La vecchia identità gestisce ora le pseudo-interfacce create prima, le quali infatti sono temporanee.
Line 12: Line 12:
Dopo inizia la rilevazione di altri nodi nelle prossimità con cui formare un arco. Gli archi che erano gestiti dalla vecchia identità rimangono gestiti dalla vecchia identità. Non cambia il loro ''identificativo di arco'', che come sappiamo è un concetto interno al modulo QSPN e di cui il suo utilizzatore non si deve occupare. Per ognuno di questi archi, però, cambia l'interfaccia di rete su cui è appoggiato l'arco nel nodo 𝛽 e il relativo indirizzo IP link-local. Infatti ora la vecchia identità gestisce le pseudo-interfacce create prima, con i loro indirizzi IP link-local. Per quanto riguarda l'interfaccia di rete su cui è appoggiato l'arco nel vicino 𝛾 all'altro estremo, qualora a migrare è un intero g-nodo e il vicino 𝛾 ne fa parte, anch'essa diventa la nuova pseudo-interfaccia che anche il nodo 𝛾 ha creato, con il relativo indirizzo IP link-local. Altrimenti resta la stessa.
Line 14: Line 14:
Quando si forma un arco ognuno dei due nodi vertici lo rappresenta con una struttura dati che contiene:
 * Il nome dell'interfaccia di rete del proprio nodo su cui l'arco è costruito. Da qui, anche l'indirizzo MAC del proprio nodo.
 * L'indirizzo MAC dell'altro nodo.
 * L'identificativo del proprio nodo collegato all'arco. Questo serve perché un singolo nodo può avere diverse identità.
 * L'identificativo dell'altro nodo collegato all'arco.
 * L'indirizzo link-local dell'altro nodo.
 . L'indirizzo link-local del proprio nodo, ricordiamo, è fisso e vale per tutte le sue identità.
Gli archi duplicati, invece, mantengono le interfacce di rete su cui sono appoggiati da entrambi gli estremi e i relativi indirizzi IP link-local. Quando tali archi sono passati alla nuova identità del modulo QSPN, ricevono anche un nuovo ''identificativo di arco'' ciascuno.
Line 22: Line 16:
Queste caratteristiche permangono per l'arco anche se, ad esempio, il nodo all'uno o all'altro capo migrando cambiasse il suo indirizzo (i suoi identificativi ai vari livelli) nella rete.

Due nodi 𝛼 e 𝛽 vicini, i quali cioè hanno un arco che li collega, dialogando tra loro per mezzo di questo arco possono duplicarlo in una di queste forme:
 * Il nodo 𝛼 ha creato una sua nuova identità 𝛼~-,,1,,-~ che vuole collegare alla precedente identità di 𝛽.
 * Il nodo 𝛼 ha creato una sua nuova identità 𝛼~-,,1,,-~ e il nodo 𝛽 ha creato una sua nuova identità 𝛽~-,,1,,-~ e i due vogliono collegare queste due nuove identità.
=== Motivazioni della pseudo-interfaccia di rete ===
Line 30: Line 19:
Da questo si evince che non c'è alcuna necessità per il nodo 𝛼 (o 𝛽) di "duplicare" la propria interfaccia di rete per duplicare efficacemente un suo arco allo scopo di trasmettere su di esso comunicazioni al demone ''ntkd''. Invece, se si tratta di duplicare un arco allo scopo di riconoscere la provenienza di un generico pacchetto IP, le cose sono diverse. In conclusione, i messaggi che due nodi vicini si scambiano tra i moduli del demone ''ntkd'' possono raggiungere la corretta identità dei nodi senza bisogno di creare nuove pseudo-interfacce di rete.
Line 32: Line 21:
Sia un nodo 𝛽 che riceve un generico pacchetto IP (non prodotto dal demone ''ntkd'' ma da una qualunque applicazione) dal nodo 𝛼. Il nodo 𝛽 sa qual'è l'interfaccia di rete ''n'' su cui lo ha ricevuto; inoltre analizzando il frame Ethernet che incapsula il pacchetto IP individua l'indirizzo MAC ''m'' del diretto vicino che lo ha trasmesso. Tramite ''n'' e ''m'' si può risalire ad uno specifico arco gestito dal modulo Qspn soltanto se l'indirizzo MAC ''m'' esiste ed è unico tra gli archi gestiti dal modulo Qspn con l'interfaccia ''n''. Ma ci sono dei motivi per cui si rende necessario creare nuove pseudo-interfacce allo scopo di individuare la giusta identità del nodo alla quale è stato trasmesso un generico pacchetto IP da inoltrare. Si individuano questi motivi:
 * Corretto instradamento di pacchetti IP che hanno come destinazione un indirizzo ''interno'' ad un g-nodo.
 * Realizzazione di un circuito fisso tra due end-point, per lo sfruttamento dei percorsi disgiunti acquisiti.
Line 34: Line 25:
Quindi:
 * Se il nodo 𝛼 ha creato una sua nuova identità 𝛼~-,,1,,-~ che vuole collegare alla precedente identità di 𝛽: allora 𝛽 deve ricevere il pacchetto sulla sua interfaccia ''n'' e vedere in esso un indirizzo MAC ''m’'' distinto da ''m''. Quindi 𝛼 deve "duplicare" la propria interfaccia di rete.
 * Se il nodo 𝛼 ha creato una sua nuova identità 𝛼~-,,1,,-~ e il nodo 𝛽 ha creato una sua nuova identità 𝛽~-,,1,,-~ e i due vogliono collegare queste due nuove identità: allora 𝛽 deve ricevere il pacchetto sulla sua interfaccia ''n’'' distinta da ''n'' e vedere in esso un indirizzo MAC ''m’'' distinto da ''m''. Quindi 𝛼 e 𝛽 devono "duplicare" la propria interfaccia di rete.
=== Distinti stack di network ===
Quando un nodo 𝛽~-,,0,,-~ assume una identità aggiuntiva 𝛽~-,,1,,-~, oltre a creare delle pseudo-interfacce apposite coi loro nuovi indirizzi MAC, si crea un nuovo completo stack di network, o network namespace. Questo permette alle due distinte identità, le quali esistono in distinti g-nodi ''g~-,,0,,-~'' e ''g~-,,1,,-~'' di livello ''j'', di avere indirizzi IP ''interni'' al g-nodo di livello ''j'' che non si influenzino a vicenda.
Line 38: Line 28:
Abbiamo detto che un nodo 𝛽 che era nel g-nodo ''g'' e migra in ''h'' vuole mantenere la sua vecchia identità in ''g'' e costituirne una nuova, 𝛽~-,,1,,-~, in ''h''. Per far funzionare correttamente il lavoro del modulo Qspn su entrambe le identità è necessario che anche gli archi di 𝛽 vengano duplicati negli archi di 𝛽~-,,1,,-~ al fine di trasmettere su di essi comunicazioni al demone ''ntkd''. Ma quali sono i motivi per cui si rende necessario duplicare un arco allo scopo di riconoscere la provenienza di un generico pacchetto IP? Si individuano questi motivi:
 * Corretto instradamento di pacchetti IP che hanno come destinazione un indirizzo ''interno'' ad un g-nodo.
 * Realizzazione di un circuito fisso tra due end-point, per lo sfruttamento delle rotte disgiunte acquisite.
Un pacchetto IP che ha per destinazione un indirizzo IP ''interno'' al g-nodo ''g~-,,0,,-~'' può giungere al nodo 𝛽 attraverso una delle pseudo-interfacce di ''𝛽~-,,0,,-~''. Quindi sarà gestito dall'identità 𝛽~-,,0,,-~. Anche se l'identità 𝛽~-,,1,,-~ dovesse avere in ''g~-,,1,,-~'' lo stesso indirizzo IP ''interno'' che il pacchetto IP riporta come indirizzo destinazione (oppure sorgente) questo non interferirà con le operazioni che il network namespace di ''𝛽~-,,0,,-~'' porta avanti.
Line 53: Line 41:
Scriviamo l'elenco degli indirizzi link-local che i nodi si sono assegnati:
 * 𝛼 = 169.254.69.30
 * 𝛽 = 169.254.96.141
 *
𝛾 = 169.254.94.223
 * 𝛿 = 169.254.253.216
 * 𝜇 = 169.254.119.176
Scriviamo l'elenco degli indirizzi link-local che i nodi si sono assegnati sull'interfaccia "eth1":
 * ''IP(''𝛼'',eth1)'' = 169.254.69.30
 * ''IP(''𝛽'',eth1)'' = 169.254.96.141
 * ''IP(''
𝛾'',eth1)'' = 169.254.94.223
 * ''IP(''𝛿'',eth1)'' = 169.254.253.216
 * ''IP(''𝜇'',eth1)'' = 169.254.119.176
Line 72: Line 60:
ip l set eth1 up
ip a add 169.254.69.30 dev eth1
ip r add 169.254.96.141 dev eth1 src 169.254.69.30
ip link set eth1 up
ip address add 169.254.69.30 dev eth1
ip route add 169.254.96.141 dev eth1 src 169.254.69.30
Line 78: Line 66:
ip l set eth1 up
ip a add 169.254.96.141 dev eth1
ip r add 169.254.69.30 dev eth1 src 169.254.96.141
ip r add 169.254.94.223 dev eth1 src 169.254.96.141
ip link set eth1 up
ip address add 169.254.96.141 dev eth1
ip route add 169.254.69.30 dev eth1 src 169.254.96.141
ip route add 169.254.94.223 dev eth1 src 169.254.96.141
Line 85: Line 73:
ip l set eth1 up
ip a add 169.254.94.223 dev eth1
ip r add 169.254.96.141 dev eth1 src 169.254.94.223
ip r add 169.254.253.216 dev eth1 src 169.254.94.223
ip link set eth1 up
ip address add 169.254.94.223 dev eth1
ip route add 169.254.96.141 dev eth1 src 169.254.94.223
ip route add 169.254.253.216 dev eth1 src 169.254.94.223
Line 92: Line 80:
ip l set eth1 up
ip a add 169.254.253.216 dev eth1
ip r add 169.254.94.223 dev eth1 src 169.254.253.216
ip r add 169.254.119.176 dev eth1 src 169.254.253.216
ip link set eth1 up
ip address add 169.254.253.216 dev eth1
ip route add 169.254.94.223 dev eth1 src 169.254.253.216
ip route add 169.254.119.176 dev eth1 src 169.254.253.216
Line 99: Line 87:
ip l set eth1 up
ip a add 169.254.119.176 dev eth1
ip r add 169.254.253.216 dev eth1 src 169.254.119.176
ip link set eth1 up
ip address add 169.254.119.176 dev eth1
ip route add 169.254.253.216 dev eth1 src 169.254.119.176

Modulo QSPN - Esempio di uso degli indirizzi virtuali

Premessa

In ogni nodo, il demone ntkd, quando inizia la sua attività, si sceglie un identificativo casuale in uno spazio sufficientemente grande per supporre che sia univoco a livello dei domini di collisione in cui partecipa con le sue interfacce di rete. Un intero di 32 bit è più che sufficiente.

Inoltre il demone ntkd, per ogni interfaccia di rete che gestisce nel nodo, attiva l'interfaccia di rete e si assegna un indirizzo link-local in IPv4 scelto a caso. Questo indirizzo serve alle comunicazioni del demone ntkd coi nodi diretti vicini. E anche per individuare il nodo come gateway per una destinazione nelle tabelle di routing. L'associazione tra l'indirizzo MAC di una interfaccia di rete e il suo indirizzo IP link-local rimane la stessa per tutta la durata della vita del demone ntkd.

Può succedere che il demone ntkd in un nodo, per quanto riguarda in particolare le operazioni del modulo QSPN, assuma diverse identità. Ad esempio il nodo 𝛽 che era nel g-nodo g e migra in h vuole mantenere una posizione in g e prenderne una nuova in h. In questo momento, il demone ntkd crea una sua nuova identità, per la quale si sceglie un altro identificativo casuale. Inoltre il demone ntkd, sopra ogni interfaccia di rete che gestisce, realizza una nuova pseudo-interfaccia con un distinto indirizzo MAC e un distinto indirizzo IP link-local. Infine, per ogni arco che la precedente identità del demone aveva con un nodo diretto vicino, la nuova identità ne crea un duplicato.

Avviene inoltre, una sorta di scambio di attributi degli archi tra le due identità. In questo senso. La vecchia identità assume ora la gestione della posizione che il nodo 𝛽 mantiene in g. La nuova identità assume la gestione della posizione nuova che il nodo 𝛽 prende in h. Il controllo delle interfacce di rete che prima erano gestite dalla vecchia identità passa ora alla nuova identità. La vecchia identità gestisce ora le pseudo-interfacce create prima, le quali infatti sono temporanee.

Gli archi che erano gestiti dalla vecchia identità rimangono gestiti dalla vecchia identità. Non cambia il loro identificativo di arco, che come sappiamo è un concetto interno al modulo QSPN e di cui il suo utilizzatore non si deve occupare. Per ognuno di questi archi, però, cambia l'interfaccia di rete su cui è appoggiato l'arco nel nodo 𝛽 e il relativo indirizzo IP link-local. Infatti ora la vecchia identità gestisce le pseudo-interfacce create prima, con i loro indirizzi IP link-local. Per quanto riguarda l'interfaccia di rete su cui è appoggiato l'arco nel vicino 𝛾 all'altro estremo, qualora a migrare è un intero g-nodo e il vicino 𝛾 ne fa parte, anch'essa diventa la nuova pseudo-interfaccia che anche il nodo 𝛾 ha creato, con il relativo indirizzo IP link-local. Altrimenti resta la stessa.

Gli archi duplicati, invece, mantengono le interfacce di rete su cui sono appoggiati da entrambi gli estremi e i relativi indirizzi IP link-local. Quando tali archi sono passati alla nuova identità del modulo QSPN, ricevono anche un nuovo identificativo di arco ciascuno.

Motivazioni della pseudo-interfaccia di rete

Tutte le comunicazioni che i nodi si scambiano tra i moduli del demone ntkd, sia quelle in UDP broadcast, sia quelle in UDP unicast, sia quelle in TCP, sono tali che il nodo che le riceve è in grado di identificare l'arco su cui sono state inviate. Inoltre le comunicazioni in broadcast contengono informazioni sufficienti a riconoscere quali identificativi di nodo devono considerarsi tra i destinatari del messaggio e quali invece devono ignorarlo. Consideriamo due nodi vicini, 𝛼 e 𝛽, collegati tra loro sopra un unico segmento di rete, cioè da un solo arco fisico. Supponiamo che entrambi abbiano due identità: 𝛼0, 𝛽0, 𝛼1 e 𝛽1. Le caratteristiche appena descritte fanno si che sia possibile per 𝛼0 inviare un messaggio a 𝛽1 e accertarsi che venga processato dalla giusta identità di 𝛽 e che questi sappia identificare la giusta identità di 𝛼 come mittente del messaggio. Inoltre è possibile per 𝛼0 scegliere di avere solo un arco verso 𝛽0 o solo un arco verso 𝛽1: in questi casi anche un messaggio broadcast può essere preparato in modo tale che solo la giusta identità di 𝛽 lo processi.

In conclusione, i messaggi che due nodi vicini si scambiano tra i moduli del demone ntkd possono raggiungere la corretta identità dei nodi senza bisogno di creare nuove pseudo-interfacce di rete.

Ma ci sono dei motivi per cui si rende necessario creare nuove pseudo-interfacce allo scopo di individuare la giusta identità del nodo alla quale è stato trasmesso un generico pacchetto IP da inoltrare. Si individuano questi motivi:

  • Corretto instradamento di pacchetti IP che hanno come destinazione un indirizzo interno ad un g-nodo.

  • Realizzazione di un circuito fisso tra due end-point, per lo sfruttamento dei percorsi disgiunti acquisiti.

Distinti stack di network

Quando un nodo 𝛽0 assume una identità aggiuntiva 𝛽1, oltre a creare delle pseudo-interfacce apposite coi loro nuovi indirizzi MAC, si crea un nuovo completo stack di network, o network namespace. Questo permette alle due distinte identità, le quali esistono in distinti g-nodi g0 e g1 di livello j, di avere indirizzi IP interni al g-nodo di livello j che non si influenzino a vicenda.

Un pacchetto IP che ha per destinazione un indirizzo IP interno al g-nodo g0 può giungere al nodo 𝛽 attraverso una delle pseudo-interfacce di 𝛽0. Quindi sarà gestito dall'identità 𝛽0. Anche se l'identità 𝛽1 dovesse avere in g1 lo stesso indirizzo IP interno che il pacchetto IP riporta come indirizzo destinazione (oppure sorgente) questo non interferirà con le operazioni che il network namespace di 𝛽0 porta avanti.

Passo 1

Consideriamo un grafo connesso G = (V, E).

  • V = {𝛼, 𝛽, 𝛾, 𝛿, 𝜇}

  • E = {𝛼-𝛽, 𝛽-𝛾, 𝛾-𝛿, 𝛿-𝜇}

grafo1.adraw

Ogni elemento di V è un nodo. Diciamo, per semplicità, che ogni nodo ha una interfaccia di rete, che chiamiamo "eth1".

Immaginiamola come una interfaccia radio, nel senso che tramite essa il singolo nodo rileva soltanto gli altri nodi che sono sufficientemente vicini. Con questo intendo dire che, ad esempio, il nodo 𝛽 con la sua interfaccia "eth1" è direttamente collegato al nodo 𝛼 e al nodo 𝛾. Invece il nodo 𝛼 non è direttamente collegato al nodo 𝛾.

Scriviamo l'elenco degli indirizzi link-local che i nodi si sono assegnati sull'interfaccia "eth1":

  • IP(𝛼,eth1) = 169.254.69.30

  • IP(𝛽,eth1) = 169.254.96.141

  • IP(𝛾,eth1) = 169.254.94.223

  • IP(𝛿,eth1) = 169.254.253.216

  • IP(𝜇,eth1) = 169.254.119.176

Ricordiamo l'elenco degli archi attualmente formatisi:

  • 𝛼-𝛽
  • 𝛽-𝛾
  • 𝛾-𝛿
  • 𝛿-𝜇

Per ogni arco che realizza, inoltre, ogni nodo aggiunge una rotta verso i diretti vicini.

Diamo questi comandi ai nodi:

  • nodo 𝛼
  • ip link set eth1 up
    ip address add 169.254.69.30 dev eth1
    ip route add 169.254.96.141 dev eth1 src 169.254.69.30
  • nodo 𝛽
  • ip link set eth1 up
    ip address add 169.254.96.141 dev eth1
    ip route add 169.254.69.30 dev eth1 src 169.254.96.141
    ip route add 169.254.94.223 dev eth1 src 169.254.96.141
  • nodo 𝛾
  • ip link set eth1 up
    ip address add 169.254.94.223 dev eth1
    ip route add 169.254.96.141 dev eth1 src 169.254.94.223
    ip route add 169.254.253.216 dev eth1 src 169.254.94.223
  • nodo 𝛿
  • ip link set eth1 up
    ip address add 169.254.253.216 dev eth1
    ip route add 169.254.94.223 dev eth1 src 169.254.253.216
    ip route add 169.254.119.176 dev eth1 src 169.254.253.216
  • nodo 𝜇
  • ip link set eth1 up
    ip address add 169.254.119.176 dev eth1
    ip route add 169.254.253.216 dev eth1 src 169.254.119.176

Proseguiamo con il passo 2.

Netsukuku/ita/docs/ModuloQSPN/Esempio1/Step1 (last edited 2016-07-27 10:27:12 by lukisi)