Differences

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

Link to this comparison view

isrm:laboratoare:new:03 [2020/03/07 21:32]
vlad.traista [[02] Capacitatea ideală simulare]
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 comanda:+<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 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 78: 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 195: Line 78:
 Pentru **802.11b**,​ avem un antet PHY de 192 de biti care este trimis la un MCS de 1 Mbps:  Pentru **802.11b**,​ avem un antet PHY de 192 de biti care este trimis la un MCS de 1 Mbps: 
  
-{{:​isrm:​laboratoare:​03:​802.11b.phy.preamble.png?​500}}}+{{:​isrm:​laboratoare:​03:​802.11b.phy.preamble.png?​500}}
     ​     ​
 Pentru **802.11g**,​ avem un antet PHY de 16 us plus 24 de biti care sunt transmisi la un MCS de 6 Mbps: Pentru **802.11g**,​ avem un antet PHY de 16 us plus 24 de biti care sunt transmisi la un MCS de 6 Mbps:
Line 210: Line 93:
   * 11b: slot time=20, SIFS=10, DIFS=50   * 11b: slot time=20, SIFS=10, DIFS=50
   * 11g: slot time=9, SIFS=10, DIFS=28   * 11g: slot time=9, SIFS=10, DIFS=28
-  * arbitraj=numar de sloturi * slot time; Numarul de sloturi poate sa varieze, ​valoarea lui minima ​fiind de 31. Pentru laborator, vom folosi o valoare medie a timpului de arbitraj: 31 / 2 * slot time.+  * arbitraj=numar de sloturi * slot time; Numarul de sloturi poate sa varieze ​de la 0 pana la o anumita valoare prestabilitaminimul acestei valori ​fiind de 31. Pentru laborator, vom folosi o valoare medie a timpului de arbitraj ​minim: 31 / 2 * slot time = 15.5 * slot time.
  
 Header-ul de MAC pentru standardul 802.11 arata in felul urmator (dimensiunile sunt in octeti). Nu luati in calcul a patra adresa MAC care este optionala: Header-ul de MAC pentru standardul 802.11 arata in felul urmator (dimensiunile sunt in octeti). Nu luati in calcul a patra adresa MAC care este optionala:
Line 230: Line 113:
 Durata unei tranzactii atomice pentru ''​802.11b''​ este: Durata unei tranzactii atomice pentru ''​802.11b''​ este:
 <​spoiler>​ <​spoiler>​
-50 + 310 + 192 + (24 + 20 + 8 + x + 4) *8 / MCS + 10 + 192 + 14 * 8 / MCS+50 + 310 + 192 / 1 + (24 + 20 + 8 + x + 4) *8 / MCS + 10 + 192 / 1 + 14 * 8 / MCS
 </​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 241: 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>​
  
 Realizati cate un grafic pentru standardele ''​802.11b''​ si ''​802.11g''​ care sa evidentieze evolutia throughput-ului in Mbps (axa Oy) in functie de dimensiunea payload-ului UDP (axa Ox). Puteti varia dimensiunea payload-ului de la 0 la 1400 de octeti. Realizati cate un grafic pentru standardele ''​802.11b''​ si ''​802.11g''​ care sa evidentieze evolutia throughput-ului in Mbps (axa Oy) in functie de dimensiunea payload-ului UDP (axa Ox). Puteti varia dimensiunea payload-ului de la 0 la 1400 de octeti.
  
-Din moment ce throughput-ul depinde si de MCS, cadrul fiecarui grafic vor trebui construite 4 curbe (subgrafice) care sa corespunda urmatoarelor valori de MCS:+Din moment ce throughput-ul depinde si de MCS, in cadrul fiecarui grafic vor trebui construite 4 curbe (subgrafice) care sa corespunda urmatoarelor valori de MCS:
   * pentru 802.11b - MCS: 1, 2, 5.5, 11 Mbps   * pentru 802.11b - MCS: 1, 2, 5.5, 11 Mbps
-  * pentru 802.11g - MCS: 6, 12, 36, 54 Mbps+  * pentru 802.11g - MCS: 6, 12, 24, 54 Mbps
  
 Graficele la care trebuie sa ajungeti sunt urmatoarele:​ Graficele la care trebuie sa ajungeti sunt urmatoarele:​
Line 253: Line 139:
   * pentru 802.11g {{:​isrm:​laboratoare:​03:​11g.ovhd.png?​linkonly|rezultat}}   * pentru 802.11g {{:​isrm:​laboratoare:​03:​11g.ovhd.png?​linkonly|rezultat}}
  
-====== [03] 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/​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 realizarea graficelor, puteti folosi urmatorul template: 
 + 
 +<code python>​ 
 +import copy 
 +import numpy as np 
 +import matplotlib 
 +import matplotlib.pyplot as plt 
 + 
 +MCS_802_11_B = [1, 2, 5.5, 11] 
 +MCS_802_11_G = [6, 12, 24, 54] 
 +PAYLOAD_SIZES = [100 * i for i in range(15)] 
 + 
 +def compute_throughput_802_11_b(payload_size,​ mcs): 
 +    #TODO - replace tput with the correct value based on the payload_size and mcs 
 +    tput = 0 
 +    return tput 
 +  
 +def compute_throughput_802_11_g(payload_size,​ mcs): 
 +    #TODO - replace tput with the correct value based on the payload_size and mcs 
 +    tput = 0 
 +    return tput 
 + 
 +def plot_802_11_b_throughput():​ 
 +    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite 
 +    # Prin figsize se specifica dimensiunea graficului 
 +    fig, ax = plt.subplots(figsize=(12,​12)) 
 +     
 +    # Valori stilistice pentru grafic 
 +    ax.grid(color='​b',​ alpha=0.5, linestyle='​dashed',​ linewidth=0.5) 
 +     
 +    # Denumirile axelor Ox si Oy, precum si titlul graficului 
 +    plt.xlabel('​Payload size [bytes]'​) 
 +    plt.ylabel('​Throughput [Mbps]'​) 
 +    plt.title('​802.11b throughput'​) 
 +  
 +    # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului 
 +    for mcs in MCS_802_11_B:​ 
 +        tput_values = [compute_throughput_802_11_b(payload_size,​ mcs) for payload_size in PAYLOAD_SIZES] 
 +        ax.plot(PAYLOAD_SIZES,​ tput_values,​ label='​%s'​ % mcs) 
 +    ax.legend() 
 +  
 +    plt.show() 
 +  
 +def plot_802_11_g_throughput():​ 
 +    #TODO 
 +    pass 
 + 
 +if __name__ == '​__main__':​ 
 +    plot_802_11_b_throughput() 
 +    plot_802_11_g_throughput() 
 +</​code>​ 
 + 
 +====== [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 capacitatea ideală, folosim un AP, un client, trafic de tip UDP. Exepmlu de rulare de interes (cu parametrii de interes) pentru acest task:   * Pentru capacitatea ideală, folosim un AP, un client, trafic de tip UDP. Exepmlu de rulare de interes (cu parametrii de interes) pentru acest task:
  
Line 278: Line 217:
 ''​numberOfNodes''​ reprezintă numărul total de noduri (inclusiv AP-ul). ​ ''​numberOfNodes''​ reprezintă numărul total de noduri (inclusiv AP-ul). ​
  
-Parametrul ''​phyRate''​ (reprezinta MCS) va lua urmaoarele ​valori:+<note important>​ 
 +Pentru a schimba standardul folosit in cadrul scriptului, modificati la [[https://​github.com/​isrm-lab/​ns3-labs/​blob/​master/​lab-03-04-capacity/​lab3.cc#​L111|linia]]. 
 +</​note>​ 
 +Parametrul ''​phyRate''​ (reprezinta MCS) va lua urmatoarele ​valori:
   * Pentru ''​802.11b'':​   * Pentru ''​802.11b'':​
  
Line 301: Line 243:
 </​code>​ </​code>​
  
-Parametrul ''​dataRate''​ corespunde traficului trimis de aplicație în socketul UDP. Pe linia de comandă **trebuie** dați parametrii relevanți pentru dimensiunea pachetului și rata dorită de UDP. +Parametrul ''​offeredRate''​ corespunde traficului trimis de aplicație în socketul UDP. Pe linia de comandă **trebuie** dați parametrii relevanți pentru dimensiunea pachetului și rata dorită de UDP. 
  
 Scopul acestui task este să repetați graficele precedente/​teoretice folosind simularea în ''​ns-3''​. Puncte de evaluare pentru ''​payloadSize'':​ 20, 50, 100, 500, 1000, 1500.  Scopul acestui task este să repetați graficele precedente/​teoretice folosind simularea în ''​ns-3''​. Puncte de evaluare pentru ''​payloadSize'':​ 20, 50, 100, 500, 1000, 1500. 
Line 313: Line 255:
 </​note>​ </​note>​
  
-<note tip> +Puteti folosi acest template pentru construirea graficelor (va trebui sa implementati TODO-urile):
-De ce iterăm peste aceste packet size-uri? Iată câteva valori din trafic real[[http://​www.bandcalc.com/​| VoIP]] ~ 20-300; DNS, TCP~ 500; Ethernet MTU=1500; 802.11 Beacon=380 +
-</​note>​+
  
-====== ​[04] Capacitatea ideală simulare TCP ======+<code python>​ 
 +import copy 
 +import numpy as np 
 +import matplotlib 
 +import matplotlib.pyplot as plt 
 +  
 +# Calea absoluta catre fisierul de date din care citim 
 +# TODO - trebuie inlocuita cu calea corecta 
 +DATA_FILE_802_11_B ​'/​home/​student/​ns-3-dev/​output_802_11_b.txt'​ 
 +DATA_FILE_802_11_G ​'/​home/​student/​ns-3-dev/​output_802_11_g.txt'​ 
 +columns ​['​mcs',​ '​payload_size',​ '​throughput'​] 
 +  
 +# Citim datele din fisier 
 +# Argumentul delimiter precizeaza care este delimitatorul dintre coloane 
 +# Argumentul skip_header precizeaza cate linii nu vor fi citite pornind cu inceputul fisierului 
 +# Argumentul names este unul foarte util deoarece permite asocierea de nume pentru coloanele din fisier si 
 +# de asemenea duce la un acces foarte usor al datelor in script. In acest exemplu, names va fi egal cu ['​x',​ '​y'​] 
 +# ceea ce inseamna ca putem accesa valorile din prima coloana prin sim_data['​x'​]. 
 +# Argumentul dtype setat specifica modul in care vor fi interpretate coloanele (string-urile ca string-uri, float-urile ca float-uri). 
 +# In absenta acestui argument, valorile din coloane vor fi interpretate ca float. 
 +sim_data_802_11_b ​np.genfromtxt(DATA_FILE_802_11_B,​ delimiter=' ', names=columns, dtype=None) 
 +#TODO - decomentati linia dupa ce ati obtinut fisierul de output pentru 802.11g 
 +# sim_data_802_11_g ​np.genfromtxt(DATA_FILE_802_11_G,​ delimiter=' ', names=columns, dtype=None) 
 +  
 +def plot_802_11_b_throughput(sim_data):​ 
 +    data copy.deepcopy(sim_data) 
 +  
 +    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite 
 +    # Prin figsize se specifica dimensiunea graficului 
 +    fig, ax = plt.subplots(figsize=(12,​12)) 
 +    # Valori stilistice pentru grafic 
 +    ax.grid(color='​b',​ alpha=0.5, linestyle='​dashed',​ linewidth=0.5) 
 +    # Denumirile axelor Ox si Oy, precum si titlul graficului 
 +    plt.xlabel('​Payload size [bytes]'​) 
 +    plt.ylabel('​Throughput [Mbps]'​) 
 +    plt.title('​802.11b throughput'​) 
 +  
 +    # Aici este construit efectiv graficul. Campul label va fi folosit in cadrul legendei graficului 
 +    #TODO 
 +    # Daca in fisierul de output aveti toate valorile de MCS, este posibil sa aveti nevoie de Python slicing pentru  
 +    # a construi graficele usor. Exemplu: data['​mcs'​][0:​6] sau data['​throughput'​][0:​6] pentru a extrage primele 6 elemente din  
 +    # coloana. 
 +    ax.legend() 
 +  
 +    plt.show() 
 +    ​
  
-Repetați experimentele de mai sus folosind trafic de tip TCP.+def plot_802_11_g_throughput(sim_data):​ 
 +    data = copy.deepcopy(sim_data) 
 +  
 +    # Apelul subplots poate fi folosit pentru a crea mai multe subgrafice in cadrul aceluiasi grafic sau in cadrul unor grafice diferite 
 +    # Prin figsize se specifica dimensiunea graficului 
 +    fig, ax = plt.subplots(figsize=(12,​12)) 
 +    # Valori stilistice pentru grafic 
 +    ax.grid(color='​b',​ alpha=0.5, linestyle='​dashed',​ linewidth=0.5) 
 +    # Denumirile axelor Ox si Oy, precum si titlul graficului 
 +    plt.xlabel('​Payload size [bytes]'​) 
 +    plt.ylabel('​Throughput [Mbps]'​) 
 +    plt.title('​802.11g throughput'​) 
 +  
 +    # Aici este construit efectiv graficulCampul label va fi folosit in cadrul legendei graficului 
 +    #TODO
  
-<code bash> +    ax.legend() 
-./waf --run "lab3 --numberOfNodes=2 --payloadSize=1400 \ +  
-   ​--offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --runTcp=true"​+    plt.show() 
 + 
 +  
 +if __name__ ​== '​__main__':​ 
 +    ​plot_802_11_b_throughput(sim_data_802_11_b) 
 +    #TODO decomentati linia dupa ce ati obtinut fisierul de output pentru 802.11g 
 +#     ​plot_802_11_g_throughput(sim_data_802_11_g)
 </​code>​ </​code>​
 +
 +Pentru mai multe informatii legate de list slicing in Python, puteti consulta aceasta [[https://​www.geeksforgeeks.org/​python-list-comprehension-and-slicing/​| pagina]].
 +
 +<note tip>
 +De ce iterăm peste aceste packet size-uri? Iată câteva valori din trafic real: [[http://​www.bandcalc.com/​| VoIP]] ~ 20-300; DNS, TCP~ 500; Ethernet MTU=1500; 802.11 Beacon=380
 +</​note>​
 +
  
isrm/laboratoare/new/03.1583609545.txt.gz · Last modified: 2020/03/07 21:32 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