IC3N 2000 N. 1 Agenda Introduzione al simulatore di rete ns2 (Network Simulator vers. 2) Come installare ns2 su Windows il linguaggio OTCL Uso di ns2 per simulare reti a pacchetto L ambiente di simulazione Le classi standard di ns2 1
Il simulatore: ns2 Network Simulator ver. 2 Sviluppato presso l University of Southern California's Information Sciences Institute (ISI) Software di simulazione di pubblico dominio (open source) Simulatore di reti in continua evoluzione Piattaforme supportate: Unix, Unix-like, Windows Sito ufficiale: http://www.isi.edu/nsnam/ns/! "# ns2 è un simulatore orientato al networking. - La popolarità di ns2 è essenzialmente dovuta all' eterogeneità di uso ed alla varietà di modelli messi a disposizione. Infatti ns consente di simulare molte tipologie di reti IP (LAN/WAN) Protocolli di rete a vari livelli (MAC, routing, trasporto) Modelli di sorgenti di traffico (es. CBR, FTP, ON/OFF ) Meccanismi di gestione delle code (es. FIFO, RED, Droptail ) 2
! "# ns2 un simulatore ad eventi discreti - l istante in cui si presenta un evento attiva l esecuzione di azioni specificate dal programma - Un evento può essere l'invio o la ricezione di un pacchetto da parte di una componente di rete oppure la gestione di un timer ns2 un simulatore scritto in C++ e Otcl - Motore di simulazione C++ - Interazione utente-simulatore in Otcl (Object-Oriented tool command language) $! "# Lista Eventi t 0 :evento 0 t 1 : evento 1 t 2 : evento 2......... t n : evento n select next event add new event remove old event event i Scheduler Elaborazione Invocazione Il simulatore agisce sulla lista eventi inserisce un nuovo evento nella lista processa l evento attuale estraendolo dalla lista esegue le azioni associate all evento elimina l evento processato L accesso alla lista viene gestita dallo scheduler % 3
Il simulatore: ns2 Network Simulator ver. 2 User Space OTcl Script: Tcl interpreter with OO extention User Space ns library Event Scheduler objects Network component objects Network setup Helping modules Risultati... OTCL:Il linguaggio di scripting Otcl è usato per eseguire i comandi dell utente, ovvero per descrivere lo scenario simulativo configurare la topologia di rete, nodi, canale, schedulare gli eventi C++: Il linguaggio C++ è usato per implementare il simulatore riproducendo il comportamento dei protocolli di rete & Il simulatore: ns2 Network Simulator ver. 2 Le classi C++ che costituiscono ns2 implementano l insieme dei protocolli disponibili L ambiente OTcl : permette la definizione di classi OTcl direttamente connesse alle classi C++ (linkage) fornisce i metodi per l utilizzo delle classi ns2 utilizza le due tipologie di classe e consente di creare gestire ed analizzare una rete di telecomunicazioni lo script OTcl è il mezzo per creare gli oggetti della rete ed i relativi collegamenti fra gli stessi ' 4
) * ns2 viene naturalmente installato su sistema operativo UNIX. È possibile installare NS2 anche su Windows appoggiandosi sulla piattaforma Cygwin che simula l ambiente Linux. Trovate tutto il materiale sul sito http://deisnet.deis.unibo.it/didattica/corsibo/retils/ Cygwin NS2 Istruzioni per le installazioni ( -." /0 "1 Cygwin è scaricabile liberamente da Internet o in alternativa lo trovate sul sito dell esame. Prima di tutto installare Cygwin in C: o in C:/Programmi. È consigliabile installare tutti i componenti (all install) +, 5
-." /0 "1 Dopo aver installato cygwin (consigliabile installare l icona sul Desktop) Aprire la shell di cygwin in modo tale che viene creata la directory home/nome-utente Verifica del funzionamento di Cygwin Eseguire una shell Cygwin tramite l'apposito collegamento creato sul Desktop Digitare startx Digitare dal nuovo terminale xeyes Se due occhioni sono comparsi sul monitor, allora l'installazione di XWindows è andata a buon fine ++ * " "/+1 Scaricare il file ns-allinone 2.29.2.tar.gz nella directory C:/Cygwin/home/loginutente Aprire Cygwin e arrivare nel file system alla cartella C:/Cygwin/home/ loginutente Scompattare il file ns-allinone-2.29.2.tar.gz nella directory C:/Cygwin/home/loginutente con il comando: tar -xvzf ns-allinone-2.29.2.tar.gz dalla shell Cygwin Posizionarsi nella cartella /ns-allinone-2.29/con il comando: cd ns-allinone-2.29 Lanciare il comando di installazione:./install Aggiornare il file ~/.bashrc che si trova nella home di ns aggiungendo i comandi che trovate nelle spiegazioni (v.slide successiva). + 6
* " "/1 Aggiornare il file ~/.bashrc che si trova nella home di ns (vedi file readme.pdf) scrivere pwd dalla shell di Cygwin notare cosa rimanda la shell... solitamente /home/loginutente/nsallinone-2.29/ Da shell: export NS_HOME=/home/loginutente/ns-allinone-2.29/ export PATH=$NS_HOME/tcl8.4.11/unix:$NS_HOME/tk8.4.11 /unix:$ns_home/bin:$path export LD_LIBRARY_PATH=$NS_HOME/tcl8.4.11/unix: $NS_HOME/tk8.4.11/unix:\ $NS_HOME/otcl-1.11:$NS_HOME/lib:$LD_LIBRARY_PATCH export TCL_LIBRARY=$NS_HOME/tcl8.4.11/library. + 2 345/+%1 OTCL è un insieme di estensioni del linguaggio TCL che consentono di implementare un ambiente di programmazione di tipo OO (object oriented) 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 Il legame esistente tra il Tcl e l'otcl può essere assimilato a quello esistente tra C e C++ ns-2 OTCL tutorial: - www.isi.edu/nsnam/otcl/doc/tutorial.html + 7
2 345/%1 Per creare una variabile si usa il comando: set <nome_variabile> <valore> set a 15 unset <nome_variabile> Per leggere il valore di una variabile si usa il simbolo $ seguito dal nome della variabile per riferimento: $variabile puts $a; # scrive a video il valore di a expr $a * 5; # calcola a* 5 Le variabili sono tutte di tipo stringa e non devono essere dichiarate. Se necessario, l interprete converte la stringa in un valore numerico +$ 2 345/%1 Output su schermo: Per scrivere su schermo si usa: puts $<nome_variabile> puts <stringa di caratteri> Ex: puts Hallo Output su file: Per aprire un file si usa il comando open: set trace_file [ open nome_file w] Per scrivere su un file si usa il comando puts puts $trace_file $<nome_variabile> Per chiudere il file si usa il comando close. close $trace_file +% 8
2 345/%1 Input da linea di comando: Il numero di parametri di ingresso è contenuto nella variabile argc. I parametri in ingresso sono contenuti nella lista argv. Per leggere i parametri usare il comando : [lindex $argv n] if {$argc == 2} { set a [lindex $argv 0 ] set b [lindex $argv 1 ] } puts variabile A= $a; variabile B= $b Ad a viene assegnato il primo valore dell array argv e a b il secondo. Argv è l array dei parametri in ingresso +& 2 345/$%1 Cicli FOR for {set i 0} {$i < 100} {incr i} { set v($i) [new vettore] } Cicli WHILE while {$i < 100} { set v($i) [new vettore] incr i } Istruzioni IF if {$i < 10} { puts i is less than 10 " } +' 9
2 345/%%1 Le procedure facilitano la programmazione permettono l esecuzione di azioni ricorsive caratterizzano il programma in blocchi logici proc <nome> {p 1 p 2 } { body } EX proc proc3 {min max} { set differenza [expr $max-$min] return $differenza; } set differenza [proc3 5 17]; puts $differenza; +( Uso di ns2 per le reti a pacchetto O, 10
Uso di ns2 per simulare reti a pacchetto Le classi standard utili per implementare un modello di rete per lo studio del protocollo TCP sono: La classe base di ns2: SIMULATOR Le classi che definiscono lo strato di rete: NODE LINK ERROR MODEL Classe de definisce lo strato di trasporto : AGENT Classe che definisce le applicazioni: APPLICATION Le classi che definiscono il monitoraggio e la raccolta dei risultati: TRACE MONITOR + La classe SIMULATOR Classe fondamentale di ns2 Permette di istanziare il motore di simulazione Primo oggetto creato da uno script OTcl set ns [new simulator] I metodi della classe simulator: 3 categorie configurazione della topologia (creazione dei nodi, dei link,...) monitoraggio dell evoluzione temporale di oggetti (trace) configurazione dello scheduler Il metodo per la configurazione dello scheduler definisce i seguenti comandi: at esegue un comando al tempo t after esegue un comando dopo un certo intervallo P L istruzione run fa partire la simulazione $ns at t comando $ns after p comando 11
La classe SIMULATOR : esempio Example proc arriva_pacchetto {} { puts Pacchetto arrivato $ns after 1 arriva_pacchetto } set ns [new Simulator] $ns at 0.5 arriva_pacchetto $ns at 3 exit 0 $ns run La classe NODE: generalità Classe implementata in Otcl Implementano le funzionalità del protocollo IP definizione dell indirizzamento routing consegna delle unità informative al protocollo di trasporto Due tipi: Unicast Node: per gestire pacchetti con un solo mittente ed un solo destinatario Multicast Node: per gestire pacchetti con un solo mittente e più destinatari 12
La classe NODE: creazione dell oggetto Creazione dell oggetto NODE: set node1 [$ns node] Ritorno dell identificatore di nodo $node1 id Creazione di N oggetti NODE for {set i 0} {$i < N} {incr i} { } {set node$i [$ns node]} $node1 attach <agent> $ns attach-agent $node1 $agent1 $ La classe LINK: generalità Oggetti che permettono i collegamenti fra gli oggetti NODE Definita da 5 elementi principali: head_ ) queue_ 5 # link_ )55 # * 6 55 6 ttl_ ) 442/4 42 1 drophead ) _ 5 55 # % 13
La classe LINK: creazione dell oggetto (1/2) 7 set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] set node3 [ $ns node ] set node4 [ $ns node ] invocazione della classe simulator creazione di 4 oggetti NODE attraverso il metodo node appartenente alla classe ns $ns simplex-link $node1 $node2 10Mb 1ms DropTail $ns duplex-link $node3 $node4 100Mb 50ms DropTail Creazione di 2 collegamenti fra i nodi specificandone il tipo, la capacità, il ritardo e la politica di coda all interfaccia fra il nodo ed il link d uscita & La classe LINK: creazione dell oggetto (2/2) 7 set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] set node3 [ $ns node ] set node4 [ $ns node ] $ns simplex-link $node1 $node2 10Mb 1ms DropTail $ns duplex-link $node3 $node4 100Mb 50ms DropTail B=10Mb; d=1ms 1 2 B=50Mb; d=50ms 3 4 ' 14
La classe AGENT: generalità (1/2) Gli agent sono gli elementi dove si realizza: la generazione a livello di rete delle unità informative che devono essere trasmesse (es.:applicazione che invia dati) la rimozione delle stesse dopo la ricezione (es.: applicazione che riceve i dati) Applicazione A Applicazione B AGENT A AGENT B NODO 1 LINK NODO 2 LINK NODO 3 LINK ( La classe AGENT: generalità (2/2) L agent non riceve realmente dati dall applicazione ma solo la dimensione dell unità informativa (bytes) Diversi tipi di agent per gestire diversi tipi di protocolli di trasporto (es. TCP, UDP, ) Per ogni protocollo di trasporto è definito: Un agent trasmettitore Un agent ricevitore Al nodo ricevitore i pacchetti vengono scartati dall agent ricevitore (libera la memoria associata alla struttura dati del pacchetto) AGENT NULL (scarto) AGENT TCPSink (scarto +ACK), 15
La classe AGENT: Agent TCP Due categorie possibili: Agent TCP unidirezionali Agent trasmettitori Agent ricevitori Agent TCP bidirezionali Possibilità di impostare diverse versioni del TCP Tahoe, Reno, NewReno, Vegas etc. La classe Agent/TCP è caratterizzata da numerose variabili membro Senza nessuna specifica valore di default Possibilità di modificare i valori di default Agent/TCP set <member_variable> <value> + 84-9 : 5 window: dimensione massima della finestra di congestione/ricezione packetsize: dimensione in byte del pacchetto trasmesso tcptick: granularità temporale nella stima del RTT maxrto: valore massimo per il RTO dupacks: contatore degli ack duplicati Ack: il valore più alto di ACK ricevuto cwnd: dimensione della finestra di congestione (in pacchetti) sstresh: valore della soglia di slow start rtt: campione del RTT srtt: valor medio del campione di RTT rttvar: varianza del campione di RTT maxseq: massimo numero di sequenza trasmesso... 16
La classe AGENT: creazione dell oggetto 7 set ns [ new Simulator ] set node1 [ $ns node ] set node2 [ $ns node ] $ns simplex-link $node1 $node2 100Mb 2ms DropTail set agent1 [ new Agent /UDP ] set agent2 [ new Agent / Null ] $ns attach-agent $node1 $agent1 $ns attach-agent $node2 $agent2 $ns connect $agent1 $agent2 $agent1 set fid_ 1 #associa i pacchetti ad certo flusso tramite la viaribile membro flow indicator Agent 1 node 1 1 1 1 Link node 2 Agent 2 La classe APPLICATION: generalità Ha lo scopo di emulare le applicazioni più comuni e le caratteristiche di profili di traffico noti. Le unità dati generate da oggetti application sono passati all oggetto agent tramite funzioni di interfaccia. Possibilità di: generare traffico tipico di applicazioni del mondo reale (FTP File Transfer Protocol, Telnet, WEB) Configurare le caratteristiche dell applicazione In ns2 l applicazione non genera veri dati ma solo delle dimensioni di file (es.: numero di byte inviati per trasferire un file mp3) I byte generati vengono incapsulati in segmenti TCP dall agent corrispondente con intestazioni TCP/IP 17
5* /;491 set ns [new Simulator] set node1 [$ns node] set node2 [$ns node] $ns duplex-link $node1 $node2 1Mb 1ms DropTail set agent1 [new Agent/TCP] set agent2 [new Agent/TCPSink] $ns attach-agent $node1 $agent1 $ns attach-agent $node2 $agent2 $ns connect $agent1 $agent2 set application1 [new Application/FTP] $application1 attach-agent $agent1 $ns at 0.0 "$application1 start" $ 258992-843 : 5 In ns2 sono implementate 4 classi derivate dalla classe TrafficGenerator: EXPOO_Traffic. generazione di traffico On/Off con distribuzione exp dei tempi di permanenza in ogni stato POO_Traffic: tempi di permanenza in ciascuno stato distribuiti secondo una distribuzione di Pareto (bursty) CBR_Traffic: generazione di traffico a rate costante, con pacchetti di dimensione fissa TrafficTrace: generazione di traffico effettivo ottenuto da misurazioni sulla rete % 18
La classe ERRORMODEL: generalità Consente di riprodurre il verificarsi di errori a livello fisico e/o la perdita di unità dati Si basa sull utilizzo di due stratagemmi: Attivazione dei flag di errore nella struttura del pacchetto come indicazioni di presenza di bit errati (opzione di default) Invio del pacchetto ad un unità di scarto (drop target) invece che al destinatario per simulare la perdita del pacchetto L evento di errore può quindi essere definito sia a livello di bit sia di pacchetto & Monitoraggio e raccolta dei risultati Due strategie possibili per raccogliere i risultati della simulazione definizione di due diversi oggetti ns: oggetti trace oggetti monitor Oggetto trace: inserito tra due nodi produce un report su tutti gli eventi che hanno interessato i pacchetti trasmessi sul link durante la simulazione necessità di associare all oggetto trace un elemento di raccolta dei dati di simulazione (TclChannel (un file)) Oggetto monitor: sfrutta l uso di contatori permette di monitorare i parametri d interesse durante la simulazione ' 19
La classe TRACE: generalità Ogni pacchetto è tracciato grazie ad una intestazione (hdr_cmn) caratterizzata da un identificativo unico il tipo di pacchetto la dimensione del pacchetto (tempo di trasmissione) un identificativo dell interfaccia di trasmissione (per il caso multicast) un identificativo di flusso nodo sorgente nodo destinazione ( La classe TRACE: esempio set ns [ new Simulator ] set source [ $ns node ] set dest [ $ns node ] $ns duplex-link 100Mb 1ms DropTail creazione dei nodi sorgente, destinazione e del link fra essi set trace_file [open traccia.tr w] apertura in scrittura del file di trace traccia.tr $ns trace-queue $source $dest $trace_file...... close $trace_file set trace_file [open traccia.tr r] creazione del file traccia.tr con trace-queue chiusura del file a fine simulazione e apertura in lettura per leggere i risultati, 20
La classe TRACE: formato del file Caratterizzato da un formato standard in cui si specifica: tipo di evento (ricezione, accodamento, trasmissione, scarto) istante in cui si verifica l evento nodo sorgente e nodo destinazione tipo di pacchetto dimensione flag per utilizzi specifici (collegamenti wireless, etc,...) identificativo di flusso identificativo univoco di pacchetto numero di sequenza + La classe TRACE: esempio di file trace 21
La classe MONITOR: generalità Permette di costruire oggetti in grado di monitorare alcune grandezze (variabili di stato) di utilità per l analisi dei risultati di simulazione size_ 5. pkts_ 55 5 parrivals_ 55 barrivals_. pdepartures_ 55 pdrops_ 55 5 Consente anche di specificare l intervallo di campionamento delle variabili monitorate 0.1 sec di default La classe MONITOR: esempio Monitoraggio dello stato della coda posta fra due nodi (n1 ed n2): set queue1_2 [$ns monitor-queue $n1 $n2 [$ns get-nstraceall]] queue1_2puntatore all oggetto MONITOR $ns get-ns-traceall: comando per definire il puntatore ai dati 22