Differences

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

Link to this comparison view

isrm:laboratoare:09 [2014/10/12 22:27]
dragos.niculescu
isrm:laboratoare:09 [2019/04/25 19:25] (current)
mbarbulescu
Line 4: Line 4:
 Scopul acestui laborator este de a înțelege conceptul de Carrier-Sensing în 802.11 și de a compara mecanismele fizic și virtual de a testa prezența purtătoarei. Scopul acestui laborator este de a înțelege conceptul de Carrier-Sensing în 802.11 și de a compara mecanismele fizic și virtual de a testa prezența purtătoarei.
  
-CS la nivel fizic este folosit atunci când un nod care vrea să transmită mai întâi evaluează starea canalului. Dacă energia detectată este peste un anumit prag, numit 'Carrier sense threshold', canalul este declarat ocupat, iar nodul trebuie să aștepte. Altfel, canalul este considerat liber, și nodul poate începe transmisia.+Carrier Sense la nivel fizic este folosit atunci când un nod care vrea să transmită mai întâi evaluează starea canalului. Dacă energia detectată este peste un anumit prag, numit **Carrier sense threshold**, canalul este declarat ocupat, iar nodul trebuie să aștepte. Altfel, canalul este considerat liber, și nodul poate începe transmisia. 
 + 
 +În contrast, CS virtual folosește indicațiile NAV (Network Allocation Vector) pentru a estima cât timp este mediul ocupat. În principiu, o stație recepționează toate cadrele, inclusiv cele care nu îi sunt adresate explicit. Fiecare cadru conține în câmpul **Duration** din antetul 802.11 o estimare a duratei conversației din care face parte. **Bibliografie pentru NAV**: Sec 7.5.1 din [[https://​wi-fi.cs.pub.ro/​~dniculescu/​didactic/​isrm/​doc/​%20Next%20Generation%20Wireless%20LANs_%20Throughput,​%20Robustness,​%20and%20Reliability%20in%20802.11n%20%5b2008%5d.pdf|Perahia - Next generation wireless]] 
 + 
 +Vedeți mai jos o captura a unui pachet wifi - unde vedem câmpul **Duration** 
 + 
 +{{ :​isrm:​laboratoare:​wifi-message-hi-2.png?​500 |}} 
 + 
 +Un mod explicit de rezervare a mediului se face prin intermefdiul pachetelor ''​RTS/​CTS''​. Emițătorul trimite RTS, iar receptorul răspunde cu CTS. În pașii 3 și 4 se transmit datele și confirmarea ACK în modul obișnuit. Diferența este acum că nodurile vecine au ocazia să estimeze durata conversației în 4 pași prin citirea câmpului **Duration** fie din RTS, fie din CTS. 
 + 
 +{{ :​isrm:​laboratoare:​rtscts.gif |}} 
 + 
 +Mai multe explicații despre RTS/CTS puteți citi: 
 +   * [[https://​mrncciew.com/​2014/​10/​26/​cwap-802-11-ctrl-rtscts/​|pe mrnccview]] 
 +   * Sec 7.5.1.1 RTS/CTS frame exchange din [[https://​wi-fi.cs.pub.ro/​~dniculescu/​didactic/​isrm/​doc/​%20Next%20Generation%20Wireless%20LANs_%20Throughput,​%20Robustness,​%20and%20Reliability%20in%20802.11n%20%5b2008%5d.pdf|Perahia - Next generation wireless]]
  
-În contrast, CS virtual folosește indicațiile NAV (Network Allocation Vector) pentru a estima cât timp este mediul ocupat. În principiu, o stație recepționează toate cadrele, inclusiv cele care nu îi sunt adresate explicit. Fiecare cadru conține în câmpul '​Duration'​ o estimare a duratei conversației din care face parte. Un mod explicit de rezervare a mediului se face prin intermefdiul pachetelor RTS/CTS. Emițătorul trimite RTS, iar receptorul răspunde cu CTS. În pașii 3 și 4 se transmit datele și confirmarea ACK în modul obișnuit. Diferența este acum că nodurile vecine au ocazia să estimeze durata conversației în 4 pași prin citirea câmpului '​Durata'​ fie din RTS, fie din CTS. 
 În ns2 se folosește următorul **pseudocod** pentru recepția cadrelor de la distanța d în condițiile în care mai poate apărea un cadru de la distanța d1: În ns2 se folosește următorul **pseudocod** pentru recepția cadrelor de la distanța d în condițiile în care mai poate apărea un cadru de la distanța d1:
-<​code>​+ 
 +<​code ​C>
 recepție(d) recepție(d)
  
Line 23: Line 37:
  
 == Instrucțiuni ns2 == == Instrucțiuni ns2 ==
-{{ :isrm:​laboratoare:​06:cs-1.gif?nolink|}} + 
-Pentru experimente se consideră topologia din dreapta. Nodul A transmite pachete cu flux constant CBR către nodul B, iar D transmite către C. Descărcați scriptul {{:​isrm:​laboratoare:​06:​twoflows.tcl |}} care primește următorii parametri:​ +<note important>​ 
-<​code>​ +Reminder de la [[isrm:​laboratoare:​04|laboratorul 4]]Variabilele din ''​ns-2'':​ 
-     ​ns twoflows.tcl -RTSthresh {RTS_Threshold} -CSthresh {carrier-sense threshold} -dist {x} -sendingRate {rate}+  * 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]] 
 + 
 +Simularea din acest laborator folosește propagarea Two-Ray ground: În ns2 - cercurile de comunicare și de carrier sense sunt definite în putere (măsurată în ''​W''​),​ care corespunde unei distanțe (în ''​m''​). 
 + 
 +</​note>​ 
 + 
 +Pentru experimente se consideră topologia din dreapta. Nodul A transmite pachete cu flux constant CBR către nodul B, iar D transmite către C. Descărcați scriptul {{:​isrm:​laboratoare:​src:​twoflows.tcl |}} care primește următorii parametri: 
 + 
 +<​code ​bash
 +ns twoflows.tcl -RTSthresh {RTS_Threshold} ​
 +     -CSthresh {carrier-sense threshold} ​
 +     -dist {x} 
 +     -sendingRate {rate}
 </​code>​ </​code>​
-Cadrele cu lungime mai mare decât RTSthresh vor folosi RTS/CTS. Prin setarea acestui parametru la o valoare mare (3000) se dezactivează RTS/CTS. Setând acest parametru la 1 garantează folosirea RTS/CTS pentru toate cadrele. În scriptul furnizat se folosesc parametrii CSThresh_ și RXThresh_ pentru nivelele de putere în wați pentru CS și recepție respectiv. Setările de bază în ns2 corespund la 250m pentru recepție, și 550m pentru CS. În acest laborator nu vom schimba nivelul pragului de recepție, ci doar pe cel de CS, folosind parametrul din linia de comandă. Astfel, CSThresh=250m corespunde dezactivării CS fizic. Pentru a obține nivelele de putere corespunzând diverselor distanțe, se poate folosi utilitarul + 
-<​code>​ +{{:​isrm:​laboratoare:​06:​cs-1.gif?​nolink|}} 
-    ​   ​/​opt/​ns/​ns-2.34/​indep-utils/​propagation/​threshold -m TwoRayGround [distanță_metri]+ 
 + 
 +Cadrele cu lungime mai mare decât RTSthresh vor folosi RTS/CTS. Prin setarea acestui parametru la o valoare mare (3000) se dezactivează RTS/CTS. Setând acest parametru la 1 garantează folosirea RTS/CTS pentru toate cadrele. În scriptul furnizat se folosesc parametrii ​''​CSThresh_'' ​și ''​RXThresh_'' ​pentru nivelele de putere în wați pentru CS și recepție respectiv. Setările de bază în ns2 corespund la 250m pentru recepție, și 550m pentru CS. În acest laborator nu vom schimba nivelul pragului de recepție, ci doar pe cel de CS, folosind parametrul din linia de comandă. Astfel, ​''​CSThresh=250m'' ​corespunde dezactivării CS fizic. Pentru a obține nivelele de putere corespunzând diverselor distanțe, se poate folosi utilitarul 
 + 
 +<​code ​bash
 +/​opt/​ns/​ns-2.34/​indep-utils/​propagation/​threshold -m TwoRayGround [distanță_metri]
 </​code>​ </​code>​
-cu modelul TwoRayGround și păstrând toți ceilalți parametri la valorile default. Unele dintre aceste valori sunt deja calculate în scriptul twoflows.tcl (sunt comentate). Nu folosiți -fr 2.4e9, întrucât TwoRayGround trece la Friis sub 235m (vezi /​opt/​ns/​ns-2.34/​mobile/​tworayground.cc). Pentru fiecare valoare CSThresh, rulați simularea dezactivând RTS/CTS pentru valori x=100m, 200m, 300m, si pentru fiecare valoare CSThresh corespunzătoare distanțelor 250m, 300m, 400m, 550m. Atenție, scriptul cere valoarea CSThresh în watți, nu în dBm, și nici în metri. ​+ 
 +cu modelul TwoRayGround și păstrând toți ceilalți parametri la valorile default. Unele dintre aceste valori sunt deja calculate în scriptul ​''​twoflows.tcl'' ​(sunt comentate). ​ 
 + 
 +<note warning>​ 
 +Nu folosiți ​''​-fr 2.4e9''​, întrucât TwoRayGround trece la Friis sub 235 m (vezi ''​/​opt/​ns/​ns-2.34/​mobile/​tworayground.cc''​).  
 +</​note>​ 
 + 
 +Pentru fiecare valoare ​''​CSThresh''​, rulați simularea dezactivând RTS/CTS pentru valori ​''​x=100m, 200m, 300m''​, si pentru fiecare valoare ​''​CSThresh'' ​corespunzătoare distanțelor 250m, 300m, 400m, 550m. Atenție, scriptul cere valoarea ​''​CSThresh'' ​în watți, nu în dBm, și nici în metri. ​
 $$ 1mW = 10^{-6}W\\ $$ 1mW = 10^{-6}W\\
 dBm = 10\log_{10}{mW} \\ dBm = 10\log_{10}{mW} \\
     mW =10^{\frac{dBm}{10}} $$     mW =10^{\frac{dBm}{10}} $$
  
-În utilitarul POSIX ''​bc'',​ aceste formule se pot exprima astfel: <​code>​ +În utilitarul POSIX ''​bc'',​ aceste formule se pot exprima astfel: ​ 
-$ dBm=24 + 
-$ mW=3.5*10^-7 ​# atenție: bc nu acceptă formatul IEEE 3.5e-7 acceptat de tcl/​C++ ​  +<​code ​bash
-$ echo "​e($dBm/​10*l(10))"​ | bc -l  +student@isrm-vm:​~$ dBm=24 
-  adică 24dBm = 1258.92mW (1.25892W) +# atenție: bc nu acceptă formatul IEEE 3.5e-7 acceptat de tcl/C++ 
-$ echo "​10*l($mW)/​l(10)"​ | bc -l +student@isrm-vm:​~$ mW=3.5*10^-7  
-  adică 3.5e-7mW = -64.5dBm  ​+student@isrm-vm:​~$ echo "​e($dBm/​10*l(10))"​ | bc -l  
 +adică 24dBm = 1258.92mW (1.25892W) 
 +student@isrm-vm:​~$ echo "​10*l($mW)/​l(10)"​ | bc -l 
 +adică 3.5e-7mW = -64.5dBm  ​
 </​code>​ </​code>​
 +
 +<note tip>
 +Alternativ puteți folosi acest [[https://​github.com/​yadox666/​dBm2mW|script Python]] pentru a converti dBm în mW și invers. ​
 +</​note>​
  
  ​Repetați toate experimentele și pentru cazul în care RTS/CTS este activat pentru toate cadrele. ​ Pentru fiecare situație, calulați debitul și numărul de pachete trimise/​primite la nivel UDP. Folosiți indicațiile din laboratorul precedent pentru a sintetiza aceste statistici din fișierul trace rezultat în urma simulării. Din comenzile folosite în laboratorul trecut:  ​Repetați toate experimentele și pentru cazul în care RTS/CTS este activat pentru toate cadrele. ​ Pentru fiecare situație, calulați debitul și numărul de pachete trimise/​primite la nivel UDP. Folosiți indicațiile din laboratorul precedent pentru a sintetiza aceste statistici din fișierul trace rezultat în urma simulării. Din comenzile folosite în laboratorul trecut:
    * numărul de pachete trimise la nivel UDP de către toate nodurile.    * numărul de pachete trimise la nivel UDP de către toate nodurile.
-     ''​cat fișier.tr | grep AGT | grep ^s |grep cbr | wc -l ''​+<code bash> 
 +cat fișier.tr | grep AGT | grep ^s |grep cbr | wc -l 
 +</​code>​
    * Pentru a obţine numărul de pachete primite, aveţi posibilitatea să utilizaţi o comandă similară:    * Pentru a obţine numărul de pachete primite, aveţi posibilitatea să utilizaţi o comandă similară:
-'' ​    cat fișier.tr | grep AGT | grep ^r |grep cbr | wc -l ''​+<code bash> 
 +cat fișier.tr | grep AGT | grep ^r |grep cbr | wc -l 
 +</​code>​
    * numărul de pachete trimise în mediu de către toate nodurile.    * numărul de pachete trimise în mediu de către toate nodurile.
-'' ​    cat fișier.tr | grep MAC | grep ^s |grep cbr | wc -l ''​+<code bash> 
 +cat fișier.tr | grep MAC | grep ^s |grep cbr | wc -l 
 +</​code>​
    * numărul global de pachete de date (CBR) care au intrat în coliziune.    * numărul global de pachete de date (CBR) care au intrat în coliziune.
-'' ​    cat fișier.tr | grep COL | grep ^d |grep cbr | wc -l ''​+<code bash> 
 +cat fișier.tr | grep COL | grep ^d |grep cbr | wc -l 
 +</​code>​
    * Deasemenea, calculați numărul de coliziuni pentru date și pentru non-date. De exemplu, pentru a calcula coliziunile cadrelor care nu conțin date (CBR), folosiți    * Deasemenea, calculați numărul de coliziuni pentru date și pentru non-date. De exemplu, pentru a calcula coliziunile cadrelor care nu conțin date (CBR), folosiți
-'' ​    cat fișier.tr | grep COL | grep ^d |grep -v cbr | wc -l ''​+<code bash> 
 +cat fișier.tr | grep COL | grep ^d |grep -v cbr | wc -l 
 +</​code>​ 
 Cumulați toate rezultatele fie în tabele, fie în grafuri cu bare. Încercați să explicați **fiecare** număr obținut. Cumulați toate rezultatele fie în tabele, fie în grafuri cu bare. Încercați să explicați **fiecare** număr obținut.
  
Line 63: Line 122:
 IEEE 802.11 se bazează în principal pe două mecanisme pentru a combate interferența:​ CS la nivel fizic și la nivel virtual. În ce măsură sunt capabile aceste mecanisme de a rezolva conflictele dintre stații aflate în diverse configurații geometrice? IEEE 802.11 se bazează în principal pe două mecanisme pentru a combate interferența:​ CS la nivel fizic și la nivel virtual. În ce măsură sunt capabile aceste mecanisme de a rezolva conflictele dintre stații aflate în diverse configurații geometrice?
 În ns-2, un cadru este recepționat corect atunci când nivelul interferenței de la alte cadre este sub 10dB. Folosind utilitarul În ns-2, un cadru este recepționat corect atunci când nivelul interferenței de la alte cadre este sub 10dB. Folosind utilitarul
-''/​opt/​ns/​ns-2.34/​indep-utils/​propagation/​threshold'',​ puteți calcula puterea recepționată la o anumită distanță. De exemplu, două cadre primite de la 200 metri și 200*sqrt(2) metri vor fi distruse, întrucât puterile sunt de 8.9e-10W respectiv 2.2e-10W. Pe de altă parte, dintre două cadre primite de la 200m și 360m, cel de la 200m va fi primit corect prin efectul de captură. La 355.7m avem exact 10dBm fata de 200m. Puteți folosi utilitare online pentru a lucra cu dBm.+''/​opt/​ns/​ns-2.34/​indep-utils/​propagation/​threshold'',​ puteți calcula puterea recepționată la o anumită distanță. De exemplu, două cadre primite de la 200 metri și ''​200*sqrt(2)''​ ($200 \cdot \sqrt{2}$) metri vor fi distruse, întrucât puterile sunt de ''​8.9e-10W'' ​respectiv ​''​2.2e-10W''​. Pe de altă parte, dintre două cadre primite de la 200m și 360m, cel de la 200m va fi primit corect prin efectul de captură. La 355.7m avem exact 10dBm fata de 200m. Puteți folosi utilitare online pentru a lucra cu dBm. 
 Teorema lui Pitagora Teorema lui Pitagora
-<​code>​ +<​code ​bash
-         ​echo "​sqrt(200^2 + 300^2)"​ | bc -l +echo "​sqrt(200^2 + 300^2)"​ | bc -l 
 </​code>​ </​code>​
 +
 Fiecare experiment este caracterizat de distanța x dintre nodurile B și D, și de distanța la care CS fizic este activ. Justificați valorile obținute pentru: debit, numărul de cadre trimise de MAC, numărul de coliziuni date, numărul de coliziuni non-date. Fiecare experiment este caracterizat de distanța x dintre nodurile B și D, și de distanța la care CS fizic este activ. Justificați valorile obținute pentru: debit, numărul de cadre trimise de MAC, numărul de coliziuni date, numărul de coliziuni non-date.
-        * Care este capacitatea maximă a canalului în pps (pachete/​sec),​ bps (biți/​sec)?​ +        * Care este capacitatea maximă a canalului în pps (pachete/​sec),​ bps (biți/​sec)? ​((Se rulează cu separare mare și CS la 250m, adică ''​-CSthresh 3.65262e-10 -dist 10000'',​ și rezultă o capacitate de 1.72Mbps pentru fiecare pereche în izolare. 720 pachete livrate pentru toata simularea de 5 duce la o capacitate de 144 pps, sau 1000/144 ~ 7ms / pachet. )) 
-        * Ce rată de transmisie folosiți pentru agentul UDP emitent? +        * Ce rată de transmisie folosiți pentru agentul UDP emitent? ​((1.72Mbps)) 
-        * În ce măsură schimbul RTS/CTS afectează capacitatea sistemului?​ +        * În ce măsură schimbul RTS/CTS afectează capacitatea sistemului? ​((RTS/CTS reduce capacitatea la 1.57Mbps datorită overhead-ului)) 
-        * Explicați ​*fiecarevaloare obținută. +        * Explicați fiecare valoare obținută. 
-           * x=100m CS=250m(inactiv). Ce debit total ați obținut? De ce nu este maxim? De ce nu este 0? +           * x=100m CS=250m (inactiv). Ce debit total ați obținut? De ce nu este maxim? ​((avem coliziuni, este terminal ascuns, cadrele sunt distruse în mod sistematic)) ​De ce nu este 0 ((datorită coliziunilor repetate, CW crește suficient de mult... la o valoare suficient de mare, cealaltă conversație va reuși să strecoare un pachet))
-           * x=100m CS=550m. Ce debit total ați obținut? De ce nu este maxim? De ce este exact ....? +           * x=100m CS=550m. Ce debit total ați obținut? De ce nu este maxim? De ce este exact ....? (( emițătorii sunt în CS, împart mediul în mod egal, fiecare obține 50%)) 
-           * x=200m CS=250m(inactiv). Ce diferență cantitativă este față de cazurile precedente? Dar calitativă?​ +           * x=200m CS=250m (inactiv). Ce diferență cantitativă este față de cazurile precedente? Dar calitativă?​ 
-           ​* ​ x=300m CS=400m. De ce există coliziuni?​ +           * x=300m CS=400m. De ce există coliziuni?​ 
-           ​* ​ Cu RTS: de ce exista cazuri in care mai avem coliziuni de date?+           * Cu RTS: de ce exista cazuri in care mai avem coliziuni de date? 
 +           * Atenție: sunt 3 geometrii (x=100, 200, 300) și 4 cercuri de CS (250/off, 300, 400, 500) - deci un total de 12 situații diferite. **Justificați fiecare valoare obținută**.
             ​             ​
         * Când este benefic CS virtual, și când CS fizic?         * Când este benefic CS virtual, și când CS fizic?
         * În unele situatii se foloseste atât CS fizic, cât și virtual. Puteți garanta evitarea completă a coliziunilor atunci când ambele mecanisme sunt activate?         * În unele situatii se foloseste atât CS fizic, cât și virtual. Puteți garanta evitarea completă a coliziunilor atunci când ambele mecanisme sunt activate?
-        * Găsiți un exemplu de inechitate (CSThresh=?,​ x=?, debit=?)+        * Găsiți un exemplu de inechitate (''​CSThresh''​=?, x=?, debit=?)
         * Refaceti xperimentele pentru cadre de dimensiune mica (32 de octeti). Ce se observa?         * Refaceti xperimentele pentru cadre de dimensiune mica (32 de octeti). Ce se observa?
         * Modificați topologia inițială pentru a avea A, B, C coliniare (D rămâne la fel). Rulați aceleași experimente și explicați coliziunile la RTS și la date.         * Modificați topologia inițială pentru a avea A, B, C coliniare (D rămâne la fel). Rulați aceleași experimente și explicați coliziunile la RTS și la date.
Line 89: Line 151:
 {{ :​isrm:​laboratoare:​06:​cs-2.gif?​nolink|}} {{ :​isrm:​laboratoare:​06:​cs-2.gif?​nolink|}}
  
-Distanțele AB, BC, AC, and CD sunt toate de 200m. Avem un obstacol între A și C care nu permite propagarea radio (greu de realizat în ns2, deoarece AD=346m). Care vor fi comportările celor două forme de CS în acest caz? Discutați fiecare schemă și estimați care se va comporta mai bine. Reminder1: ACK se transmite după SIFS de la primire cadru. Reminder2: Un cadru primit cu putere peste CSThresh, dar sub RXThresh va distruge recepția curentă, fără captură. ​+Distanțele AB, BC, AC, and CD sunt toate de 200m. Avem un obstacol între A și C care nu permite propagarea radio (greu de realizat în ns2, deoarece AD=346m). ​ 
 +Care vor fi comportările celor două forme de CS în acest caz? Discutați fiecare schemă și estimați care se va comporta mai bine.  
 + 
 +<note tip> 
 +  * Reminder1: ACK se transmite după SIFS de la primire cadru. ​ 
 +  * Reminder2: Un cadru primit cu putere peste ''​CSThresh''​, dar sub ''​RXThresh'' ​va distruge recepția curentă, fără captură. ​ 
 +</​note>​
  
  
 ((ACKNOWLEDGMENT:​ inspired by http://​www.crhc.illinois.edu/​wireless/​assignments/​simulations/​lab103.html)) ((ACKNOWLEDGMENT:​ inspired by http://​www.crhc.illinois.edu/​wireless/​assignments/​simulations/​lab103.html))
isrm/laboratoare/09.1413142062.txt.gz · Last modified: 2014/10/12 22:27 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