Differences

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

Link to this comparison view

isrm:laboratoare:new:03 [2020/05/17 13:28]
vlad.traista [[02b] Calcul si grafice throughput]
isrm:laboratoare:new:03 [2022/03/12 12:07] (current)
mbarbulescu
Line 45: Line 45:
 ====== ​ [00] Pregătire laborator ====== ====== ​ [00] Pregătire laborator ======
  
-Intrați în directorul ​''/​home/​student/​Desktop/​ISRM/​ns-3-dev''​. ​Rulați comenzile:+<note important>​ 
 +Pe [[:​isrm:​mv|mașina virtuală]] aveți tot ce trebuie ​în ''/​home/​student/​ns-3-dev''​. ​
  
-<code bash> +Dacă lucrați pe alt dispozitiv trebuie să rulați comenzile:
-git remote add isrm https://​gitlab.com/​b12mihai1/​ns-3-dev.git  +
-git remote update +
-git checkout -b isrm_2020 remotes/​isrm/​isrm_2020 +
-git submodule init +
-git submodule update --remote --merge +
-git submodule foreach git pull origin master ​  # in caz ca cea anterioara nu ne muta pe ultimul commit din master +
-</​code>​ +
- +
-Dacă directorul nu există rulați comenzile ​de mai jos și țineți minte unde aveți ''​ns-3-dev''​ folder cu toate lucrurile compilate:+
  
 <code bash> <code bash>
-git clone https://​gitlab.com/​b12mihai1/​ns-3-dev.git ~/​ns-3-dev +student@isrm-vm-2020:​~$ ​git clone https://​gitlab.com/​nsnam/​ns-3-dev.git 
-cd ~/ns-3-dev +student@isrm-vm-2020:​~$ cd ~/​ns-3-dev 
-git checkout -b isrm_2020 remotes/​origin/​isrm_2020 +student@isrm-vm-2020:​~/ns-3-devgit checkout -b ns-332-rel ns-3.32 
-git submodule init +student@isrm-vm-2020:~$ cd ~/ns-3-dev/examples 
-git submodule update ​--remote ​--merge +student@isrm-vm-2020:​~/​ns-3-dev/​examplesgit clone https://​github.com/​isrm-lab/​ns3-labs.git 
-git submodule foreach git pull origin master +student@isrm-vm-2020:​~$ ​cd ~/ns-3-dev 
-./waf configure ​--build-profile=debug ​--enable-examples --enable-tests && ./waf build -j4 +student@isrm-vm-2020:​~$ ​./waf configure --build-profile=debug --enable-examples --enable-tests 
-</​code>​ +student@isrm-vm-2020:​~$ ./waf build -j4
- +
-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>​
 +</​note>​
  
 Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda: Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda:
Line 82: Line 68:
 </​code>​ </​code>​
  
-Pe parcursul laboratorului,​ vom avea nevoie de utilitarul ''​tshark'':​ +====== [01] Capacitatea ideală teoretica ======
-<code bash> +
-student@isrm-vm-2020:​~$ sudo apt-get install tshark +
-</​code>​ +
-====== ​ [01] Analiza capturii profilului de trafic ====== +
- +
-Utilitarul Wireshark este un utilitar grafic pentru captură și inspecție de trafic de rețea. [[https://​www.wireshark.org/​docs/​man-pages/​tshark.html|Tshark]] este un wireshark pentru terminal. Are avantajul de a folosi limbajul wireshark pentru filtre (condițiile pot fi create în wireshark si apoi copiate cu copy/​paste),​ dar în același timp oferă controlul afișarii la stdout.  +
- +
-Până acum foloseați de obicei aceste utilitare pentru a analiza o captură real-time de pachete pe o interfață sau o captură ''​pcap''/''​pcapng''​ obținută cu ''​tcpdump''​.  +
- +
-Simulatorul ''​ns-3''​ ne oferă un mecanism de tracing foarte puternic de analiză: [[https://​www.nsnam.org/​docs/​release/​3.30/​tutorial/​singlehtml/​index.html#​pcap-tracing|pcap-tracing]] +
- +
-=====  [01a] Rularea simulării ===== +
- +
-<code bash> +
-student@isrm-vm:​~/​ns-3-dev$ ./waf --run "​wifi-tcp --pcap=true"​ +
-(...) +
-student@isrm-vm:​~/​ns-3-dev$ ls -al *.pcap +
--rw-rw-r-- 1 mihai mihai 76129717 Mar  4 15:44 AccessPoint-0-0.pcap +
--rw-rw-r-- 1 mihai mihai 80172767 Mar  4 15:44 Station-1-0.pcap +
-</​code>​ +
- +
-Deschideți oricare din cele două capturi cu Wireshark. Filtrați și afișați doar pachetele TCP. Fără a citi codul simulării și nici descrierea de la începutul sursei, ci doar PCAP-urile, care credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0? +
- +
-<note tip> +
-Primul număr din numele PCAP-ului generat este indexul nodului din simulare, iar al doilea număr e interfața de rețea (un nod poate avea mai multe interfețe de rețea). În simulare nodul 0 e AP (access point) și 1 este stație mobilă (STA). Un pachet care ajunge la STA (nodul 1) dar care a fost aruncat nu va putea fi văzut în captura ''​Station-1-0.pcap''​ dar în ''​AccessPoint-0-0.pcap''​ îl vom putea vedea.  +
- +
-Acest lucru e util când vom analiza de ce se pierd pachete în WiFi  +
-</​note>​ +
- +
-Determinați canalul routerului și frecvența centrală a lui analizând câmpurile din secțiunea ''​802.11 radio information''​ sau ''​Radiotap Header''​.  +
- +
-=====  [01b] Analiza PCAP cu tshark ===== +
- +
-[[https://​hackertarget.com/​tshark-tutorial-and-filter-examples/​|Exemple filtre]] +
- +
-Exemplu rulare: +
- +
-<code bash> +
-student@isrm-vm:​~/​ns-3-dev$ tshark -T fields -e frame.time_epoch \ +
-     -e frame.number -e ip.src ​ \ +
-     -r ./​AccessPoint-0-0.pcap '​(ip.proto == 6) && (ip.src == 10.0.0.1)'​ > frames.txt +
-</​code>​ +
- +
-  * ''​-T fields''​ indică câmpurile din pachete care se doresc printate  +
- +
-Colecție de câmpuri de interes: +
- +
-^ opțiune pentru ​ -e  ^ semnificație ​   ^  +
-| frame.time_epoch ​   | timpul de la începutul simulării ​   |  +
-| frame.number ​   | numărul cadrului | +
-| ip.src ​   | adresa IP sursă ​     | +
-| ip.id    |  IP identifier field     | +
-| ip.ttl ​   | câmpul TTL din headerul de IP      | +
-| wlan.flags ​   | câmpul flags din headerul WLAN      | +
-| wlan.seq ​   | numărul de secvență WLAN     | +
-| wlan.fcs_good | cadrul WLAN este validat de câmpul FCS |   +
- +
- +
-  * ''​(ip.proto == 6) && (ip.src == 10.0.0.1)''​ indică condiția de filtrare a pachetelor din .pcap - pachete de tip TCP (proto=6) și IP sursă; folosește acelasi limbaj ca și wireshark ​  +
- +
-Exerciții:​ +
- +
-  * Folosind ''​tshark''​ cu filtrul ''​wlan.fc.type_subtype == 0x08''​ extrageți și numărați câte pachete de tip beacon trimite AP-ul din captura ''​./​AccessPoint-0-0.pcap''​ +
-      * Hint: pentru contorizare în bash puteți folosi ''​wc -l''​ +
-      * Folosiți câmpurile ''​frame.time_epoch''​ de la câteva linii consecutive și determinați la ce interval de timp (în ''​ms''​) AP-ul (access point-ul) trimite beacon-uri +
- +
-  * Folosind ''​tshark''​ extrageți în 2 fișiere separate, fiecare fișier având filtrul ''​wlan.fc.type_subtype <= 0x0011''​ (subtipul <= 0x0011) și celălalt ''​wlan.fc.type_subtype == 0x0028''​ următoarele câmpuri: ''​frame.time_epoch'',​ ''​wlan_radio.phy'',​ ''​frame.number''​.  +
-      * Ce puteți spune despre PHY type-ul din primul fișier, dar al doilea? Ce credeți că se întâmplă +
-      * Dacă sunteți curioși ce inseamna type/​subtype,​ consultați [[https://​community.cisco.com/​t5/​wireless-mobility-documents/​802-11-frames-a-starter-guide-to-learn-wireless-sniffer-traces/​ta-p/​3110019#​toc-hId--1447989924|acest tabel din standardul 802.11]] +
- +
-<note tip> +
-Veți vedea și la curs și vom vedea și pe parcursul laboratoarelor:​ cadrele de date se trimit cu cel mai mare MCS posibil (în anumite condiții) iar cele de management/​control (e.g. beacon, probe request) cu cel mai mic MCS stabilit intre AP și STA - motivul este că pentru acestea vrem o constelație robustă deoarece pierderile nu sunt acceptabile pentru cadre de control.  +
-</​note>​  +
- +
-=====  [01c] Analiza trace-ului ASCII ===== +
- +
-Mecanismul de [[https://​www.nsnam.org/​docs/​tutorial/​html/​tracing.html|tracing din ns-3]] ne permite să logăm și în format ASCII evenimentele. Rulați simularea aferentă laboratorului 3 astfel: +
- +
-<code bash> +
-./waf --run "lab3 --numberOfNodes=2 --payloadSize=1400 \ +
-    --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --tracing=true"​ +
-</​code>​ +
- +
-Vom obține două trace-uri: unul PCAP (cum am analizat mai sus) și unul text: ''​wifi-lab3.tr''​. Deschideți și inspectați fișierul. +
- +
-Explicația conținutului fișierului:​ +
- +
-Prima literă este: +
- +
-<code bash> +
-r for received +
-d for dropped +
-+ for enqueued +
-- for dequeued +
-t is for transmitted #Relevant for WiFi tracefiles +
-</​code>​ +
- +
-A doua coloană reprezintă timestamp.  +
- +
-A treia coloană are următoarea semnificație:​ +
- +
-<​note>​name of the event in the configuration namespace, sometimes called the configuration path name. The NodeList value represents the node (A=0, etc), the DeviceList represents the interface, and the final part of the name repeats the action: Drop, MacRx, Enqueue, Dequeue.</​note>​ +
- +
-Apoi urmează o serie de nume de clase din [[https://​www.nsnam.org/​doxygen/​group__attribute.html|sistemul de atribute al ns-3]] (''​ns3::​Ipv4Header,​ ns3::​TcpHeader''​) și cu o listă de trace-uri specifice clasei respective.  +
- +
- +
-====== [02] Capacitatea ideală teoretica ======+
  
 In cadrul acestui exercitiu vom calcula capacitatea unui canal 802.11 pentru standardele ''​802.11b''​ si ''​802.11g'',​ în condiții optime. Vom face o analiză teoretică folosind temporizările,​ randomizările și dimensiunile antetelor din standard. ​ In cadrul acestui exercitiu vom calcula capacitatea unui canal 802.11 pentru standardele ''​802.11b''​ si ''​802.11g'',​ în condiții optime. Vom face o analiză teoretică folosind temporizările,​ randomizările și dimensiunile antetelor din standard. ​
  
-===== [02a] Durata unei tranzactii atomice =====+===== [01a] Durata unei tranzactii atomice =====
  
 Inainte de a porni la calcul, trebuie sa vedem mai intai cum arata antetul de PHY pentru cele 2 standarde. Inainte de a porni la calcul, trebuie sa vedem mai intai cum arata antetul de PHY pentru cele 2 standarde.
Line 237: Line 116:
 </​spoiler>​ </​spoiler>​
  
-===== [02b] Calcul si grafice throughput =====+===== [01b] Calcul si grafice throughput =====
  
 Vom calcula throughput-ul ca raportul dintre dimensiunea payload-ului UDP (date utile) si durata unei tranzactii. Vom calcula throughput-ul ca raportul dintre dimensiunea payload-ului UDP (date utile) si durata unei tranzactii.
Line 245: Line 124:
 <​spoiler>​ <​spoiler>​
 Throughput_11b(x) = x*8 / (754 + (70 + x) * 8/ MCS) Throughput_11b(x) = x*8 / (754 + (70 + x) * 8/ MCS)
 +
 +La 802.11g, obtinem urmatoarea durata a tranzactiei atomice: 28 + 15.5 * 9 + 16 + 24 / 6 + (24 + 20 + 8 + x + 4) *8 / MCS + 10 + 16 + 24 / 6 + 14 * 8 / MCS
 +Throughput_11g(x) = x*8 / (217.5 + (70 + x) * 8/ MCS)
 </​spoiler>​ </​spoiler>​
  
Line 309: Line 191:
     plot_802_11_g_throughput()     plot_802_11_g_throughput()
 </​code>​ </​code>​
-====== [03] Capacitatea ideală simulare ======+ 
 +====== [02] Capacitatea ideală simulare ======
  
   * Pentru un singur client, se vor repeta curbele de mai sus folosind ns-3. Modelul [[https://​github.com/​isrm-lab/​ns3-labs/​blob/​master/​lab-03-04-capacity/​lab3.cc|lab3.cc]] configurează la (0,0) un AP și n-1 noduri plasate în vecinătatea sa. Traficul este generat de la AP către fiecare nod.   * Pentru un singur client, se vor repeta curbele de mai sus folosind ns-3. Modelul [[https://​github.com/​isrm-lab/​ns3-labs/​blob/​master/​lab-03-04-capacity/​lab3.cc|lab3.cc]] configurează la (0,0) un AP și n-1 noduri plasate în vecinătatea sa. Traficul este generat de la AP către fiecare nod.
isrm/laboratoare/new/03.1589711298.txt.gz · Last modified: 2020/05/17 13:28 by vlad.traista
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