This is an old revision of the document!
Laboratorul 2
Introducere în gnuplot
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

3; n++} /1[2-3]/{print

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
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 ns2 wireless tutorial
Exemple de linii din trace cu newtrace:
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)
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 monitoriza evenimentele de la nivelele 2 și 4 (agent și MAC)
a avea o coadă de doar 10 pachete în interfața wireless
identificați în trace cadrele de tip CTS, ACK, ack, tcp.
la ce moment începe transferul propriuzis (nodurile sunt suficient de aproape pentru a schimba cadre)?
1)
Desenați o diagramă cu transferul unui segment TCP între noduri, indicând tipurile cadrelor/pachetelor.
calculați numărul de cadre de date(tcp)pierdute de fiecare nod la nivelul 2 - MAC
2)
calculați numărul de cadre de date(tcp)pierdute de fiecare nod la nivelul 3 - IFQ
3)
justificați diferențele
4)
comparați pierderile între pachetele tcp și ack
5)
comparați pierderile între cadrele ACK și RTS
6)
justificați diferențele
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ță 7)
cat simple.tr | grep '^r' | grep AGT | grep tcp | grep -v ack | awk '{print $3, $47}'
-