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
 
I corsi di Ingegneria
 
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