Differences

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

Link to this comparison view

isrm:laboratoare:04 [2019/03/12 23:10]
mbarbulescu [Modelul Two Ray Ground]
isrm:laboratoare:04 [2019/03/14 21:05] (current)
mbarbulescu [Taskuri]
Line 3: Line 3:
 ===== Materiale ajutătoare ===== ===== Materiale ajutătoare =====
  
-  * Pentru cei curioși, mai ales pentru matematica din spate recomandăm,​ pentru acest laborator, capitolul 2 din cartea [[http://​web.cs.ucdavis.edu/​~liu/​289I/​Material/​book-goldsmith.pdf|Wireless Communications - Andrea Goldsmith]]+  * Pentru cei curioși, mai ales pentru matematica din spaterecomandăm,​ pentru acest laborator, capitolul 2 din cartea [[http://​web.cs.ucdavis.edu/​~liu/​289I/​Material/​book-goldsmith.pdf|Wireless Communications - Andrea Goldsmith]] 
 +  * Celor curioși cu privire la bazele mecanismelor de retransmisie din TCP recomandăm [[http://​www.pcvr.nl/​tcpip/​tcp_time.htm|capitolul 21 din TCP Illustrated]]
  
 ===== Modelul Two Ray Ground ===== ===== Modelul Two Ray Ground =====
Line 30: Line 31:
  
 ===== Modelul Shadowing ===== ===== Modelul Shadowing =====
 +
 +Semnalul transmis printr-un canal wireless va experimenta variații aleatoare din cauza unor blocaje ale obiectelor aflate în calea semnalului. Puterea la receptor e influențată nu doar de distanță, dar și de obiectele întâlnite de semnal, unele fiind fixe altele mobile
 +(exemplu: Wi-Fi indoor: este influențat de pereți, mobilă și oamenii din cameră, care se mișcă). Modelarea unui astfel de canal folosește modele statistice pentru a caracteriza atenuarea unui semnal care ajunge la receptor. ​
 +
 +Ce arme are un transmițător la dispoziție pentru a combate acest fenomen:
 +  * puterea de transmisie (măsurată de obicei în ''​dbm''​ - în PCAP-uri Wifi sau ''​iwconfig''​ este ''​Tx Power''​)
 +  * MCS-ul de transmisie - cu cât e mai //prost// cu atât e mai robust la shadowing, dar penalizarea e de performanță (nu vei avea throughput mare cu MCS mic)
 +
 +<note tip>
 +Reamintim că MCS = modulation and coding scheme. Modulația definește modul de organizare a biților pe aer în simboluri pe aer (BPSK, QPSK, 16-QAM, 64-QAM) - a se citi //câți biți pot înghesui într-un simbol de date// și coding = tehnica de //codare// a datelor - cât de repede sau de încet se propagă datele astfel încât receptorul să poată decoda simbolurile de pe aer. Pentru a înțelege tehnica de //codare//: Imaginați-vă un curs în care profesorul vorbește foarte repede: pot toți studenții să îl urmărească?​
 +</​note>​
 +
 +Ce arme are un receptor la dispoziție pentru a combate acest fenomen:
 +   * AGC (automatic gain control)
 +   * capacitatea de a decoda un MCS mare (''​802.11ac''​ a introdus LDPC coding - o tehnică mai bună de codare a datelor decât cele tradiționale)
 +
 +Ce arme au atât transmițătorul cât și receptorul pentru a combate ambele fenomene: MIMO (Multiple Input, Multiple Output) - folosirea de mai multe antene la transmisie și recepție (la ''​802.11ac''​ avem un maxim de 4x4) și STBC (Space Time Block Coding) - o tehnică de a transmite mai multe copii a unui stream de date pe mai multe antene pentru a asigura fiabilitatea datelor transmise. Cele două capabilități sunt //​advertised//​ de AP (access point) în beacon iar stațiile îi transmit AP-ului dacă le au în cadrul probe request-ului. ​
 +
 +În ns-2:
  
 <​file>​ <​file>​
Line 48: Line 68:
  
 Se dă scriptul {{isrm:​laboratoare:​src:​shadow2.tcl| shadow2.tcl}} care folosește 802.11b, MCS=2Mbps cu modelul shadowing și definește următoarea topologie: ​ Se dă scriptul {{isrm:​laboratoare:​src:​shadow2.tcl| shadow2.tcl}} care folosește 802.11b, MCS=2Mbps cu modelul shadowing și definește următoarea topologie: ​
-S1--dist--D1 ...10000m ... S2--dist--D2. Scriptul acceptă parametrii -dist pentru a seta distanța sursă-destinație,​ și -tries pentru a seta numărul maxim de încercări. Cele două perechi nu se influențează reciproc din cauza distanței mari, iar S1->D1 folosește UDP, în timp ce S2->D2 folosește TCP. Practic se rulează două experimente pentru aceeași distanță de comunicare, si acelasi regim de retransmisii. Scriptul afișează debitul în bps obținut de cele 2 fluxuri, dar generează ​și fișierul shadow2.tr care poate fi analizat pentru a contoriza pachetele în diverse ​ipostaze+ 
 +<​file>​ 
 +S1--dist--D1 ...10000m ... S2--dist--D2. 
 +S1 = sursa 1, D1 = destinația 1, primește pachete doar de la S1 prin UDP 
 +S2 = sursa 2, D2 = destinația 2, primește pachete doar de la S2 prin TCP 
 +</​file>​ 
 + 
 +Scriptul acceptă parametrii ​''​-dist'' ​pentru a seta distanța sursă-destinație ​(în metri), și ''​-tries'' ​pentru a seta numărul maxim de încercări ​de transmitere a cadrului. Cele două perechi nu se influențează reciproc din cauza distanței mari, iar ''​S1->D1'' ​folosește ​**UDP**, în timp ce ''​S2->D2'' ​folosește ​**TCP**. Practic se rulează două experimente pentru aceeași distanță de comunicare, si acelasi regim de retransmisii. Scriptul afișează debitul în ''​bps'' ​obținut de cele 2 fluxuri și generează  ​fișierul ​''​shadow2.tr'' ​care poate fi analizat pentru a contoriza pachetele în diverse ​scenarii 
 + 
 +Exemplu de rulare: 
 + 
 +<code bash> 
 +student@isrm-vm:​~/​lab-04$ ns ./​shadow2.tcl -tries 4 -dist 100 
 +Starting Simulation... 
 +loss-monitor for flow 0 
 +nlost_ 568 
 +npkts_ 3155 
 +bytes_ 4669400 
 +lastPktTime_ 25.194375494945955 
 +expected_ 3723 
 +sending time : 25.0 
 + 
 +Throughput 0 1474016.0 bps 
 + 
 + 
 +loss-monitor for flow 2 
 +sending time: 25.0 lastack: 2413 srtt: 313 
 +datab: 3702560 ​ retr: 143080 
 +Throughput 2 1127353.6000000001 
 +</​code>​
  
 ===== Plan de organizare a datelor intermediare ===== ===== Plan de organizare a datelor intermediare =====
Line 86: Line 135:
     * tries=1 de ce TCP nu obține debit maxim, chiar în condiții optime (livrare 100%)?     * tries=1 de ce TCP nu obține debit maxim, chiar în condiții optime (livrare 100%)?
     * de ce scade capacitatea UDP când crește numărul de încercări?​ (({{:​isrm:​laboratoare:​04:​unq-sent.png?​direct&​200|}} ))     * de ce scade capacitatea UDP când crește numărul de încercări?​ (({{:​isrm:​laboratoare:​04:​unq-sent.png?​direct&​200|}} ))
 +
 +
 +===== Soluția laboratorului =====
   - Scripturile folosite și graficele obținute sunt disponibile în Media Manager/​[[http://​ocw.cs.pub.ro/​courses/?​tab_files=files&​do=media&​ns=isrm%2Flaboratoare%2F04| Rezultate]] ​   - Scripturile folosite și graficele obținute sunt disponibile în Media Manager/​[[http://​ocw.cs.pub.ro/​courses/?​tab_files=files&​do=media&​ns=isrm%2Flaboratoare%2F04| Rezultate]] ​
  
-<hidden>+Mai jos le aveti scrise: 
 + 
 +<spoiler>
 <​solution>​ <​solution>​
-Test cu tab de rezolvare +<code bash> 
-</solution>​ +#​!/​bin/​bash 
-</hidden>+
 +# acest script creează 2 fișiere de date: thr și pdr cu date în funcție ​de distanță (coloana 1) 
 +# thr conține pentru fiecare distanță debitul/throughput în Mbps obținut pentru tries=1,​4,​10 de TCP și UDP 
 +# pdr conține pentru fiecare distanță numărul de pachete primite/trimise de MAC, și unice primite/​trimise de MAC. 
 +#     ​fiecare grup de 4 numere este repetat pentru tries=1,​4,​10 
 +
 +# după rularea acestui script se rulează '​gnuplot shadow2.plot.txt'​ pentru a obține toate graficele 
 +#
  
 +d=50
 +echo "# dist UDP0 TCP0 UDP4 TCP4 UDP10 TCP10" > thr
 +echo "# dist (macrecv macsent unqsent unqrecv)0 (...)4 (...)10"​ > pdr
 +while [ $d -le 250 ]; do
 +    echo "$d "
 +    echo -n "$d " >> thr
 +    echo -n "$d " >> pdr
 +    tries=0
 +    for tries in 1 4 10; do
 + ns ./​shadow2.tcl -tries $tries -dist $d | grep Throughput | awk '​{udp=$3;​ getline; printf("​%5.3f %5.3f ", udp/1e6, $3/​1e6);​}'​ >> thr
 + macsent=$(cat shadow2.tr ​ | grep MAC | grep '​^s'​ | grep cbr | awk '$3 <= 25.0' |   wc -l)
 + macrecv=$(cat shadow2.tr ​ | grep MAC | grep '​^r'​ | grep cbr | awk '$3 <= 25.0' |   wc -l)
 + unqsent=$(cat shadow2.tr ​ | grep MAC | grep '​^s'​ | grep cbr | awk '$3 <= 25.0 {print $47}' | uniq -c| wc -l)
 + unqrecv=$(cat shadow2.tr ​ | grep MAC | grep '​^r'​ | grep cbr | awk '$3 <= 25.0 {print $47}' | uniq -c| wc -l)
 + echo -n "​$macrecv $macsent $unqsent $unqrecv " >> pdr
 + tries=$(($tries+1))
 +    done
 +    echo ""​ >> thr
 +    echo ""​ >> pdr
 +    d=$(($d+10))
 +done
 +</​code>​
 +
 +<code gnuplot>
 +set term png
 +set xlabel '​Distance[m]'​
 +set ylabel '​Throughput[Mbps]'  ​
 +set key left 
 +set grid 
 +set yrange [0:*]
 +set xtics 20 
 +set xrange [50:250]
 +set key top right 
 +
 +set out '​thr-udp.png'​
 +plot\
 + '​./​thr'​ using 1:2 t '​tries=1'​ w l lw 3, \
 + ''​ using 1:4 t '​tries=4'​ w l lw 3, \
 + ''​ using 1:6 t '​tries=10'​ w l lw 3
 +
 +
 +set out '​thr-tcp.png'​
 +plot\
 + '​./​thr'​ using 1:3 t '​tries=1'​ w l lw 3, \
 + ''​ using 1:5 t '​tries=4'​ w l lw 3, \
 + ''​ using 1:7  t '​tries=10'​ w l lw 3
 +
 +#######################################################​
 +#​probabilitatea de reușită în maximum r încercări
 +# unque_recv/​unique_sent ​
 +f(x)=1-(1-x)**r
 +
 +set ylabel '​PDR(packed delivery ratio)'  ​
 +set out '​mac-pdr.png'​
 +set key right top # bottom left
 +set xrange [*:300]
 +plot\
 + '​./​pdr'​ using 1:($5/$4) t '​simulation tries=1 (PHY)' w l lw 3, \
 + ''​ using 1:($9/$8) t '​simulation tries=4'​ w l lw 3, \
 + r=4 ''​ using 1:​(f($5/​$4)) t '​analysis tries=4'​ w p pt 5, \
 + ''​ using 1:​($13/​$12) ​ t '​simulation tries=10'​ w l lw 3, \
 + r=10 ''​ using 1:​(f($5/​$4)) ​ t '​analysis tries=10'​ w p pt 4
 +
 +set key left bottom
 +set ylabel '​Unique frames sent'
 +set out '​unq-sent.png'​
 +plot\
 + '​./​pdr'​ using 1:($4) t '​tries=1'​ w l lw 3, \
 + ''​ using 1:($8) t '​tries=4'​ w l lw 3, \
 + ''​ using 1:​($12) ​ t '​tries=10'​ w l lw 3
 +
 +set ylabel 'UDP Throughput [Mbps]'​
 +set out '​udp-cap.png'​
 +set key top
 +set xrange [0:1]
 +set xtics 0.1
 +set xlabel 'PHY delivery ratio'
 +
 +plot \
 + '​./​thr'​ using ($2/1.7):2 t '​tries=1'​ w l lw 3, \
 + '​./​thr'​ using ($2/1.7):4 t '​tries=4'​ w l lw 3, \
 + ''​ using ($2/1.7):6 t '​tries=10'​ w l lw 3
 +
 +set ylabel 'TCP Throughput [Mbps]'​
 +set key top left
 +set out '​tcp-cap.png'​
 +plot \
 + '​./​thr'​ using ($2/1.7):3 t '​tries=1'​ w l lw 3, \
 + '​./​thr'​ using ($2/1.7):5 t '​tries=4'​ w l lw 3, \
 + ''​ using ($2/1.7):7 t '​tries=10'​ w l lw 3
 +</​code>​
 +
 +Rularea laboratorului:​
 +
 +<code bash>
 +student@isrm-vm:​~/​lab-04$ chmod a+x run.sh
 +student@isrm-vm:​~/​lab-04$ ls
 +mac-pdr.png ​ pdr  run.sh ​ shadow2.plot.txt ​ shadow2.tcl ​ shadow2.tr ​ tcp-cap.png ​ thr  thr-tcp.png ​ thr-udp.png ​ udp-cap.png ​ unq-sent.png
 +student@isrm-vm:​~/​lab-04$ ./run.sh
 +student@isrm-vm:​~/​lab-04$ gnuplot shadow2.plot.txt
 +</​code>​
 +</​solution>​
 +</​spoiler>​
  
  
isrm/laboratoare/04.1552425016.txt.gz · Last modified: 2019/03/12 23:10 by mbarbulescu
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