Professional Documents
Culture Documents
Upute Za Rad Sa Simulatorom NS2
Upute Za Rad Sa Simulatorom NS2
Upute Za Rad Sa Simulatorom NS2
Zavod za telekomunikacije
Simulator NS2
Upute za rad
željko ilić
1. Opis rada u simulatoru NS2
1
analiza
Tcl prevoditelj sa OO rezultata
ekstenzijom
Otcl skripta
Biblioteka NS rezultati
simulacijskog simulatora simulacije
programa
objekt rasporeda
događaja
objekt mrežne grafički
komponente prikaz u
pomoćni moduli za NAM-u
postavljanje mreže
(plumbing modules)
2
1.2. C++ i OTcl
3
mnogo puta u sekundi, tada je bolje taj dio koda prebaciti u C++.
Raspored
ns - 2
događaja
tclcl
komponenta
Otcl
Mrežna
Tcl
8.0
Postoji još jedan bitan razlog zbog kojeg je NS napisan u dva programska jezika. NS
odvaja implementaciju podatkovnog puta od implementacije kontrolnog puta. Da bi smanjio
vrijeme procesiranja paketa i samih događaja (to nije vrijeme simulacije), raspored događaja i
osnovni objekti mrežnih komponenti na podatkovnom putu napisani su i prevedeni koristeći
C++. Ovi prevedeni objekti su napravljeni dostupnim Otcl prevoditelju kroz OTcl spoj, koji
pravi podudarajuće OTcl objekte za svaki od C++ objekata te pravi kontrolne funkcije i
konfiguracijske varijable. One su specificirane C++ objektom djelujući kao pripadajuće
funkcije i pripadajuće varijable (member variables) odgovarajućeg OTcl objekta. Na ovaj
način, kontrole C++ objekata su dane Otcl-u. Također je moguće dodati pripadajuće funkcije i
varijable u C++ te ih povezati s OTcl objektima.
Objekti u C++ koji ne trebaju bit kontrolirani u simulaciji ili objekti koji su korišteni
od drugih objekata ne trebaju bit povezani s Otcl-om. Isto tako, objekt može biti cjelokupno
implementiran u Otcl-u. Slika (Slika 1.2) prikazuje općenitu arhitekutru NS-a. Na ovoj slici
korisnik može zamisliti da stoji u donjem lijevom kutu i da može oblikovati i pokretati
simulacije u Tcl-u koristeći objekte simulatora u Otcl biblioteci. Raspored događaja i većina
mrežnih komponenti su implementirani u C++ i dostupni su OTcl preko OTcl spone koja je
implementirana koristeći tclcl. Cijela stvar skupa čini NS, koji je Tcl prevoditelj s objektno
orijentiranim proširenjem, te koji sadrži biblioteke funkcija mrežnog simulatora.
4
1.3. Opis osnovnih kodnih linija
Ovaj dio poglavlja sažeto ispituje glavnu strukturu i arhitekturu NS-a. Kako je
prikazano na slici (Slika 1.1), kada je simulacija završena, NS generira jednu ili više izlaznih
tekstualnih datoteka koje sadrže detaljne podatke simulacije, ako je tako navedeno u ulaznoj
OTcl skripti. Podaci se mogu koristiti za analize simulacija ili kao ulazni podaci za grafičko
simulacijski alat Network Animator (NAM) koji je razvijen kao dio VINT projekta. Kako je
prethodno navedeno, NS je, najjednostavnije rečeno, OTcl prevoditelj s bibliotekom objekata
za mrežnu simulaciju. Da bi se NS mogao što bolje iskoristiti, važno je dobro znati
programirati u Otcl-u. U nastavku su objašnjene osnovne zamisli i naredbe za programiranje u
Otcl-u.Također za detaljne simulacije potrebno je poznavanje programskog jezika C (C++).
Pobliže će se objasniti osnovne naredbe Tcl skripte među kojima i naredbe koje
prikazuje kako kreirati proceduru i pozvati je, kako pridjeliti vrijednosti varijablama i kako
napraviti petlju. Poznavajući da je OTcl objektno orijentirana ekstenzija Tcl-a, očigledno je da
sve Tcl naredbe rade na Otcl-u (veza između Tcl-a i Otcl-a je jednaka kao i veza između
jezika C i C++). Za pokretanje Tcl skripte u komandnom promptu (>>) treba utipkati >>"ns
ime_datoteke.tcl" i na taj način naredba "ns" pokreće NS (OTcl prevoditelj).
5
Povezuju objekte mrežnih komponenti koji su oblikovani (to čini naredbom
attach-agent);
Postavljaju parametre mrežnih komponenti (uglavnom za složene objekte);
Oblikuju veze između agenata (npr. prave vezu između agenata "tcp" and "sink");
Specificiraju opcije za prikaz u NAM-u;
Itd.
Većina pripadajućih funkcija služe za postavke simulacije (te funkcije su već prethodno
navedene kao plumbing funkcije) i za oblikovanje rasporeda, međutim neke od njih služe i za
prikazivanje u NAM-u.
$ns color fid color: služi za postavljanje boje paketa za tok specificiran s
identifikatorom toka (fid, flow id). Ova funkcija pridjeljivanja se koristi za prikaz u NAM-u i
nema nikakav utjecaj na trenutnu simulaciju. Vrijednost fid se navodi rednim brojem, dok se
vrijednost color navodi imenom boje.
$ns namtrace-all file-descriptor: Ova pripadajuća funkcija potiče simulator da
snima simulation traces u NAM ulaznom formatu. Također prethodna naredba daje ime
datoteke gdje će trace datoteka biti kasnije pospremljena sa naredbom $ns flush-trace.
Slično tomu, pripadajuće funkcija trace-all je za snimanje trace simulacije u općenitom
formatu.
proc finish {}: se poziva nakon što je simulacija gotova s naredbom $ns at time
"finish". U ovoj funkciji su specificirani procesi koji se događaju poslije simulacije.
set n0 [$ns node]: Pripadajuća funkcija node oblikuje čvor. Čvor u NS-u je složeni
objekt sačinjen od adrese i port classifier-a. Korisnik može oblikovati čvor, odvojeno
oblikujući adresu i port classifier objekte i povezujući ih jedne s drugim.
$ns duplex-link node1 node2 bandwidth delay queue-type: oblikuje
dva simplex linka sa karakterističnom širinom prijenosnog pojasa i kašnjenjem te povezuje
dva navedena čvora. U NS-u, izlazni spremnik čvora je implementiran kao dio linka, stoga
korisnici trebaju specificirati tip spremnika kada oblikuju link. Kao i čvor i link je složeni
objekt, te korisnik može oblikovati njegove pod-objekte i povezati njih i čvorove. Postoji
mogućnost ubacivanja modula sa gubicima kao komponente linka te se na taj način simulira
link sa gubicima (ustvari korisnik može napraviti bilo kakav mrežni objekt te ga ubaciti).
Detaljne upute mogu se pronaći u [14].
6
$ns queue-limit node1 node2 number: Ova linija koda postavlja veličinu
spremnika na linku koja povezuju čvor1 i čvor2 na određenu vrijednost. Vrijednost number se
navodi u broju paketa.
$ns duplex-link-op node1 node2 : Ova linija koda se koristi za prikaz u NAM-u.
Da bi se vidio efekt ovih naredbi, korisnik može komentirati ove linije i pokušati simulirati.
Sada kada su osnovne postavke mreže postavljene, treba postaviti prometne agente kao što su
TCP i UDP, prometne izvore kao što su FTP i CBR, i pridjeliti ih čvorovima i agentima.
set tcp [new Agent/TCP]: Ova linija koda pokazuje kako se oblikuje TCP agent.
Općenito, korisnik može bilo kojeg agenta prometnog izvora oblikovati na ovaj način. Agenti
i prometni izvori su u stvari osnovni objekti (nisu složeni objekti), uglavnom implementirani
u C++ i povezani s Otcl-om. Iz tog razloga ne postoje specifične pripadajuće funkcije objekta
Simulator koje oblikuju instance ovih objekata. Da bi korisnik oblikovao agente ili
prometne izvore, trebao bi znati imena klasa ovih objekata (Agent/TCP,
Agent/TCPSink, Application/FTP itd). Ove podatke korisnik može naći u [14].
$ns attach-agent node agent: attach-agent pripadajuće funkcije pridjeljuje
oblikovani objekt agenta objektu čvora. Ustvari, ova funkcija poziva attach pripadajuću
funkciju odabranog čvora, koja zatim pridjeljuje sama sebi dani agent. Na primjer, ako se
čvoru n0 želi pridjeliti agent TCP to se može napraviti na način $n0 attach $tcp. Analogno
agentima, pripadajuća funkcija attach-agent pridjeljuje objekte prometnih izvora objektu
čvora.
$ns connect agent1 agent2: Nakon što su oblikovana dva agenta koja će
komunicirati jedan s drugim, sljedeća stvar je uspostaviti logičku mrežnu vezu između njih.
Ova linija koda uspostavlja mrežnu vezu postavljajući odredišnu adresu za obje mreže i
adrese para portova. Pretpostavljajući da je sva mrežna konfiguracija napravljena, treba
napraviti simulacijski scenarij (simulacijski raspored događaja). Simulacijski objekt sadrži
mnogo dijelova funkcija raspoređivanja, međutim najčešće se koristi sljedeća:
$ns at time "string": Ova pripadajuća funkcija objekta Simulator pravi raspored
(scheduler_ je varijabla koja pokazuje na objekt za raspoređivanje) koji raspoređuje
izvršavanje određenog stringa u danom vremenu simulacije. Na primjer, $ns at 0.1
"$cbr start" će pokrenuti raspored koji poziva start pripadajuća funkcija objekta s
CBR prometnim izvorom, koji pokreće CBR da prenese podatke. U NS-u, uglavnom
prometni izvor ne prenosi stvarne podatke, ali zato obavještava određenog agenta da ima
određenu količinu podataka za prenijeti. Zatim agent, koji je obavješten o količini podataka
7
koju mora prenijeti, stvara pakete i šalje ih. Nakon što se postavi mrežna konfiguracija,
napravi raspored događaja i specificiraju procedure nakon završetka simulacije, posljednja
stvar koju treba napraviti je pokrenuti simulaciju. To se radi sa $ns run. Primjer prethodno
objašnjenih naredbi sa dodatnim komentarima naveden je ispod.
8
#Postavljanje TCP konekcije
set tcp [new Agent/TCP]
$tcp set class_ 2
$ns attach-agent $n0 $tcp
set sink [new Agent/TCPSink]
$ns attach-agent $n3 $sink
$ns connect $tcp $sink
$tcp set fid_ 1
9
1.4. Pokretanje NS-a i NAM-a
Smanji
Prostor
animacije
Povuci klizač na
određenu točku u
vremenu
Odredišna
Zastavice
segmenta
Odredišni
Izvorišna
događaja
događaja
Izvorišni
Veličina
Vrijeme
paketa
paketa
adresa
adresa
Vrsta
čvor
čvor
toka
Broj
Uglavnom, trace datoteka je generirana od strane NS-a. Kada se izgenerira trace datoteka,
ista je spremna za animaciju u NAM-u. Nakon pokretanja, NAM će pročitati trace datoteku,
10
oblikovati topologiju, otvoriti prozor za animaciju, izbaciti izlazne podatke ako je potrebno i
zaustaviti sa svim akcijama kada naiđe na prvi paket u trace datoteci. Kroz korisnikovo
sučelje, NAM omogućava kontrolu različitih pogleda animacije.
Čvor
Čvorovi su oblikovani iz 'n' trace događaja u trace datoteci. On predstavlja
izvor/korisnika/usmjeritelja te će NAM odrediti ako postoje udvostručene definicije za isti
čvor. Čvorovi mogu biti različitih oblika (krug, kvadrat i šesterokut), ali jednom kad se
oblikuju više ne mogu mjenjati svoj oblik. Također, čvorovi mogu biti različitih boja, ali
mogu mjenjati boje tijekom animacije.
Link
Linkovi su oblikovani između čvorova i na taj način formiraju mrežnu topologiju. NAM
linkovi su simplex iznutra, ali je to nevidljivo za korisnike. Trace događaj 'l' oblikuje dva
simplex linka i druge potrebne postavke te zbog toga za korisnike izgleda jednako kao duplex
link. Link može biti različitih boja te se te boje mogu mjenjati tokom animacije.
Spremnik
Spremik treba biti iskonstruiran u NAM-u između dva čvora. Slično linku, NAM spremnik je
pridjeljen simplex linku. Trace događaj 'q' samo oblikuje spremnik za simplex link. U NAM-
u, spremnici su vizualno prikazani kao paketi spremljeni na stogu. Paketi su stavljeni na stog
duž linije koja može biti pod različitim kutom u odnosu na horizontalnu liniju. Taj kut se
može postaviti u trace događaju 'q'.
Paket
Paket je vizualno prikazan kao blok sa strelicom. Smjer strelice pokazuje smjer toka paketa.
Paketi koji se nalaze u spremniku su prikazani kao mali kvadrati. Paket može biti odbačen iz
spremnika ili s linka. Odbačeni paketi prikazani su kao rotirajući kvadrati, koji nestaju na dnu
ekrana. Međutim, odbačeni paketi nisu vidljivi tijekom animacije unatrag.
11
Agent
Agenti se koriste da odvoje stanja protokola od samih čvorova. Oni se uvijek pridjeljuju
čvorovima. Svaki agent ima svoje ime, koje predstavlja jedinstveni identifikator za njega.
Agent je prikazan kao kvadrat sa svojim imenom unutar njega te je povezan s linijom prema
pridruženom čvoru.
Nakon što su objašnjeni svi gradivni blokovi i s kojim događajima se oni
inicijaliziraju, prikazan je primjer nekoliko redaka kojima se to postiže. Za lakše
razumijevanje korisno je pogledati sliku (Slika 1.4).
V -t * -v 1.0a5 -a 0
A -t * -n 1 -p 0 -o 0xffffffff -c 31 -a 1
A -t * -h 1 -m 2147483647 -s 0
c -t * -i 0 -n green
c -t * -i 1 -n red
n -t * -a 4 -s 4 -S UP -v circle -c black -i black
n -t * -a 0 -s 0 -S UP -v circle -c black -i black
n -t * -a 5 -s 5 -S UP -v circle -c black -i black
n -t * -a 1 -s 1 -S UP -v circle -c black -i black
n -t * -a 2 -s 2 -S UP -v circle -c black -i black
n -t * -a 3 -s 3 -S UP -v circle -c black -i black
l -t * -s 0 -d 2 -S UP -r 10000000 -D 0.005 -c black -o down-right
l -t * -s 1 -d 2 -S UP -r 10000000 -D 0.005 -c black -o up-right
l -t * -s 2 -d 3 -S UP -r 10000000 -D 0.005 -c black -o right
l -t * -s 3 -d 4 -S UP -r 5000000 -D 0.005 -c black -o right
l -t * -s 4 -d 5 -S UP -r 10000000 -D 0.005 -c black -o right
q -t * -s 3 -d 4 -a 0.5
+ -t 0 -s 1 -d 2 -p tcp -e 40 -c 1 -i 0 -a 1 -x {1.0 5.0 0 ------- null}
- -t 0 -s 1 -d 2 -p tcp -e 40 -c 1 -i 0 -a 1 -x {1.0 5.0 0 ------- null}
h -t 0 -s 1 -d 2 -p tcp -e 40 -c 1 -i 0 -a 1 -x {1.0 5.0 -1 ------- null}
12
2. Literatura
[1] D. McDysan. QoS & Traffic Management in IP & ATM Networks, 2000. McGraw Hill
1st ed.
[2] D. Comer. Internetworking with TCP/IP principles, protocols, and architectures, 2000.
Prentice Hall 4th ed. Vol 1.
[3] K. Nichols. Definition of the Differentiated Service Field (DS Field) in the IPv4 and IPv6
Headers, Dec 1998. Status: INFORMATIONAL. ftp://ftp.internetic.net/rfc/rfc2474.txt.
[4] S. Blake. An Arhitecture for Differentiated Services, Dec 1998. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc2475.txt
[5] D. Black. Per Hop Behavior Identification Codes, June 2001. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc3140.txt
[6] J. Heinanen. Assured Forwarding PHB Group, June 1999. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc2597.txt
[7] V. Jacobson. An Expedited Forwarding PHB, June 1999. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc2598.txt
[8] P. Almquist. Type of Service in the Internet Protocol Suite, July 1992. Status:
STANDARD. ftp://ftp.internetic.net/rfc/rfc1349.txt
[9] J. Heinanen. A Single Rate Three Color Marker, September 1999. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc2697.txt
[10] J. Heinanen. A Two Rate Three Color Marker, September 1999. Status: STANDARD.
ftp://ftp.internetic.net/rfc/rfc2698.txt
[11] The Network Simulator – NS-2, http://www.isi.edu/nsnam/ns
[12] M. Greis. Tutorial for the Network Simulator,
http://www.isi.edu/nsnam/ns/tutorial
[13] V. Matić. Svojstva govornog prometa u paketskim mrežama s razlučivim uslugama,
travanj 2002. Magistarski rad.
[14] Ns manual, http://www.isi.edu/nsnam/ns/doc/ns_doc.pdf
[15] IP QoS – A Bold New Network, white paper, Northern Telecom
[16] S. Floyd, V. Jacobson. Random Early Detection Gateways for Congestion Avoidance,
August 1993.
[17] Ns_by_Example, http://www.di.unito.it/~matteo/Reti0102/nsbyExamples.pdf
13