Modulo QSPN - Esempio di uso degli indirizzi virtuali

Passo 7

In questo passo simuliamo l'ingresso di un nuovo nodo che forza la migrazione del g-nodo di livello 1 [1, 1] nel g-nodo di livello 2 [0], che è non saturo.

Ora nella rete si aggiunge il nodo 𝜆 collegato solo al nodo 𝜀. Esiste l'arco 𝜀-𝜆, ma tale arco non è ancora comunicato al modulo QSPN in quanto il nodo 𝜆 non fa ancora parte della rete.

grafo8.adraw

Il nuovo nodo si assegna questo indirizzo link-local:

Si aggiunge questo arco all'elenco:

Diamo questi comandi ai nodi:

Il nodo 𝜆 vuole fare da gateway per una sottorete di due nodi gestita autonomamente. Quindi vuole riservarsi un g-nodo di livello 1.

Al livello più alto la rete è satura, non si può costituire un nuovo g-nodo di livello 2. Il nodo 𝜆 vuole entrare in g2(𝜀) = [1] ma è saturo. Come soluzione si sceglie di far migrare tutto il g-nodo 𝜑 = g1(𝜀) = [1, 1] in [0], ma che resti come virtuale in [1] prendendo il primo identificativo virtuale libero nel g-nodo di livello 2 [1], cioè 2. Quindi diventa [2, 1].

I due g-nodi di livello 2 interessati dalla migrazione di 𝜑 sono stati evidenziati nel disegno e contrassegnati con le lettere M e N.

Si noti che il livello più alto in cui i due g-nodi M e N differiscono è 2.

Il g-nodo 𝜑 migra in una operazione atomica, cioè tutti i suoi nodi migrano insieme, senza attendere l'uno le operazioni dell'altro. Alcune operazioni sulle proprie strutture dati interne le faranno tutti i nodi. Alcuni comandi per il sistema operativo andranno dati su tutti i nodi.

Le trasmissioni di ETP dovute ai cambi di indirizi di 𝜑 invece le faranno solo i border-nodi e le comunicheranno solo all'esterno. Le richieste di un ETP completo le faranno solo i border-nodi ai nodi esterni. Con gli ETP ricevuti i border-nodi acquisiranno nuovi percorsi e propagheranno ai nodi interni questi percorsi con ETP che viaggeranno solo internamente.

Procediamo.

Ogni nodo del g-nodo 𝜑, per ognuna delle interfacce di rete gestite dal demone ntkd nel network namespace default, costruisce una pseudo-interfaccia a cui associa un nuovo indirizzo IP link-local. Poi le sposta in un nuovo network namespace (che chiamiamo in questo esempio "ntkv1").

Diamo questi comandi ai nodi:

Ogni nodo in 𝜑 crea una sua nuova identità, che si assegna a caso un nuovo identificativo, che userà l'interfaccia di rete e il network namespace con cui il nodo gestiva il suo precedente indirizzo in 𝜑. Nel dettaglio:

Queste nuove identità formano un gruppo che chiamiamo 𝜑N.

Le vecchie identità ora gestiranno indirizzi di connettività ai livelli da 2 a 2, virtuali al livello 1. Per indicare ciò, da ora in poi le chiamiamo 𝛽i(1,2),i(2,2), 𝛾i(2,2) e 𝜀i(2,2) e chiamiamo il gruppo 𝜑i(2,2). Queste useranno la pseudo-interfaccia di rete creata adesso nel relativo network namespace. Nel dettaglio:

Ogni nodo in 𝜑, per tutti i suoi archi crea un duplicato che sarà di 𝜑N. Poi modifica gli archi vecchi, quelli che rimangono in 𝜑i(2,2). Per gli archi che aveva con altri nodi in 𝜑 questo duplicato collega la pseudo-interfaccia nuova nell'uno e nell'altro nodo, mentre per gli archi che aveva con altri nodi che non appartengono a 𝜑 questo duplicato collega la pseudo-interfaccia nuova nell'uno con la vecchia interfaccia nell'altro. Nel dettaglio:

Visualiziamo la rete nel seguente disegno. Come prima, gli elementi rossi sono quelli nuovi, i violetti sono quelli modificati; gli archi tratteggiati collegano a nodi che non fanno ancora parte della rete.

grafo9.adraw

Ora illustriamo i comandi che vengono dati ai nodi per realizzare queste operazioni. Va considerato che ogni nodo esterno a 𝜑 che vede una modifica realizzata su un suo vecchio arco (cambia l'indirizzo IP link-local al suo estremo che è in 𝜑) deve anche apportare la relativa variazione alle rotte che aveva memorizzato in precedenza e che usavano quell'arco come gateway.

Diamo questi comandi ai nodi:

I nodi in 𝜑i(2,2), quindi in riferimento alla loro identità che mantiene l'indirizzo di connettività nel network namespace "ntkv1", trasformano il loro precedente indirizzo [X, 1, 1] in [X, 2, 1] che è di connettività ai livelli da 2 a 2. Nel dettaglio:

Riguardando la regola generale descritta nel passo 3 sulle operazioni da fare con gli indirizzi e le rotte, poiché il g-nodo 𝜑 diventa di connettività ai livelli da 2 a 2 e quindi virtuale al livello 1, i nodi in esso fanno queste operazioni:

Quindi diamo questi comandi:

Vediamo ora le comunicazioni del g-nodo 𝜑 agli altri g-nodi. Ogni border-nodo di 𝜑 trasmette un ETP ai suoi vicini che non appartengono a 𝜑. In questo ETP comunica che non è più possibile raggiungere tramite lui l'indirizzo [1, 1]; e che ora è possibile raggiungere tramite lui l'indirizzo [2, 1].

Questo ETP viene recepito solo dai nodi del g-nodo di livello 2, trattandosi di due percorsi verso g-nodi di livello 1, cioè solo dai nodi 𝛿 e 𝜇. Inoltre la comunicazione relativa all'indirizzo virtuale [2, 1] viene recepita ma non comporta alcun comando.

Quindi diamo questi comandi ai nodi:

Dopo tutti questi comandi, il g-nodo 𝜑 non è in grado di comunicare con gli altri g-nodi della rete, ma è in grado di inoltrare i pacchetti. Quindi la rete rimane connessa: ad esempio, il nodo 𝛼 è in grado di comunicare con il nodo 𝜇 usando il suo indirizzo globale.

Inoltre, all'interno del g-nodo 𝜑 i singoli nodi (vale a dire 𝜀 e 𝛾) possono comunicare tra loro usando i loro indirizzi IP interni al g-nodo di livello 1. E le connessioni che erano state aperte tra 𝜀 e 𝛾 (sempre con gli indirizzi IP interni) prima di queste operazioni sono tuttora funzionanti.

Proseguiamo con il passo 8.