This is an old revision of the document!


Laboratorul 2

Introducere în gnuplot
  • 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
      plot 'out.tr' using 1:2 t "TCP" with lp, \
           'out.tr' using 1:3 t "UDP" with lines lw 3
      set xlabel 'Time[s]'
      set ylabel 'Bandwidth[Mbps]'
      set grid ytics
      set term png
      set out 'lab02bw.png' 
      replot
      save 'lab02bw.plot'  # se va putea reface graficul cu gnuplot ./lab02bw.plot

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.
  • În cazul cel mai des întâlnit, se specifică un program care este rulat succesiv pentru fiecare linie de intrare:
    cat trace.out | awk '{print $2}'

    afișează coloana a doua a fiecărei linii. De exemplu, pentru acest fișier:

    trace.out
    10 2    0.2
    11 3 0.3
    12 2 0.2
     
    13 3 0.1
    14 4 0.05 
  • cat trace.out | awk '{print $1+$2, $2 $3, i++;}'

    produce

    12 20.2 0
    14 30.3 1
    14 20.2 2
    0  3
    16 30.1 4
    18 40.05 5 
  • Din acest exemplu se observă că:
    • caracterul $ trebuie protejat de shell 
       * separatorul implicit este (tab|spațiu)+
       * variabilele sunt inițializate la 0, și își păstrează valoarea de la o linie la alta
       * câmpurile inexistente ale unei linii sunt șirul vid 
       * tipurile sunt slabe - int, float, string, din context  
       * 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>
12 2 0.2
13 3 0.1
5 0.17 </code> 
    * Din acest exemplu se observă că:
      * există variabile predefinite NF= number of fields(each line); NR=number of records; $0 = toată linia
    • se pot rula mai multe programe per linie, dacă sunt activate de condiții logice/regex. Pentru o linie se execută TOATE programele care se pot activa.
    • există secțiunea BEGIN{} care se rulează o singură dată înainte de input, și END{} la sfârșit
    • sunt disponibile multe funcții de bibliotecă: printf, sqrt, substr, xor - vedeți man awk
  1. Exercițiul 2: În laboratorul 1, folosiți
    $tcp attach [open tcp.tr w]
    $tcp trace cwnd_
    $tcp trace rtt_ 

pentru a explora relația dintre lungimea cozii la bottleneck (link n2 n3), RTT-ul perceput de TCP, și fracțiunea de debit obținută în concurență cu UDP.

  • Rulați pentru valori ale cozii: 5, 15, 50
  • De ce debitele obținute nu sunt stabile?
  • De ce apar debite UDP mai mari ca 1Mbps?
  • Care este relația dintre RTT și debite?
ns-2 wireless

Citiți Marc Greis tutorial secțiunea IX .

  • formatul fișierului trace ( cu $ns_ use-newtrace)
  • Exemple de linii din trace:
    r -t 0.016905500 -Hs 1 -Hd -2 -Ni 1 -Nx 0.00 -Ny 75.00 -Nz 0.00 -Ne -1.000000 -Nl MAC -Nw --- -Ma 0 -Md 1 -Ms 0 -Mt ACK 
    d -t 1.804824308 -Hs 2 -Hd 2 -Ni 2 -Nx 75.00 -Ny 0.00 -Nz 0.00 -Ne -1.000000 -Nl MAC -Nw COL -Ma 13a -Md 2 -Ms 0 -Mt cbr -Is 0.0 -Id 2.1 -It cbr -Il 1590 -If 0 -Ii 144 -Iv 32 -Pn cbr -Pi 34 -Pf 0 -Po 0
  • Fiecare linie descrie un eveniment de trimitere, primire, dirijare, sau dropare a unui pachet. Câmpurile cele mai importante dintr-o linie a fișierului trace sunt:
    s: Send
    r: Receive
    d: Drop
    f: Forward 
    
    -t 	double 	Time (* For Global Setting)
    -Ni 	int 	Node ID
    -Nx 	double 	Node X Coordinate
    -Ny 	double 	Node Y Coordinate
    -Nz 	double 	Node Z Coordinate
    -Ne 	double 	Node Energy Level
    -Nl 	string 	Network trace Level (AGT, RTR, MAC, etc.)
    -Nw 	string 	Drop Reason
    -Hs 	int 	Hop source node ID
    -Hd 	int 	Hop destination Node ID, -1, -2
    -Ma 	hexadecimal	Duration
    -Ms 	hexadecimal	Source Ethernet Address
    -Md 	hexadecimal	Destination Ethernet Address
    -Mt 	hexadecimal	Ethernet Type
    -P 	string 	Packet Type (arp, dsr, imep, tora, etc.)
    -Pn 	string 	Packet Type (cbr, tcp) 
    -Ps     sequence number (pentru tcp, coloana 47)
  1. Exercițiul 3: modificați simple-wireless.tcl din Marc Greis sec IX pentru
    • a monitoriza evenimentele de la nivelele 2 și 3
    • a avea o coadă de doar 10 pachete în interfața wireless
    • calculați numărul de cadre de date(tcp)pierdute de fiecare nod la nivelul 2 - MAC 1)
    • calculați numărul de cadre de date(tcp)pierdute de fiecare nod la nivelul 3 - IFQ 2)
    • justificați diferențele 3)
    • comparați pierderile între pachetele tcp și ack 4)
    • comparați pierderile între cadrele ACK și RTS 5)
    • justificați diferențele
  2. dezactivați RTS/CTS folosind
    Mac/802_11 set RTSThreshold_    3000

    și comparați performanța TCP cu cazul precendent. Sugestie: plotați evoluția în timp a numerelor de secvență 6)

    •  cat simple.tr | grep '^r'  | grep AGT | grep tcp | grep -v ack | awk '{print $3, $47}' 
1) cat simple.tr | grep '^d' | grep MAC | grep 'tcp' | grep -v 'ack' | wc -l
2) cat simple.tr | grep '^d' | grep IFQ | grep 'tcp' | grep -v 'ack' | wc -l
3) atenție, avem cadre ACK, tcp fără ack , tcp și ack. ACK sunt confirmări 802.11, ack sunt confirmări TCP. Se pierd 11 cadre TCP/date (linii cu tcp, dar fără ack) la nivelul 2, și 83 sunt aruncate din coadă. Dacă destinația nu mai răspunde în aer, 802.11 ajunge la maximum retries, apoi trece la următorul pachet. TCP însă nu trece mai departe după pierdere. Când destinația iese din zona de comunicare, TCP continuă să trimită deoarece are fereastră suficientă, și se pierde din coadă.
4) un ack se generează ca răspuns la un tcp. Dacă tcp sunt pierdute la transmisie (coadă sau aer), se generează mai puține ack
5) 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.
6) 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.1475163107.txt.gz · Last modified: 2016/09/29 18:31 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