deisnet.deis.unibo.itdeisnet.deis.unibo.it/Didattica/CorsiBO/RetiTeletM/Lucidi_OLD/Lab... · 1 IC3N...
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