deisnet.deis.unibo.itdeisnet.deis.unibo.it/Didattica/CorsiBO/RetiTeletM/Lucidi_OLD/Lab... · 1 IC3N...

22
1 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

Transcript of deisnet.deis.unibo.itdeisnet.deis.unibo.it/Didattica/CorsiBO/RetiTeletM/Lucidi_OLD/Lab... · 1 IC3N...

1

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

2

����

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…)

3

���$

��� ���������� ��! ���"��#�� ������������

• 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)

���%

��� ���������� ��! ���"��#�� �������������

• 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

Lista Eventit0 :evento 0t1: evento 1t2: evento 2

......

......

......tn: evento n

Schedulerselect next event

event i Elaborazione

add new event

remove old event

Invocazione

4

���&

Il simulatore: ns2 – Network Simulator ver. 2

OTcl Script:Tcl interpreter

with OO extentionUser Space

Risultati.....•Event Scheduler objects

•Network component objects•Network setup Helping modules

User Space

OTCL:Il linguaggio di scripting Otcl è usato per eseguire i comandidell’utente, ovvero per descrivere lo scenario simulativoconfigurare la topologia di rete , nodi, canale , schedulare gli eventi

C++: Il linguaggio C++ è usato per implementare il simulatoreriproducendo il comportamento dei protocolli di rete

ns library

���'

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

5

���(

����� ���)� �����*���

• ns2 viene naturalmente installato su sistema operativo UNIX.

• È possibile installare NS2 anche su Windows appoggiandosisulla piattaforma Cygwin che simula l’ambiente Linux.

• Trovate tutto il materiale sul sitohttp://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)

6

���++

���� � -.�"� /����0���" 1

• Dopo aver installato cygwin (consigliabile installare l’ icona sulDesktop)

• 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).

7

���+�

�� �����*��� ������ � "���" /�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/ns-

allinone-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

8

���+$

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 putsputs $trace_file $<nome_variabile>

– Per chiudere il file si usa il comando close.close $trace_file

9

���+&

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 FORfor {set i 0} {$i < 100} {incr i} {

set v($i) [new vettore]

}

• Cicli WHILEwhile {$i < 100} {

set v($i) [new vettore]

incr i

}

• Istruzioni IFif {$i < 10} {

puts “ i is less than 10 "

}

10

���+(

2��������345� /%�%1

• Le procedure– facilitano la programmazione– permettono l’esecuzione di azioni ricorsive– caratterizzano il programma in blocchi logici– proc <nome> {p1…p2} {

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

11

����+

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:– SIMULATORLe classi che definiscono lo strato di rete:– NODE– LINK– ERROR MODELClasse de definisce lo strato di trasporto :– AGENTClasse che definisce le applicazioni:– APPLICATIONLe 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”

12

�����

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

13

����$

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 NODEfor {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_ �������������)��������5����� 5�������#�

����� ��������������������*���6�5���5��6���

ttl_ �������������)��������������������� ���������442�/4 ��4��2�1

drophead_

�������������)���� ���������������������� ������� 5����������55����� �����#

14

����&

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 ]

$ns simplex-link $node1 $node2 10Mb 1ms DropTail

$ns duplex-link $node3 $node4 100Mb 50ms DropTail

invocazione della classe simulator

creazione di 4 oggetti NODE attraverso il metodo “node”appartenente alla classe ns

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

1 2B=10Mb; d=1ms

3 4B=50Mb; d=50ms

15

����(

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

����,

• 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’agentricevitore (libera la memoria associata alla struttura dati del pacchetto)– AGENT NULL (scarto)– AGENT TCPSink (scarto +ACK)

La classe AGENT: generalità (2/2)

16

����+

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>

�����

8�����4-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• ....

17

�����

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”

node 1Link

Agent 11 1 1

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

18

����$

� ��������������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"

����%

2��5�� ��8992�-84�3������������������::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

19

����&

La classe ERRORMODEL: generalità

• Consente di riprodurre il verificarsi di errori a livello fisicoe/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

20

����(

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

set trace_file [open traccia.tr w]

$ns trace-queue $source $dest $trace_file

....

....

close $trace_fileset trace_file [open traccia.tr r]

creazione dei nodi sorgente, destinazione e del link fra essi

apertura in scrittura del file di trace traccia.tr

creazione del file traccia.tr con trace-queue

chiusura del file a fine simulazione e apertura in lettura per leggere i

risultati

21

����+

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

22

�����

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

• Consente anche di specificare l’intervallo di campionamento delle variabili monitorate – 0.1 sec di default

size_ � �� ����������5�������.��pkts_ �� ��������55�������5���parrivals_ �� ��������55����������barrivals_ �� �������.��������pdepartures_ �� ��������55�������� � pdrops_ �� ��������55����� 5�����

�����

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-ns-traceall]]

• queue1_2��puntatore all’oggetto MONITOR• $ns get-ns-traceall: comando per definire il puntatore ai dati