Differences

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

Link to this comparison view

isrm:laboratoare:new:03 [2020/03/07 16:57]
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+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ărilerandomizările ​și dimensiunile antetelor din standard
  
-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''​. ​+===== [01a] Durata unei tranzactii atomice =====
  
-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]]+Inainte ​de a porni la calcul, trebuie sa vedem mai intai cum arata antetul ​de PHY pentru cele 2 standarde. 
 +     
 +Pentru **802.11b**, avem un antet PHY de 192 de biti care este trimis la un MCS de 1 Mbps: 
  
-=====  [01a] Rularea simulării =====+{{:​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:
  
-<code bash> +{{:isrm:laboratoare:03:erp-ofdm.11ag.png?​600|}} ​
-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și doar pachetele TCP. Fără ​citi codul simulării și nici descrierea ​de la începutul surseici doar PCAP-urilecare credeți că e direcția traficului? Sunt două noduri: 0 și 1 - 0->1 sau 1->0?+Pentru inceput, vom calcula durata minima (in microsecunde) ​unei tranzacții atomice de transmitere ​unui cadru de date. Aceasta durata poate fi calculata ca suma duratelor urmatoarelor componente: DIFSarbitrajPHY header, MAC header, IP/UDP header, UDP Payload de x octeți, FCS (CRC), SIFS, antent PHY, ACK. Motivul pentru care avem un al doilea antet PHY este pentru ca mesajul de ACK este precedat la randul lui de un antet PHY.
  
-<​note ​tip+<​note ​important
-Primul număr din numele PCAP-ului generat este indexul nodului din simulareiar 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.  +Antetele de MAC, IP, UDP, payload-ul UDPFCS si ACK-ul se transmit prin aer la rata MCS, măsurată în bps.
- +
-Acest lucru e util când vom analiza de ce se pierd pachete în WiFi +
 </​note>​ </​note>​
  
-Determinați canalul routerului ​și frecvențcentrală a lui analizând câmpurile din secțiunea ''​802.11 radio information''​ sau ''​Radiotap Header''​+Folosiți duratele temporizărilor specificate în standard ​și dimensiunile antetelor PHY din schemele de mai sus: 
 +  * 11b: slot time=20, SIFS=10, DIFS=50 
 +  * 11g: slot time=9, SIFS=10, DIFS=28 
 +  * arbitraj=numar de sloturi * slot time; Numarul de sloturi poate sa varieze de la 0 pana la o anumita valoare prestabilita,​ minimul acestei valori fiind de 31. Pentru laborator, vom folosi o valoare medie timpului de arbitraj minim: 31 / 2 * slot time = 15.5 * slot time.
  
-=====  [01b] Analiza PCAP cu tshark =====+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:
  
-[[https://​hackertarget.com/​tshark-tutorial-and-filter-examples/​|Exemple filtre]]+{{:isrm:​laboratoare:​03:​mac_header.png}} 
  
-Exemplu rulare:+Header-ul IPv4 arata in felul urmator:
  
-<code bash> +{{:isrm:laboratoare:​03:​ip_header.png}} 
-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 ​+Header-ul UDP arata in felul urmator:
  
-Colecție de câmpuri de interes:+{{:isrm:​laboratoare:​03:​udp_header.gif}} ​
  
-^ opțiune pentru ​ -e  ^ semnificație ​   ^  +Mesajele ​de ACK au dimensiunea ​de 14 octeti.
-| 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 |  ​+
  
 +Calculati duratele tranzactiilor atomice pentru ''​802.11b''​ si ''​802.11g''​.
  
-  * ''​(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  ​+Durata unei tranzactii atomice pentru ​''​802.11b'' ​este: 
 +<​spoiler>​ 
 +50 + 310 + 192 / 1 + (24 + 20 + 8 + x + 4*8 / MCS + 10 + 192 / 1 + 14 * 8 / MCS 
 +</​spoiler>​
  
-Exerciții:+===== [01b] Calcul si grafice throughput =====
  
-  * 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''​ +Vom calcula throughput-ul ca raportul dintre dimensiunea payload-ului UDP (date utilesi durata unei tranzactii.
-      * 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''​.  +Calculati throughput-ul in Mbps pentru standardele ​''​802.11b'' ​si ''​802.11g''​. ​Tineti cont ca throughput-ul va fi dependent de dimensiunea payload-ului UDP si de MCS.
-      * 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+<spoiler
-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țiiiar cele de management/control ​(e.g. beacon, probe requestcu 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.  +Throughput_11b(x= x*8 / (754 + (70 + x* 8/ MCS)
-</​note> ​+
  
-=====  [01c] Analiza trace-ului ASCII =====+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>​
  
-Mecanismul de [[https://​www.nsnam.org/​docs/​tutorial/​html/​tracing.html|tracing din ns-3]] ne permite să logăm și în format ASCII evenimenteleRulați simularea aferentă laboratorului 3 astfel:+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.
  
-<code bash> +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: 
-./waf --run "lab3 --numberOfNodes=--payloadSize=1400 \ +  * pentru 802.11b MCS: 1, 2, 5.5, 11 Mbps 
-    --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2 --tracing=true"​ +  * pentru 802.11g ​MCS: 6, 12, 24, 54 Mbps
-</​code>​+
  
-Vom obține două trace-uriunul PCAP (cum am analizat mai sus) și unul text''​wifi-lab3.tr''​Deschideți și inspectați fișierul.+Graficele la care trebuie sa ajungeti sunt urmatoarele: 
 +  * pentru 802.11b {{:isrm:​laboratoare:​03:​11b.ovhd.png?​linkonly|rezultat}} 
 +  * pentru 802.11g {{:​isrm:​laboratoare:​03:​11g.ovhd.png?​linkonly|rezultat}}
  
-Explicația conținutului fișierului:​ 
  
-Prima literă este:+Pentru realizarea graficelor, puteti folosi urmatorul template:
  
-<​code ​bash+<​code ​python
-r for received +import copy 
-d for dropped +import numpy as np 
-+ for enqueued +import matplotlib 
-- for dequeued +import matplotlib.pyplot as plt
-t is for transmitted #Relevant for WiFi tracefiles +
-</​code>​+
  
-A doua coloană reprezintă timestamp+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)]
  
-A treia coloană are următoarea semnificație:+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
  
-<​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 actionDrop, MacRx, Enqueue, Dequeue.</​note>​ +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 
-Apoi urmează o serie de nume de clase din [[https://​www.nsnam.org/​doxygen/​group__attribute.html|sistemul de atribute al ns-3]] ​(''​ns3::​Ipv4Headerns3::​TcpHeader''​și cu o listă de trace-uri specifice clasei respective.  +    # Prin figsize se specifica dimensiunea graficului 
- +    fig, ax = plt.subplots(figsize=(12,12))
- +
-====== [02] Capacitatea ideală simulare ====== +
- +
-In cadrul acestui exercitiu, vom calcula capacitatea ideala pentru standardele ''​802.11b''​ si ''​802.11g''​. Inainte de a porni la calcul, trebuie sa vedem mai intai cum arata antetul de PHY pentru cele 2 standarde.+
     ​     ​
-Pentru **802.11b**avem un antet PHY de 192 de biti care este trimis la un MCS de 1 Mbps:  +    # Valori stilistice pentru grafic 
- +    ax.grid(color='​b'​alpha=0.5, linestyle='​dashed',​ linewidth=0.5)
-{{:​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:+    # 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_sizemcs) 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
  
-{{:isrm:​laboratoare:​03:​erp-ofdm.11ag.png?​600|}} ​+if __name__ == '​__main__'​: 
 +    plot_802_11_b_throughput() 
 +    plot_802_11_g_throughput() 
 +</​code>​
  
-Pentru inceput, vom calcula durata unei tranzacții atomice de transmitere a unui cadru de date. Aceasta durata poate fi calculata ca suma duratelor urmatoarelor componente: DIFS, arbitraj, PHY header, MAC header, IP/UDP header, UDP Payload de x octeți, FCS (CRC), SIFS, antent PHY, ACK. Motivul pentru care avem un al doilea antet PHY este pentru ca mesajul de ACK este precedat de un antet PHY.+====== [02] Capacitatea ideală simulare ======
  
-<note important>​ +  * 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.
-Antetele de MAC, IP, UDP, payload-ul UDP, FCS si ACK-ul se transmit prin aer la rata MCS, măsurată în bps. +
-</​note>​ +
- +
-Folosiți duratele temporizărilor specificate în standard și dimensiunile antetelor PHY din schemele de mai sus: +
-  *  11b: slot=20, SIFS=10, DIFS=50 +
-  *  11g: slot=9, SIFS=10, DIFS=28 +
- +
-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:​ +
- +
-{{:​isrm:​laboratoare:​03:​mac_header.png}}  +
- +
-Header-ul IPv4 arata in felul urmator: +
- +
-{{:​isrm:​laboratoare:​03:​ip_header.png}}  +
- +
-Header-ul UDP arata in felul urmator: +
- +
-{{:​isrm:​laboratoare:​03:​udp_header.gif}}  +
- +
- +
-Durata pentru ''​802.11b''​ este: +
-<​spoiler>​ +
-50 + 310 + 192 + (24 + 20 + 8 + x + 4) *8 / MCS + 10 + 192 + 14 * 8 / MCS +
-</​spoiler>​ +
- +
-    * scrieți funcția Throughput_11b(x) unde x este payload UDP, iar MCS(o constantă) ia valorile din standard 11b=1, 2, 5.5, 11 (( ''​gnuplot>​ Throughput_11b(x) = x*8 /(764 + (70 + x)*8/​MCS)''​ ))   ​ +
-    * scrieți funcția Throughput_11g(x) unde x este payload UDP, iar MCS ia valorile din standard 11g=6, 12, 36, 54  +
-    * deduceți modul în care debitul obținut în Mbps depinde de MCS și de dimensiunea UDP payload +
-      * ''​gnuplot>​ plot MCS=1, Throughput(x) w l t '​1Mbps',​ MCS=2, Throughput(x) w l t '​2Mbps',​ MCS=5.5, Throughput(x) ...''​ +
-    * realizați grafice pentru 802.11b (axa x: payload UDP; axa y: Throughput[Mbps]) ​  +
-      * 4 curbe pentru 1Mbps, 2Mbps, 5.5Mbps, 11Mbps +
-      * {{:​isrm:​laboratoare:​03:​11b.ovhd.png?​linkonly|rezultat}} +
-    * realizați grafice pentru 802.11g (axa x: payload UDP; axa y: Throughput[Mbps]) ​  +
-      * 4 curbe pentru 6Mbps, 12Mbps, 24Mbps, 54Mbps  +
-      * {{:​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 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 261: 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 284: 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 296: 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.1583593070.txt.gz · Last modified: 2020/03/07 16:57 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