Differences

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

Link to this comparison view

isrm:laboratoare:04 [2017/10/31 18:53]
dragos.niculescu [Taskuri]
isrm:laboratoare:04 [2019/03/14 21:05] (current)
mbarbulescu [Taskuri]
Line 1: Line 1:
-==== Laboratorul 4 ====+====== Laboratorul 4 ======
  
 +===== Materiale ajutătoare =====
  
-=== Modelul Two Ray Ground === +  * 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]] 
 +  * 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 ===== 
 + 
 +Aproximarea cea mai întâlnită pentru modelarea propagării semnalelor este folosirea așa numitelor //​ray-tracing techniques//​. Acestea implică aproximarea propagării undelor electromagnetice prin reprezentarea lor ca simple particule: ne interesează reflexia și refracția prin diverse obstacole (pereți, obiecte, indoor/​outdoor etc.). Cel mai simplu model este //two-ray ground// - acesta descrie propagarea semnalului atunci când avem o cale directă între transmițător și receptor, cunoscută sub numele de LOS (line of sight) și o cale e reflectată de //terenul de jos//. Figura de mai jos reprezintă două stații vorbind //​wireless//​ în aer cu //​two-ray//,​ unde ''​l''​ este line of sight (LOS) și ''​x''​ e semnalul reflectat 
 + 
 +{{:​isrm:​laboratoare:​tworay.png?​500|}} 
 + 
 +În ns2 - cercurile de comunicare și de CS sunt definite în putere(W), care corespunde unei distanțe(m):​
  
-Cercurile de comunicare și de CS sunt definite în putere(W), care corespunde unei distanțe(m).  ​ 
 <​file>​ <​file>​
 set opt(prop) Propagation/​TwoRayGround;​ set opt(prop) Propagation/​TwoRayGround;​
Line 11: Line 20:
 Phy/​WirelessPhy set CPThresh_ 10.0              ; #captura, în dB Phy/​WirelessPhy set CPThresh_ 10.0              ; #captura, în dB
 </​file>​ </​file>​
-În acest exemplu la 251m nu se primește nici un cadru, deși la 250m se primesc toate. Două noduri aflate sub 550m își cedează reciproc accesul când este cazul, adică nu-și sunt terminale ascunse unul altuia. Captura este atunci când într-o coliziune se poate recupera cadrul mai puternic, dacă acesta e cu 10dB mai puternic. ​  ​+În acest exemplu la 251m nu se primește nici un cadru, deși la 250m se primesc toate. Două noduri aflate sub 550m își cedează reciproc accesul când este cazul, adică nu-și sunt terminale ascunse unul altuia. Captura este atunci când într-o coliziune se poate recupera cadrul mai puternic, dacă acesta e cu 10dB mai puternic. 
 + 
 +Tot în exemplul de mai sus, cele trei variabile reprezintă 
 +  * CSThresh - carrier sense threshold - măsurat în ''​W''​ 
 +  * RXThresh - receiver sensitivity - măsurat în ''​W''​ 
 +  * CPThresh - capture threshold - adimensional,​ este un raport 
 +  * [[http://​disc.ece.illinois.edu/​downloads/​lab106.html|Sursa]]
  
 {{:​isrm:​laboratoare:​04:​tworay_prop_sim.png?​nolink|}} {{:​isrm:​laboratoare:​04:​tworay_prop_sim.png?​nolink|}}
  
-=== 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 34: 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. ​ 
  
-==== Plan de organizare a datelor intermediare ====+<​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 ​=====
   - citiți toate cerințele din secțiunea **Taskuri** de mai jos înainte de a decide un plan de măsurători. Strategia optimă este de a extrage mai mulți parametri în urma unei simulări pentru a putea răspunde mai multor cerințe. Exemple: apariții unice ale unui nr de secvență cbr la emisie/​recepție MAC, total cadre cu cbr emise/​primite la MAC, thruput UDP, thruput TCP, etc.  ​   - citiți toate cerințele din secțiunea **Taskuri** de mai jos înainte de a decide un plan de măsurători. Strategia optimă este de a extrage mai mulți parametri în urma unei simulări pentru a putea răspunde mai multor cerințe. Exemple: apariții unice ale unui nr de secvență cbr la emisie/​recepție MAC, total cadre cu cbr emise/​primite la MAC, thruput UDP, thruput TCP, etc.  ​
   - decideți structura fișierului text care va conține datele din care se pot produce graficele cerute.   - decideți structura fișierului text care va conține datele din care se pot produce graficele cerute.
Line 46: Line 109:
   - plotați interactiv datele intermediare. Unele grafice sunt o simplă dependență a două coloane (de exemplu Thruput(distanță)). Pentru combinații de coloane, gnuplot acceptă sintaxa ''>​ plot "​date"​ using 1:​($3*100.0/​$5) with ...''​ adică axa y este raportul coloanelor 3 și 5 în procente, iar axa x este coloana 1. Nu vă preocupați de partea estetică a graficelor (etichete, legendă, culori, etc).    ​   - plotați interactiv datele intermediare. Unele grafice sunt o simplă dependență a două coloane (de exemplu Thruput(distanță)). Pentru combinații de coloane, gnuplot acceptă sintaxa ''>​ plot "​date"​ using 1:​($3*100.0/​$5) with ...''​ adică axa y este raportul coloanelor 3 și 5 în procente, iar axa x este coloana 1. Nu vă preocupați de partea estetică a graficelor (etichete, legendă, culori, etc).    ​
  
-==== Taskuri ==== +===== Taskuri ​=====
   - analiză: dacă probabilitatea de livrare la nivel fizic este p, cât este la MAC, după r încercări?​ (( $PDR(p,r)= 1-(1-p)^r$ de ce?))      - analiză: dacă probabilitatea de livrare la nivel fizic este p, cât este la MAC, după r încercări?​ (( $PDR(p,r)= 1-(1-p)^r$ de ce?))   
   - plotați packet delivery ratio la nivel fizic (tries=1) și la nivel MAC (tries=4,​10) pentru distanțele 50m-250m (({{:​isrm:​laboratoare:​04:​mac-pdr.png?​direct&​200|}})). Comparați cu imaginea de mai sus care prezintă spațial probabilitatea de recepție ​   - plotați packet delivery ratio la nivel fizic (tries=1) și la nivel MAC (tries=4,​10) pentru distanțele 50m-250m (({{:​isrm:​laboratoare:​04:​mac-pdr.png?​direct&​200|}})). Comparați cu imaginea de mai sus care prezintă spațial probabilitatea de recepție ​
Line 72: 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]] ​
 +
 +Mai jos le aveti scrise:
 +
 +<​spoiler>​
 +<​solution>​
 +<code bash>
 +#!/bin/bash
 +#
 +# 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.1509468784.txt.gz · Last modified: 2017/10/31 18:53 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