Mininet

Mininet è uno strumento (un simulatore virtualizzato) che viene usato per automatizzare la creazione e la simulazione di topologie di rete (molto spesso reti SDN), ma non è limitato a questo.

Nel nostro caso useremo OpenFlow, che è un protocollo supportato da appositi dispositivi (nodi) in modo che possano essere configurati tutti allo stesso modo.

Mininet si basa sul concetto di Linux network namespace, ovvero una copia logica dello stack di rete del sistema host. Offre quindi la possibilità di creare istanze separate di interfacce di rete che operano in modo indipendente tra di loro.

Prima rete semplice

Untitled

Opzione 1: Virtualizzazione completa

Se virtualizzassimo tutto lo stack di rete avremmo una struttura di questo tipo:

Opzione 1: Full System Virtualization

Opzione 1: Full System Virtualization

La VM a sinistra è il client, quella di destra è il server. Entrambe sono contenute all’interno di un’unica VM Server.

I tap essenzialmente fanno da ponte tra le VM host e il kernel del server, che passa le informazioni sulla rete.

Ovviamente nella realtà i tap potrebbero essere dei cavi di rete connessi a uno switch.

Opzione 2: Virtualizzazione lightweight

Option 2: Lightweight virtualization

Option 2: Lightweight virtualization

In questo caso usiamo degli oggetti chiamati Network Namespace, che sono processi on top alla nostra VM, che quindi non hanno un loro Kernel, ne lo stack del SO, ma espongono comunque un’interfaccia, ma possono parlare direttamente con il kernel della VM, che si occupa in questo caso di emulare il forwarding dei pacchetti.

Opzione 3: Lightweight virtualization with root namespace

Option 3: Lightweight virtualization with root namespace

Option 3: Lightweight virtualization with root namespace

Ancora più performante (è come funziona Mininet), abbiamo un namespace anche al posto della VM “Server”, emuliamo quindi anche la parte di switching con un namespace.

Abbiamo quindi 2 processi che espongono un’interfaccia, e una root ns che ha un processo che si occupa di emulare le funzionalità di switching, e quindi è come se tirassimo dei cavi virtuali, senza passare dal kernel e perdere tanto tempo.