Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Giorgio Ventre » 18.Network Simulator NS2


Indice Lezione

  • Risorse
  • Parte 1: Introduzione
  • Il Simulatore di Reti ns-2
  • Il Network Animator NAM
  • Il Linguaggio OTCL
  • Parte 2: Simulazione di uno Scenario
  • Lo Scenario di Rete
  • Costruzione dello script
  • Analisi dei Risultati
  • Parte 3: Estendere ns
  • Collegare codice C++ e OTCL
  • Creazione di un nuovo agent

Parte 1:

Introduzione

Il Simulatore di Reti ns-2

  • Ns is a discrete event simulator targeted at networking research. Ns provides substantial support for simulation of TCP, routing, and multicast protocols over wired and wireless (local and satellite) networks“1
  • Il Simulatore ns-2 è sviluppato quale parte dei progetti:
    • DARPA – SAMAN (Simulation Augmented by Analysis for Network)
    • NSF – CONSER (Collaborative Simulation for Education and Research)
    • Altri contributi SUN, UCB, ACRI, ……
  • Sono disponibili due formati del codice sorgente di ns-2:
    • ” all at once “
    • “from all the pieces”
  • Il copyright ne consente l’uso, la modifica e la redistribuzione 1 ns-2 home page: www.isi.edu/nsnam/ns

Il Simulatore di Reti ns-2

  • ns-2 è un simulatore di tipo “event driven” scritto in C++ e OTCL
  • In ns-2 sono implementati:
    • Protocolli di “rete”: TCP, UDP, FTP …..
    • Protocolli/Algoritmi di Routing
    • Meccanismi di Gestione delle Code dei Router (DropTail, CBQ, RED, ….)
    • Modelli per Sorgenti di Traffico (HTTP, FTP, ….)
    • Meccanismi per Simulazione di “Eventi”
    • …………………………..

Il Simulatore di Reti ns-2

  • ns-2 può essere visto come un interprete OTCL dotato di un motore di simulazione
  • I componenti principali del motore di simulazione sono:
    • Event Scheduler
    • Network Component Objects
  • I risultati della simulazione possono essere generati in un formato compatibile con il Network Animator NAM

Struttura delle directory di ns


L’Event Scheduler di ns

  • L’event scheduler di ns è utilizzato dai network component per definire gli eventi.
  • I network component che istanziano gli eventi hanno la responsabilità di risolverli.
  • Il datapath e l’eventpath sono separati.

L’Event Scheduler di ns

  • L’event scheduler è anche utilizzato per schedulare eventi di simulazione.
  • Ad esempio è utilizzato per avviare flussi di traffico o per richiamare funzioni di elaborazione postsimulazione.
  • Allo scopo si utilizza una funzione membro di ns:
    • $ns at time “string”
  • In ns sono implementati due differenti scheduler degli
  • eventi:
    • uno scheduler real time;
    • uno scheduler non real time.

L’Event Scheduler di ns

  • Lo schedule real time di ns è utilizzato per le emulazioni.
  • Esistono tre diverse implementazioni dello scheduler non real time List, Heap e Calendar.
  • Dal punto di vista logico queste tre implementazioni sono del tutto equivalenti.

Il Network Animator NAM

  • Nam is a Tcl/TK based animation tool for viewing network simulation traces and real world packet traces. It supports topology layout, packet level animation, and various data inspection tools
  • Consente di:
    • Creare script per ns senza alcuna conoscenza del linguaggio di scripting OTCL (NAM Editor);
    • Visualizzare i risultati di un esperimento di simulazione.
  • Una versione estesa del NAM Editor è stata sviluppata presso il DIS ed è reperibile all’indirizzo:
    • www.grid.unina.it/grid/ExtendedNamEditor

Il Network Animator NAM


Il Network Animator NAM


Il linguaggio OTCL

  • OTcl, short for MIT Object Tcl, is an extension to Tcl/Tk for objectoriented programming…….
  • Tcl (Tool Command Language) è un linguaggio di scripting di tipo general-purpose.
  • Il Tcl è spesso utilizzato congiuntamente alla libreria Tk (Tool Kit), un insieme di librerie e comandi che consentono di creare con facilità interfaccie grafiche.
  • OTCL è un insieme di estensioni del linguaggio TCL che consentono di implementare un ambiente di programmazione di tipo OO.
  • Il legame esistente tra il Tcl e l’OTCL può essere assimilato a quello esistente tra C e C++.

Il linguaggio OTCL


Il linguaggio OTCL


Il linguaggio OTCL


Il linguaggio OTCL


Il linguaggio OTCL


Il linguaggio OTCL


Parte 2:

Simulazione di uno Scenario

Lo Scenario di Rete


Analisi dello script

  • # set ns [new Simulator]
    • Genera un istanza del simulatore e la assegna alla variabile ns.
    • Viene creato uno schedulatore degli eventi.
  • L’oggetto “simulatore” ha un insieme di funzioni membro che servono per la costruzione dello scenario simulato:
    • creazione di nodi e link;
    • definizione delle connessioni tra gli oggetti;
    • definizione delle connessioni tra gli agenti che implementano protocolli e applicazioni;
    • etc.

Analisi dello script

  • $ns color fid color
    • Consente di definire il colore da associare a un flusso di pacchetti nella sua visualizzazione in NAM.
  • $ns namtraceall filedescriptor
    • Serve per richiedere al simulatore di generare un file di log degli eventi in un formato compatibile con il visualizzatore NAM.
  • $ns traceall filedescriptor
    • Simile alla precedente; in questo caso il file di log non è compatibile con NAM ma la sua interpretazione diretta è più agevole.

Analisi dello script

  • proc finish {}
    • È una procedura richiamata all’atto della chiusura della simulazione attraverso il comando: $ns at 5.0 “finish”.
    • Serve a definire una serie di attività postsimulazione (chiusura dei file di log, avvio del visualizzatore, etc.).
  • set n0 [$ns node]:
    • node è una funzione membro della classe Simulator.
    • Serve a creare un nuovo nodo di rete.
    • Un nodo di rete è un oggetto composito ottenuto dall’unione di più oggetti tra cui un address classifier e un port classifiers.

Analisi dello script

  • $ns duplexlink node1 node2 bandwidth delay queuetype
    • Crea due link simplex tra i nodi node1 e node2.
    • In ns le code di uscita da un nodo sono implementate nei link.
    • ns supporta differenti tipi di code (DropTail, RED, etc.).
    • Come per i nodi, i link sono oggetti composti da una serie di sottooggetti.
    • Tra i vari componenti dei link ci sono dei moduli di errore chepossono essere utilizzati per simulare la perdita di pacchetti.
    • $ns queuelimit node1 node2 number
    • Definisce la dimensione delle code associati ai due link simplex che collegano i nodi node1 e node2.

Analisi dello script

  • set tcp [new Agent/TCP]
    • Crea un nuovo agente TCP.
    • La creazione di ogni agenti protocollari e sorgenti di traffico avviene con istruzioni simili a questa.
    • Gli agenti protocollari e le sorgenti di traffico sono solitamente implementati in C++.
    • Nel file “ns2/tcl/libs/nsdefault.tcl” file si possono trovare tutti iparametri di configurazione degli agenti ns.
    • Chiaramente, questo file contiene implicitamente una lista di tutti gli agenti disponibili in ns.

Analisi dello script

  • $ns attachagent node agent
    • attachagent è una funzione membro della classe Simulator che serve a collegare un oggetto agent ad un oggetto nodo.
    • Ogni nodo ha una funzione membro che può essere eseguita per ottenere lo stesso risultato: $n0 attach $tcp.
  • $ns connect agent1 agent2
    • Crea una connessione logica tra gli agenti agent1 e agent2.
    • In questo modo possibile creare connessioni di rete e consentire lo scambio di pacchetti.
    • È necessario eseguire la connect anche per protocolli non orientati alla connessione.

Analisi dello script

  • $ns at time “string”
    • Inserisce un nuovo evento nella lista di eventi gestiti dallo scheduler.
    • Ad esempio con l’istruzione $ns at 0.1 “$cbr start” si definisce un evento che prevede l’avvio del flusso cbr all’istante 0.1.
  • $ns run
    • Avvia il processo di simulazione.

Analisi dei Risultati


Parte 3:

Estendere ns

Collegare codice C++ e OTCL

  • Il simulatore ns è il risultato della combinazione di codice scritto in C++ e OTCL.
  • In particolare nei network element:
    • la gestione del data path è implementata in C++ per motivi di efficienza;
    • l’accesso alle funzionalità e realizzato in OTCL per motivi di praticità.
  • Volendo estendere ns bisogna scrivere codice in C++ e OTCL e collegare il tutto.
  • In realtà sarebbe possibile operare esclusivamente in OTCL.

Creiamo un nuovo agent

  • Supponiamo di voler implementare un agent che realizzi un semplice protocollo di ping.
  • La prima cosa da fare è dichiarare la struttura del headerdel nostro protocollo in un file ping.h.
  • Il carattere ret sarà posto a 0 nel pacchetto di probing inviato dal sender al receiver, ad 1 nel pacchetto di risposta.

Creiamo un nuovo agent

  • Dichiariamo la nostra classe PingAgent come una sottoclasse della classe Agent.

Creiamo un nuovo agent

  • Per potere istanziare oggetti della classe PingAgent in OTCL è necessario creare un oggetto che si occupi del collegamento.
  • Tale oggetto dovrà essere derivato dalla classe TclClass.

Creiamo un nuovo agent

  • Ogni qual volta verrà inviato un messaggio del nostro protocollo di ping verrà creato un pacchetto conforme all’header da noi definito.
  • La classe associata all’header del pacchetto dovrà essere derivata dalla classe PacketHeaderClass.
  • In essa dovrà essere definito il nome dell’header da utilizzare in OTCL.

Creiamo un nuovo agent

  • Nel costruttore della classe PingAgent si dovrà definire il binding tra le variabili cui dovrà essere possibile accedere sia in C++ che in OTCL.

Creiamo un nuovo agent

  • La funzione C++ command è eseguita ogni volta che viene invocato un comando TCL.

Creiamo un nuovo agent

  • La funzione C++ recv definisce le azioni da compiere ogni qual volta un pacchetto viene ricevuto.

Creiamo un nuovo agent

  • La funzione C++ recv definisce le azioni da compiere ogni qual volta un pacchetto viene ricevuto.

Integriamo il nuovo agent in ns

  • Una volta creato un nuovo agent è necessario integrarlo nel simulatore.
  • Per farlo è necessario modificare una serie di file di ns.
  • packet.h

Integriamo il nuovo agent in ns (2/3)

  • p_info()
  • ‘tcl/lib/nsdefault.tcl
p_info()

p_info()

‘tcl/lib/nsdefault.tcl

'tcl/lib/nsdefault.tcl


Integriamo il nuovo agent in ns (3/3)

  • tcl/lib/nspacket.tcl
  • Makefile

A questo punto è possibile ricompilare il simulatore.

tcl/lib/nspacket.tcl

tcl/lib/nspacket.tcl

Makefile

Makefile


I materiali di supporto della lezione

The Netwok Simulator ns-2 Home Page:

www.isi.edu/nsnam/ns

The Network Simulator ns-2 Manual:

www.isi.edu/nsnam/ns/ns-documentation.html

The Network Simulator ns-2 Mailing List:

www.isi.edu/nsnam/ns/ns-lists.html

The Network Simulator ns-2 Tutorial:

www.isi.edu/nsnam/ns/tutorial/index.html

http://nile.wpi.edu/NS

TCL/TK Resource:

www.isi.edu/nsnam/otcl/README.html

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion