Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:02 [2018/01/19 16:04]
dragos.niculescu
isrm:laboratoare:02 [2019/02/28 20:45] (current)
mbarbulescu
Line 37: Line 37:
 </​file>​ </​file>​
 Poate fi plotat scriind: Poate fi plotat scriind:
-<​code>​+<​code ​gnuplot>
 set style line 1 lc rgb '#​0060ad'​ lt 1 lw 2 pt 7 ps 3.5 set style line 1 lc rgb '#​0060ad'​ lt 1 lw 2 pt 7 ps 3.5
 plot '​data1'​ with linespoints ls 1 plot '​data1'​ with linespoints ls 1
Line 82: Line 82:
  
 Și plotăm cu comenzile: Și plotăm cu comenzile:
-<​code>​+<​code ​gnuplot>
 # albastru: # albastru:
 set line style 1 lc rgb '# 0060ad'​ lt 1 lw 2 pt 7 ps 3.5 set line style 1 lc rgb '# 0060ad'​ lt 1 lw 2 pt 7 ps 3.5
Line 131: Line 131:
  
 Vom plota astfel: Vom plota astfel:
-<​code ​shell>+<​code ​gnuplot>
  set xrange [ -2 : 52 ]  set xrange [ -2 : 52 ]
  set yrange [ 0 : 0.12 ]  set yrange [ 0 : 0.12 ]
Line 158: Line 158:
 directă a datelor de intrare: directă a datelor de intrare:
  
-<​code ​shell>+<​code ​gnuplot>
  set yrange [ 0:120 ]  set yrange [ 0:120 ]
- plot '​battery.dat'​ using 1:​($2*1000):​($4*1000)\+ plot '​battery.dat'​ using 1:​($2*1000):​($3*1000)\
                     w yerrorbars ls 1                     w yerrorbars ls 1
 </​code>​ </​code>​
Line 168: Line 168:
  
 În ultimul grafic adăugăm date teoretice și o legendă: În ultimul grafic adăugăm date teoretice și o legendă:
-<code >+<​code ​gnuplot>
 # Legendă # Legendă
 set key at  50,112 set key at  50,112
Line 175: Line 175:
 # Curba teoretică # Curba teoretică
 P(x) = 1.53**2 * x/(5.67 + x)**2 * 1000 P(x) = 1.53**2 * x/(5.67 + x)**2 * 1000
-plot '​battery.dat'​ using 1:​($2*1000):​($4*1000) \+plot '​battery.dat'​ using 1:​($2*1000):​($3*1000) \
                     title "​Power"​ w yerr ls 2 , \                     title "​Power"​ w yerr ls 2 , \
       P(x) title '​Theory'​ w lines ls 1       P(x) title '​Theory'​ w lines ls 1
Line 190: Line 190:
  
   * Alte comenzi utile gnuplot:   * Alte comenzi utile gnuplot:
-<​code ​shell>+<​code ​gnuplot>
 set term png       # setează terminalul într-un format set term png       # setează terminalul într-un format
 set out '​file.png'​ # va plota într-un fisier set out '​file.png'​ # va plota într-un fisier
Line 203: Line 203:
  
  
-  * **Exercițiul 1** realizați folosind ''​gnuplot''​ graficul din laboratorul 1. Indicați semnificațiile axelor și legenda. Salvați imaginea în format ''​png/​svg'',​ și scriptul pentru restaurarea imaginilor. + **Exercițiul 1** realizați folosind ''​gnuplot''​ graficul din laboratorul 1. Indicați semnificațiile axelor și legenda. Salvați imaginea în format ''​png/​svg'',​ și scriptul pentru restaurarea imaginilor. 
-       * Exemplu<​code>​+       * Exemplu<​code ​gnuplot>
 plot '​out.tr'​ using 1:2 t "​TCP"​ with lp, \ plot '​out.tr'​ using 1:2 t "​TCP"​ with lp, \
      '​out.tr'​ using 1:3 t "​UDP"​ with lines lw 3      '​out.tr'​ using 1:3 t "​UDP"​ with lines lw 3
Line 218: Line 218:
 === 2. Introducere în awk === === 2. Introducere în awk ===
     * AWK (K vine de la Kernighan) este mic, simplu, și rapid, spre deosebire de perl sau python. Nu poți face tot ce faci în perl/​python,​ dar poți face foarte ușor multe taskuri de procesare de text. Are o sintaxă apropiată de C, dar preferă datele organizate pe coloane, ca foarte multe date în rețelistică:​ trace-uri de simulare, tcpdump, loguri, etc. Un mare avantaj este ca poate fi rulat direct de pe linia de comandă, fără a mai folosi un script separat - de multe ori apare într-un pipeline cu cat, sed, tr.      ​     * AWK (K vine de la Kernighan) este mic, simplu, și rapid, spre deosebire de perl sau python. Nu poți face tot ce faci în perl/​python,​ dar poți face foarte ușor multe taskuri de procesare de text. Are o sintaxă apropiată de C, dar preferă datele organizate pe coloane, ca foarte multe date în rețelistică:​ trace-uri de simulare, tcpdump, loguri, etc. Un mare avantaj este ca poate fi rulat direct de pe linia de comandă, fără a mai folosi un script separat - de multe ori apare într-un pipeline cu cat, sed, tr.      ​
-    * În cazul cel mai des întâlnit, se specifică un program care este rulat succesiv pentru fiecare linie de intrare: <​code>​cat trace.out | awk '​{print $2}'</​code>​ afișează coloana a doua a fiecărei linii. De exemplu, pentru acest fișier: <file txt trace.out>​+    * În cazul cel mai des întâlnit, se specifică un program care este rulat succesiv pentru fiecare linie de intrare: <​code ​awk>cat trace.out | awk '​{print $2}'</​code>​ afișează coloana a doua a fiecărei linii. De exemplu, pentru acest fișier: <file txt trace.out>​
 10 2    0.2 10 2    0.2
 11 3 0.3 11 3 0.3
Line 225: Line 225:
 13 3 0.1 13 3 0.1
 14 4 0.05 </​file>​ 14 4 0.05 </​file>​
-    * <​code>​cat trace.out | awk '​{print $1+$2, $2 $3, i++;​}'</​code>​ produce <​code>​+    * <​code ​awk>cat trace.out | awk '​{print $1+$2, $2 $3, i++;​}'</​code>​ produce <​code>​
 12 20.2 0 12 20.2 0
 14 30.3 1 14 30.3 1
Line 239: Line 239:
        * tipurile sunt slabe - int, float, string, din context  ​        * tipurile sunt slabe - int, float, string, din context  ​
        * spațiu este operator de concatenare pe stringuri        * spațiu este operator de concatenare pe stringuri
-    * <​code>​cat trace.out | awk 'NF==3 { s+=$3; n++} /​1[2-3]/​{print $0} END{print ​ n, s/​n}'</​code>​ produce <​code>​+    * <​code ​awk>cat trace.out | awk 'NF==3 { s+=$3; n++} /​1[2-3]/​{print $0} END{print ​ n, s/​n}'</​code>​ produce <​code>​
 12 2 0.2 12 2 0.2
 13 3 0.1 13 3 0.1
Line 250: Line 250:
  
 /​********************** /​**********************
-  - Exercițiul 2: Folosind <​code>​set qfile [$ns monitor-queue $n3 $n4  [open queue.tr w] 0.1]+  - Exercițiul 2: Folosind <​code ​tcl>set qfile [$ns monitor-queue $n3 $n4  [open queue.tr w] 0.1]
 [$ns link $n3 $n4] queue-sample-timeout;​ </​code>​ [$ns link $n3 $n4] queue-sample-timeout;​ </​code>​
  ​plotați dimensiunea în pachete cozii pe link-ul de ieșire [[http://​www.mathcs.emory.edu/​~cheung/​Courses/​558-old/​Syllabus/​90-NS/​trace.html#​QMon | Formatul]] fișierului queue.tr  ​  ​plotați dimensiunea în pachete cozii pe link-ul de ieșire [[http://​www.mathcs.emory.edu/​~cheung/​Courses/​558-old/​Syllabus/​90-NS/​trace.html#​QMon | Formatul]] fișierului queue.tr  ​
      * {{:​isrm:​laboratoare:​02:​lab02qsize.png?​300|}}      * {{:​isrm:​laboratoare:​02:​lab02qsize.png?​300|}}
 ************************/​ ************************/​
-  - **Exercițiul 2**: În laboratorul 1, folosiți <code tcl>$tcp attach [open tcp.tr w]+ 
 + **Exercițiul 2**: În laboratorul 1, folosiți <code tcl>$tcp attach [open tcp.tr w]
 $tcp trace cwnd_ $tcp trace cwnd_
 $tcp trace rtt_ </​code>​ $tcp trace rtt_ </​code>​
Line 266: Line 267:
  
  === 3. comenzi utile de shell ===   === 3. comenzi utile de shell === 
-  * <​code>​+  * bash face toate calculele pe integer. ​<​code ​bash>
 $ x=5  $ x=5 
 $ echo $(($x / 3)) $ echo $(($x / 3))
 1 1
 </​code>​ </​code>​
- +  ​* <​code ​bash>
-bash face toate calculele pe integer.  +
-  ​* <​code>​+
 $ awc() { awk "​BEGIN{print $*}"; } $ awc() { awk "​BEGIN{print $*}"; }
 funcția poate fi adăugata la .bashrc funcția poate fi adăugata la .bashrc
-echo "$x / 3"+awc "$x / 3"
 1.66667 1.66667
 </​code>​ </​code>​
-  * este necesar adesea să rulăm o buclă de pe linia de comandă <​code>​+  * este necesar adesea să rulăm o buclă de pe linia de comandă <​code ​bash>
 $for i in `seq 10 2 20`; do awc "$i / 10"; done  $for i in `seq 10 2 20`; do awc "$i / 10"; done 
 1 1
Line 290: Line 289:
 </​code>​ </​code>​
   * în multe cazuri se lucrează direct de la prompt pentru a pregăti datele de plotat ​   * în multe cazuri se lucrează direct de la prompt pentru a pregăti datele de plotat ​
-  * script one liner <color red>​**foarte des folosit în majoritatea laboratoarelor**</​color>,​ datele vor fi pe ecran și în fișierul "​out.a" ​ <​code>​+  * script one liner <color red>​**foarte des folosit în majoritatea laboratoarelor**</​color>,​ datele vor fi pe ecran și în fișierul "​out.a" ​ <​code ​bash>
 $ i=1; while [ $i -le 10 ]; do echo -n "$i "; ns ./​script.tcl -rate0 "​$(($i*100))Kbps"​| grep Throughput |head -n1 | awk '​{print $2}'; i=$(($i+1));​ done | tee ./​out.a ​ $ i=1; while [ $i -le 10 ]; do echo -n "$i "; ns ./​script.tcl -rate0 "​$(($i*100))Kbps"​| grep Throughput |head -n1 | awk '​{print $2}'; i=$(($i+1));​ done | tee ./​out.a ​
 1 505744.0 1 505744.0
Line 346: Line 345:
       * detaliu http://​www.isi.edu/​nsnam/​ns/​doc/​node186.html       * detaliu http://​www.isi.edu/​nsnam/​ns/​doc/​node186.html
  
-  - Exercițiul 3: modificați ''​simple-wireless.tcl''​ din Marc Greis sec IX pentru ​+ **Exercițiul 3**: modificați ''​simple-wireless.tcl''​ din Marc Greis sec IX pentru ​
     * a utiliza noul format de trace ( cu ''​$ns_ use-newtrace''​)     * a utiliza noul format de trace ( cu ''​$ns_ use-newtrace''​)
     * a monitoriza evenimentele de la nivelele 2 și 4 (agent și MAC)     * a monitoriza evenimentele de la nivelele 2 și 4 (agent și MAC)
Line 364: Line 363:
     * comparați pierderile între cadrele ACK și RTS (( ACK=0 pierderi, RTS=14 pierderi. Dacă nodurile sunt în apropiere, conversația RTS-CTS-Date-ACK se desfășoară cu bine, nu se pierd ACK-uri. La distanță mare, destinația nu răspunde la RTS, deci sunt pierdute, și nu se mai ajunge la ACK.))     * comparați pierderile între cadrele ACK și RTS (( ACK=0 pierderi, RTS=14 pierderi. Dacă nodurile sunt în apropiere, conversația RTS-CTS-Date-ACK se desfășoară cu bine, nu se pierd ACK-uri. La distanță mare, destinația nu răspunde la RTS, deci sunt pierdute, și nu se mai ajunge la ACK.))
     * justificați diferențele     * justificați diferențele
-  - dezactivați RTS/CTS folosind <​code>​Mac/​802_11 set RTSThreshold_ ​   3000</​code>​ și comparați performanța TCP cu cazul precendent. Sugestie: plotați evoluția în timp a numerelor de secvență ​  ((Numărul de secvență în timp este de fapt throughput. RTS-CTS introduce un overhead, de fapt timp pierdut, care duce la un throughput redus. ​)) + 
-    * <​code>​ cat simple.tr | grep '​^r' ​ | grep AGT | grep tcp | grep -v ack | awk '​{print $3, $47}' </​code>​ + ​**Exercițiu 4** dezactivați RTS/CTS folosind <​code>​Mac/​802_11 set RTSThreshold_ ​   3000</​code>​ și comparați performanța TCP cu cazul precendent. Sugestie: plotați evoluția în timp a numerelor de secvențăNumărul de secvență în timp este de fapt throughput. RTS-CTS introduce un overhead, de fapt timp pierdut, care duce la un throughput redus.  
-    * {{:​isrm:​laboratoare:​02:​lab02tcp_rts.png?​300|}} ​+   ​* <​code ​bash> cat simple.tr | grep '​^r' ​ | grep AGT | grep tcp | grep -v ack | awk '​{print $3, $47}' </​code>​ 
 +   ​* {{:​isrm:​laboratoare:​02:​lab02tcp_rts.png?​300|}} ​
isrm/laboratoare/02.1516370652.txt.gz · Last modified: 2018/01/19 16:04 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0