This shows you the differences between two versions of the page.
isrm:laboratoare:01 [2016/09/28 21:08] dragos.niculescu |
isrm:laboratoare:01 [2016/10/05 12:46] (current) dragos.niculescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Laboratorul 1 ==== | ==== Laboratorul 1 ==== | ||
- | == Ne jucăm! == | + | Citim tutoriale și rulăm exemple. Textul de mai jos este bazat pe ghidul [[ http://nile.wpi.edu/NS/ | NS by example ]] de J. Chung și M. Claypool. |
- | [[ http://www.medcalf.com/games/cisco_games/game_page.html?userName=Melissa&game=wireless | Wireless Explorer ]] doar câteva nivele LOL. | + | |
- | + | ||
- | În continuare, citim tutoriale și rulăm exemple. Textul de mai jos este bazat pe ghidul [[ http://nile.wpi.edu/NS/ | NS by example ]] de J. Chung și M. Claypool. | + | |
== Introducere în ns2 == | == Introducere în ns2 == | ||
Line 67: | Line 64: | ||
$ns color 1 Blue | $ns color 1 Blue | ||
$ns color 2 Red | $ns color 2 Red | ||
+ | |||
+ | #Open the NAM trace file | ||
+ | set nf [open out.nam w] | ||
+ | $ns namtrace-all $nf | ||
+ | |||
+ | #ns trace file | ||
+ | set tracefd [open simple.tr w] | ||
+ | $ns use-newtrace | ||
+ | $ns trace-all $tracefd | ||
+ | |||
#Create four nodes | #Create four nodes | ||
Line 119: | Line 126: | ||
$cbr set rate_ 1mb | $cbr set rate_ 1mb | ||
$cbr set random_ false | $cbr set random_ false | ||
- | |||
- | #Open the NAM trace file | ||
- | set nf [open out.nam w] | ||
- | $ns namtrace-all $nf | ||
#Define a 'finish' procedure | #Define a 'finish' procedure | ||
Line 186: | Line 189: | ||
* ''$ns at time “string”'' Această funcție programează executarea șirului specificat la un moment de simulare. De exemplu, ''$ns at 0.1 "$CBR start"'' va face scheduler-ul să apeleze o funcție membru de start al obiectului ''$CBR'' la momentul ''0.1s''. În NS-2, o sursă de trafic nu transmite date reale, ci notifică agentul care de la baza o anumită cantitate de date, iar agentul, creează pachete și le trimite în mod fidel implementărilor din kernel, **considerând un CPU cu viteză infinită**. | * ''$ns at time “string”'' Această funcție programează executarea șirului specificat la un moment de simulare. De exemplu, ''$ns at 0.1 "$CBR start"'' va face scheduler-ul să apeleze o funcție membru de start al obiectului ''$CBR'' la momentul ''0.1s''. În NS-2, o sursă de trafic nu transmite date reale, ci notifică agentul care de la baza o anumită cantitate de date, iar agentul, creează pachete și le trimite în mod fidel implementărilor din kernel, **considerând un CPU cu viteză infinită**. | ||
- | După ce sunt efectuate toate specificațiile de configurare a rețelei, programarea și procedura de post-simulare, singurul lucru rămas este de a rula simulare. Acest lucru se face prin ''$ns run''. | + | După ce s-au efectuat toate specificațiile de configurare a rețelei, specificat procedura post-simulare, singurul lucru rămas este rularea propriu-zisă. Acest lucru se face cu funcția ''$ns run''. |
- | * La rularea cu ''ns ./ns-simple.tcl'' , se execută scriptul care generează "filmul simulării" out.name, și se lansează animatorul ''nam''. Rulați slide-ul în animator pentru a accelera filmul, observați transferul pachetelor și comportarea cozii din nodul 2 | + | * La rularea din shell ''ns ./ns-simple.tcl'', se execută simularea și se generează "filmul simulării" out.nam, apoi se lansează animatorul ''nam''. Rulați slide-ul în animator pentru a accelera filmul, observând transferul pachetelor și comportarea cozii din nodul 2. |
== Trasarea unui grafic == | == Trasarea unui grafic == | ||
ns2 permite implementarea cu ușurință a procedurilor specializate de generare de loguri. Aceste proceduri sunt apelate periodic în timpul simulării și permit adresarea tuturor datelor specifice nodurilor, fluxurilor, cozilor, și ale celorlalte entități din rețea. | ns2 permite implementarea cu ușurință a procedurilor specializate de generare de loguri. Aceste proceduri sunt apelate periodic în timpul simulării și permit adresarea tuturor datelor specifice nodurilor, fluxurilor, cozilor, și ale celorlalte entități din rețea. | ||
- | În partea de final a scriptului de mai sus, inserați codul următor. Apelată periodic, această procedură contorizează numărul de octe ți primiți de destinația UDP, și numărul de octeți confirmați la sursa TCP. În acest mod, se poate calcula debitul obținut de cele două fluxuri pe intervale fixe de timp. Cele două valori sunt stocate periodic într-un fișier text ''out.tr''. | + | În partea de final a scriptului de mai sus, inserați patch-ul următor. Apelată periodic, această procedură contorizează numărul de octe ți primiți de destinația UDP, și numărul de octeți confirmați la sursa TCP. În acest mod, se poate calcula debitul obținut de cele două fluxuri pe intervale fixe de timp. Cele două valori sunt stocate periodic într-un fișier text ''out.tr''. |
<file tcl> | <file tcl> | ||
#Open a trace file | #Open a trace file | ||
Line 230: | Line 233: | ||
</file> | </file> | ||
În plus, înainte de a demara simularea, trebuie să armăm procedura record cu ''$ns at 0.0 "record"''. | În plus, înainte de a demara simularea, trebuie să armăm procedura record cu ''$ns at 0.0 "record"''. | ||
- | După execuția scriptului, se vor lansa automat atât fereastra animatorului, cât și o fereastră gnuplot care afișează conținutul fișierului trace ''out.tr'' | + | După execuția scriptului, se vor lansa automat atât fereastra animatorului, cât și o fereastră gnuplot care afișează conținutul fișierului trace ''out.tr''. {{ :isrm:laboratoare:01:lab1-gnuplot.png?nolink&300 |}} |
+ | |||
+ | == Task-uri == | ||
- examinați cu editorul de text conținutul fișierelor ''out.nam'' și ''out.tr'' | - examinați cu editorul de text conținutul fișierelor ''out.nam'' și ''out.tr'' | ||
- Ce reprezintă axele x, y? Explicați comportarea graficelor. | - Ce reprezintă axele x, y? Explicați comportarea graficelor. | ||
- Măriți coada de la link-ul bottleneck la 100. Cum explicați noua comportare? | - Măriți coada de la link-ul bottleneck la 100. Cum explicați noua comportare? | ||
- Coada aruncă pachete TCP în mod disproporționat. De ce? Folosiți o coadă SFQ pentru a remedia situația. | - Coada aruncă pachete TCP în mod disproporționat. De ce? Folosiți o coadă SFQ pentru a remedia situația. | ||
+ | - În prezent se măsoară debitul la fiecare 250ms. Experimentați cu diverse rezoluții de măsurare în funcția "record". | ||
+ | - **Facultativ**: monitorizarea cozii ([[http://www.mathcs.emory.edu/~cheung/Courses/558-old/Syllabus/90-NS/trace.html#QMon| formatul ]] trace-ului queue) | ||
+ | <code tcl> | ||
+ | set qfile [$ns monitor-queue $n2 $n3 [open queue.tr w] 0.1] | ||
+ | [$ns link $n2 $n3] queue-sample-timeout | ||
+ | </code> | ||
+ | |||
+ | |||
+ | == Ne jucăm! == | ||
+ | [[ http://www.cisco.com/E-Learning/prod/curriculum/cco_tdo_ldd/demos/DandEguideSPN/SpaceGame/remote.html | Wireless Explorer ]] câteva nivele LOL. | ||
+ | |||