This shows you the differences between two versions of the page.
isrm:laboratoare:new:05 [2020/03/21 17:55] vlad.traista [[02] Packet delivery ratio UDP] |
isrm:laboratoare:new:05 [2023/03/28 12:17] (current) dragos.niculescu [Modelul Friis] |
||
---|---|---|---|
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 spate, recomandăm, pentru acest laborator, capitolul 2 din cartea [[https://ctipub-my.sharepoint.com/:b:/g/personal/mbarbulescu_upb_ro/ESbjitohgCNNmTHzyAjT-xcBahQw5XPlZKFOAMOLLMLSdQ?e=VstVsm|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]] | * 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]] | ||
Line 9: | Line 9: | ||
Acest model calculează puterea la receptor după următoarea formulă | Acest model calculează puterea la receptor după următoarea formulă | ||
- | [[https://www.nsnam.org/doxygen/classns3_1_1_log_distance_propagation_loss_model.html#details|descrisă în pagina ns-3]] | + | [[https://www.nsnam.org/docs/models/html/propagation.html#logdistancepropagationlossmodel|descrisă în pagina ns-3]] |
+ | |||
Atributele pe care le putem controla din ns-3 sunt: exponentul, distanța de referință la care atenuarea e calculată și atenuarea de referință. | Atributele pe care le putem controla din ns-3 sunt: exponentul, distanța de referință la care atenuarea e calculată și atenuarea de referință. | ||
Line 15: | Line 17: | ||
====== Modelul Three Log Distance ====== | ====== Modelul Three Log Distance ====== | ||
- | Este la fel ca log distance însă folosește trei exponenți diferiți pentru "near, middle, far". Este descris [[https://www.nsnam.org/doxygen/classns3_1_1_three_log_distance_propagation_loss_model.html#details|matematic aici]]. ns-3 ne oferă posibilitatea de a configura distanțele și exponenții pentru "near, middle, far" și atenuarea de referință. | + | Este la fel ca log distance însă folosește trei exponenți diferiți pentru "near, middle, far". Este descris [[https://www.nsnam.org/doxygen/classns3_1_1_three_log_distance_propagation_loss_model.html#details|matematic în manualul ns3]]. |
+ | |||
+ | $$L = L_0 + 10 n \log(\frac{d}{d_0})$$ | ||
+ | |||
+ | |||
+ | ns-3 ne oferă posibilitatea de a configura distanțele și exponenții pentru "near, middle, far" și atenuarea de referință. | ||
====== Modelul Nakagami ====== | ====== Modelul Nakagami ====== | ||
- | Este o generalizare a [[https://en.wikipedia.org/wiki/Rayleigh_fading|modelului popular Rayleigh]] (îl găsiți și în Goldsmith - TODO pagina). Descrierea lui este [[https://www.nsnam.org/doxygen/classns3_1_1_nakagami_propagation_loss_model.html#details|aici]], dar și în paper-ul scris de M. Nakagami: {{:isrm:laboratoare:new:nakagami1960.pdf|}}. | + | Este o generalizare a [[https://en.wikipedia.org/wiki/Rayleigh_fading|modelului popular Rayleigh]]. Descrierea lui este [[https://www.nsnam.org/doxygen/classns3_1_1_nakagami_propagation_loss_model.html#details|aici]], dar și în paper-ul scris de M. Nakagami: {{:isrm:laboratoare:new:nakagami1960.pdf|}}. |
====== Modelul Friis ====== | ====== Modelul Friis ====== | ||
- | https://www.nsnam.org/doxygen/classns3_1_1_friis_propagation_loss_model.html#details | + | |
+ | Formula clasică din curs [[ https://www.nsnam.org/docs/models/html/propagation.html#friispropagationlossmodel | Friis ]]. | ||
====== Combaterea pierderilor ====== | ====== Combaterea pierderilor ====== | ||
Line 90: | Line 98: | ||
====== Pregătirea laboratorului ====== | ====== Pregătirea laboratorului ====== | ||
+ | |||
+ | <note important> | ||
+ | Pe [[:isrm:mv|mașina virtuală]] aveți tot ce trebuie în ''/home/student/ns-3-dev''. | ||
+ | |||
+ | Dacă lucrați pe alt dispozitiv trebuie să rulați comenzile: | ||
<code bash> | <code bash> | ||
- | student@isrm:~$ git clone https://gitlab.com/b12mihai1/ns-3-dev.git | + | student@isrm-vm-2020:~$ git clone https://gitlab.com/nsnam/ns-3-dev.git |
- | student@isrm:~$ cd ns-3-dev/ | + | student@isrm-vm-2020:~$ cd ~/ns-3-dev |
- | student@isrm:~/ns-3-dev$ git checkout -b isrm_2020 remotes/origin/isrm_2020 | + | student@isrm-vm-2020:~/ns-3-dev$ git checkout -b ns-332-rel ns-3.32 |
- | student@isrm:~/ns-3-dev$ git submodule update --init --recursive | + | student@isrm-vm-2020:~$ cd ~/ns-3-dev/examples |
- | student@isrm:~/ns-3-dev$ cd scratch/ | + | student@isrm-vm-2020:~/ns-3-dev/examples$ git clone https://github.com/isrm-lab/ns3-labs.git |
- | student@isrm:~/ns-3-dev/scratch$ ln -s ../examples/ns3-labs/lab-05-06-mcs/lab5.cc lab5.cc | + | student@isrm-vm-2020:~$ cd ~/ns-3-dev |
- | student@isrm:~/ns-3-dev/scratch$ cd .. | + | student@isrm-vm-2020:~$ ./waf configure --build-profile=debug --enable-examples --enable-tests |
- | student@isrm:~/ns-3-dev$ ./waf configure --build-profile=debug --enable-examples --enable-tests && ./waf build -j4 | + | student@isrm-vm-2020:~$ ./waf build -j4 |
- | student@isrm:~/ns-3-dev$ ./waf --run "lab5 --apManager=ns3::ConstantRateWifiManager --phyRate=ErpOfdmRate54Mbps --propagationModel=0" | + | |
</code> | </code> | ||
+ | </note> | ||
Parametrii pe care simularea noastră îi primește: | Parametrii pe care simularea noastră îi primește: | ||
Line 116: | Line 129: | ||
cmd.AddValue("pcap", "Enable/disable PCAP Tracing", pcapTracing); | cmd.AddValue("pcap", "Enable/disable PCAP Tracing", pcapTracing); | ||
cmd.AddValue("tries", "Max number of attempts to send frame (Short and Long Retry limit for station)", tries); | cmd.AddValue("tries", "Max number of attempts to send frame (Short and Long Retry limit for station)", tries); | ||
- | </code> | ||
- | |||
- | Pentru a realiza grafice, trebuie sa instalam si pachetele de Python: | ||
- | <code bash> | ||
- | student@isrm-vm-2020:~$ sudo apt-get update | ||
- | student@isrm-vm-2020:~$ sudo apt-get install python3-pip | ||
- | student@isrm-vm-2020:~$ pip3 install matplotlib jupyter | ||
- | student@isrm-vm-2020:~$ sudo ln -s ~/.local/bin/jupyter-notebook /usr/bin/jupyter-notebook | ||
</code> | </code> | ||
Line 245: | Line 250: | ||
Pentru ''tries=1'' alegeți ultimele două coloane pentru a contoriza pachetele trimise/primite - sunt extrase la nivel PHY. | Pentru ''tries=1'' alegeți ultimele două coloane pentru a contoriza pachetele trimise/primite - sunt extrase la nivel PHY. | ||
- | Pentru ''tries=4,10'' alegeți coloanele 3-4 pentru a contoriza pachetele trimise/primite - sunt extrase la nivel MAC. | + | Pentru ''tries=4,10'' alegeți coloanele 4-5 pentru a contoriza pachetele trimise/primite - sunt extrase la nivel MAC. |
+ | |||
+ | <note important>Modelul ramane acelasi: Nakagami - pentru aceste rulari. Comanda este: | ||
+ | |||
+ | <code bash> | ||
+ | ./waf --run "lab5 --apManager=ns3::ConstantRateWifiManager --phyRate=ErpOfdmRate54Mbps --propagationModel=0 --tries=1" | ||
+ | </code> | ||
+ | |||
+ | Din ea veti varia numarul de ''tries'' | ||
+ | </note> | ||
Line 271: | Line 285: | ||
* Activați RTS/CTS pentru acest caz (''tries=1''). De ce nu se îmbunătățește situația TCP-ului? | * Activați RTS/CTS pentru acest caz (''tries=1''). De ce nu se îmbunătățește situația TCP-ului? | ||
- | Plotați capacitatea obținută de TCP pentru ''tries=4, 10''. Explicați diferențele față de comportarea UDP în același setup. Observație: Capacitatea TCP crește când reîncercările la nivel MAC ascund pierderile. | + | Plotați capacitatea si packet delivery ratio obținute de TCP pentru ''tries=4, 10''. Explicați diferențele față de comportarea UDP în același setup. Observație: Capacitatea TCP crește când reîncercările la nivel MAC ascund pierderile. |
**Bonus**: Vă puteți adăuga trace pentru pachete pierdute la nivel MAC în simulare astfel (vedeți și [[https://www.nsnam.org/docs/release/3.29/doxygen/_trace_source_list.html|documentația ns-3 - All TraceSources]]): | **Bonus**: Vă puteți adăuga trace pentru pachete pierdute la nivel MAC în simulare astfel (vedeți și [[https://www.nsnam.org/docs/release/3.29/doxygen/_trace_source_list.html|documentația ns-3 - All TraceSources]]): | ||
Line 282: | Line 296: | ||
Pe callbackurile mai sus definiți două funcții simple care incrementează un contor global. Cu acest tracing: Analizați pachetele pierdute și justificați folosind timpii de emisie ai pachetelor. | Pe callbackurile mai sus definiți două funcții simple care incrementează un contor global. Cu acest tracing: Analizați pachetele pierdute și justificați folosind timpii de emisie ai pachetelor. | ||
- | ===== [04] ACK L2 vs L4 ===== | + | ===== [04 - Bonus] ACK L2 vs L4 ===== |
Repetați experimentele cu TCP și UDP activând PCAP tracing. Urmăriți în PCAP momentul în care transmițătorul pachetelor de date UDP/TCP (adică AP-ul) nu mai primește ACK-urile de L2: | Repetați experimentele cu TCP și UDP activând PCAP tracing. Urmăriți în PCAP momentul în care transmițătorul pachetelor de date UDP/TCP (adică AP-ul) nu mai primește ACK-urile de L2: |