This shows you the differences between two versions of the page.
isrm:laboratoare:06 [2018/01/13 14:35] dragos.niculescu |
isrm:laboratoare:06 [2019/04/04 16:31] (current) mbarbulescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Laboratorul 6 și 7 ==== | ==== Laboratorul 6 și 7 ==== | ||
=== 802.11 Contention Window === | === 802.11 Contention Window === | ||
- | == Introducere == | + | |
+ | == Bibliografie recomandată == | ||
+ | |||
+ | * [[https://www.dropbox.com/s/tgx0f51lhezrzn5/Draft%20P802.11REVmc_D8.0.pdf?dl=0|Standardul IEEE 802.11]] - secțiunile 10.3, 10.3.2.1 - 10.3.2.5 | ||
+ | * [[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|Next Generation Wireless]] - secțiunea 7.3. | ||
+ | |||
+ | == Teorie/Recapitulare == | ||
+ | |||
+ | Protocolul CSMA/CA a fost conceput pentru a reduce probabilitatea coliziunii între mai multe stații care accesează mediul wifi, în punctul în care coliziunile pot să apară cel mai probabil. O dată ce mediul devine liber ("idle medium") și apoi devine imediat ocupat ("busy medium") - indicație obținută de la funcția CS (carrier-sense) avem o probabilitate ridicată de coliziune. Asta deoarece mai multe stații au așteptat ca mediul să fie liber. Această situație necesită o procedură de **random backoff** pentru a rezolva conflictele de acces la mediu: | ||
+ | |||
+ | {{:isrm:laboratoare:backoffprocedureperahia.png?700|}} | ||
+ | |||
+ | O stație care dorește să inițieze un transfer de cadre folosind DCF (Distributed Coordination Function) ca procedură de acces la mediu va folosi funcția de CS (carrier-sense) pentru a determina dacă mediul e //busy// sau //idle//. Dacă mediul e ocupat stația trebuie să aștepte ca mediul să fie liber pentru o perioadă egală cu DIFS (ultimul cadru a fost recepționat fără întrerupere de mediu) sau mediul a fost liber fără întrerupere pentru o perioadă egală cu EIFS. După DIFS sau EIFS, stația care vrea să transmită trebuie să genereze o perioadă de **random backoff** înainte de a își iniția transferul de cadru. Această perioadă e egală cu: | ||
+ | |||
+ | $BackoffTime = Random() \cdot aSlotTime$ | ||
+ | |||
+ | Aici avem: | ||
+ | * $aSlotTime$ - durata altor IFS (inter-frame spacing) este egală cu SIFS plus un număr de //slot times//. Propagarea cadrelor la nivel de PHY pot cauza ca unele stații să vadă limita terminării unui cadru (frame) la un alt moment de timp decât altele. Aici intervine rolul ''aSlotTime'' - se alege o valoare suficient de mare prin care toate stațiile participante la comunicația Wifi să detecteze preambulele de PHY ale stațiilor vecine. Pe parcursul fiecărui ''aSlotTime'' stațiile stau în modul receptor și așteaptă finalizarea propagării cadrelor pe aer. ''aSlotTime'' e valoare dependentă de tipul de PHY (DSSS, OFDM, ERP etc.) șî în general pentru protocoalele ''802.11a/g/n'' găsim valoarea de 9 microsecunde. Figura de mai jos vă arată pentru diferite tiprui de cadre wifi (management - beacon, probe request etc., date, ack la nivel de wifi) cum se face //spațierea// pe aer: | ||
+ | {{:isrm:laboratoare:chanaccesstimingperahia.png?700|}} | ||
+ | * $Random()$ - o funcție care întoarce un număr pseudorandom distribuit uniform în intervalul $[0, CW]$. | ||
+ | * $CW$ - este contention window, un număr întreg care poate lua valori în intervalul $[aCWmin, aCWmax]$. Cele două valori depind de tipul de PHY. În standard atât ''aSlotTime'' cât și ''aCWmin'' și ''aCWmax'' le găsim în tabele care depind de tipul de PHY: tabelul 15-5 ne dă valori pentru PHY de tipul DSSS (întâlnit la 802.11b), tabelul 17-21 ne dă pentru OFDM, tabelul 18-5 pentru ERP și tot așa. În acest laborator vom simula cu niște valori alese de noi pentru 802.11b care are PHY de tip DSSS. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | == Ce facem la laborator == | ||
Scopul acestui exerciţiu este de a investiga impactul | Scopul acestui exerciţiu este de a investiga impactul | ||
Line 34: | Line 59: | ||
* ''cwmax'' pentru a indica limita maxima a fereastrei de arbitraj/contenție | * ''cwmax'' pentru a indica limita maxima a fereastrei de arbitraj/contenție | ||
* De exemplu, dacă ar fi să rulaţi un experiment cu 4 noduri în zona de 150m x 10m de reţea, cu fereastra de 63, vi se va cere să rulaţi următoarea comandă: | * De exemplu, dacă ar fi să rulaţi un experiment cu 4 noduri în zona de 150m x 10m de reţea, cu fereastra de 63, vi se va cere să rulaţi următoarea comandă: | ||
- | <code> ns cwsim.tcl -ns 2 -nr 2 -cwmin 63 -cwmax 63 </code> | + | <code bash> |
+ | student@isrm-vm:~$ ns cw.tcl -ns 2 -nr 2 -cwmin 63 -cwmax 63 | ||
+ | </code> | ||
* Pentru 802.11b standard, cu fereastra adaptiva: | * Pentru 802.11b standard, cu fereastra adaptiva: | ||
- | <code> ns cwsim.tcl -ns 2 -nr 2 -cwmin 15 -cwmax 1023 </code> | + | <code bash> |
- | * Rulaţi scriptul pentru ns = 4, 6, 7, 20, 40 şi pentru CWMin = CWMax să ia următorul set de valori: 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095 | + | student@isrm-vm:~$ ns cw.tcl -ns 2 -nr 2 -cwmin 15 -cwmax 1023 |
- | * Obţineţi şi plotați ca funcții de dimensiunea CW: | + | </code> |
+ | * Rulaţi scriptul pentru ''ns = 4, 6, 7, 20, 40'' şi pentru ''CWMin, CWMax'' ele vor fi egale și iau următorul set de valori: 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095 | ||
+ | * Obţineţi şi plotați ca funcții de dimensiunea CW: | ||
* total pachete livrate la destinație (( {{:isrm:laboratoare:06:cwsim-pkt.png|grafic 1}} )) | * total pachete livrate la destinație (( {{:isrm:laboratoare:06:cwsim-pkt.png|grafic 1}} )) | ||
* rata CBR livrată la destinație [Mbps] (( {{:isrm:laboratoare:06:cwsim-rata.png|grafic 2}} )) | * rata CBR livrată la destinație [Mbps] (( {{:isrm:laboratoare:06:cwsim-rata.png|grafic 2}} )) | ||
Line 48: | Line 77: | ||
* numărul de retransmisiuni per cadru (( {{:isrm:laboratoare:06:cwsim-retr.png|grafic 8}} )) | * numărul de retransmisiuni per cadru (( {{:isrm:laboratoare:06:cwsim-retr.png|grafic 8}} )) | ||
- | <html> | + | Pentru a calcula PDR, va trebui să calculați numărul de pachete trimise şi numărul de pachete primite. În acest exemplu, pentru a obţine numărul de pachete trimise, puteţi utiliza următoarea comandă: |
- | <P ALIGN=LEFT>Pentru a calcula PDR, va trebui să calculați numărul | + | |
- | de pachete trimise şi numărul de pachete primite. În acest | + | <code bash> |
- | exemplu, pentru a obţine numărul de pachete trimise, puteţi | + | student@isrm-vm:~$ grep AGT cw.tr | grep ^s |grep cbr | wc -l |
- | utiliza următoarea comandă: | + | </code> |
- | </P> | + | |
- | <PRE CLASS="western" STYLE="text-align: left"> grep AGT cwsim.tr | grep ^s |grep cbr | wc -l | + | Numărul raportat **de mai sus** este numărul de pachete **trimise** de către toate nodurile. Pentru a obţine numărul de pachete primite, aveţi posibilitatea să utilizaţi o comandă similară: |
- | </PRE><P ALIGN=LEFT> | + | |
- | Numărul raportat <B>de mai sus</B> este numărul de pachete <B>trimise</B> | + | <code bash> |
- | de către toate nodurile. Pentru a obţine numărul de pachete | + | student@isrm-vm:~$ grep AGT cw.tr | grep ^r |grep cbr | wc -l |
- | primite, aveţi posibilitatea să utilizaţi o comandă similară: | + | </code> |
- | </P> | + | |
- | <PRE CLASS="western" STYLE="text-align: left"> grep AGT cwsim.tr | grep ^r |grep cbr | wc -l | + | Numărul raportat este numărul de pachete primite (ar trebui să fie cel mult egal cu numărul de pachete trimise). Probabilitatea de recepție este: |
- | </PRE><P ALIGN=LEFT> | + | |
- | Numărul raportat este numărul de pachete primite (ar trebui să | + | $PDR = \displaystyle \frac{N_{pktRx}}{N_{pktTx}}$ |
- | fie cel mult egal cu numărul de pachete trimise). Raportul de | + | |
- | <B>Pachete [primite] / [pachetele trimise]</B> este PDR. | + | Pachete emise si trimise de nivelul MAC: |
- | </P> | + | * Cu comanda de mai jos obțineți numărul global de pachete care au intrat în coliziune. |
- | <PRE CLASS="western" STYLE="text-align: left"> grep COL cwsim.tr | grep ^d |grep cbr | wc -l | + | <code bash>student@isrm-vm:~$ grep COL cw.tr | grep ^d |grep cbr | wc -l</code> |
- | </PRE><P ALIGN=LEFT> | + | * Cu comanda de mai jos obțineți numărul de pachete de date emise de MAC. |
- | Cu comanda de mai sus obțineți numărul global de pachete care au | + | <code bash>student@isrm-vm:~$ grep MAC cw.tr | grep ^s |grep cbr | wc -l </code> |
- | intrat în coliziune. | + | |
- | </P> | + | <note tip> |
- | <PRE CLASS="western" STYLE="text-align: left"> grep MAC cwsim.tr | grep ^s |grep cbr | wc -l | + | Pentru a înţelege mai multe despre formatul fișierului trace, vi-l reamintim mai jos: |
- | </PRE><P ALIGN=LEFT> | + | |
- | Cu comanda de mai sus obțineți numărul de pachete de date emise | + | <code> |
- | de MAC. | + | s: Send |
- | </P> | + | r: Receive |
- | <P ALIGN=LEFT>Pentru a înţelege mai multe despre formatul | + | d: Drop |
- | fișierului trace: <A href="http://nsnam.isi.edu/nsnam/index.php/NS-2_Trace_Formats#New_Wireless_Trace_Formats"> pe scurt,</a> | + | f: Forward |
- | sau mai mult <A href="http://www.isi.edu/nsnam/ns/doc/node186.html">detaliu</a>. | + | |
- | </P> | + | -t double Time (* For Global Setting) |
- | </UL> | + | -Ni int Node ID |
- | </html> | + | -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) | ||
+ | </code> | ||
+ | |||
+ | Format detaliat aveți pe [[http://www.isi.edu/nsnam/ns/doc/node186.html|isi.edu]] | ||
+ | </note> | ||
== Analiză == | == Analiză == | ||
Această temă vă permite să corelați mărimea CW şi | Această temă vă permite să corelați mărimea CW şi |