This shows you the differences between two versions of the page.
isrm:laboratoare:new:03 [2020/05/17 14:19] vlad.traista [[02b] Calcul si grafice throughput] |
isrm:laboratoare:new:03 [2024/10/09 10:56] (current) dragos.niculescu |
||
---|---|---|---|
Line 43: | Line 43: | ||
- | ====== [00] Pregătire laborator ====== | + | ====== [01] Capacitatea ideală teoretica ====== |
- | + | ||
- | Intrați în directorul ''/home/student/Desktop/ISRM/ns-3-dev''. Rulați comenzile: | + | |
- | + | ||
- | <code bash> | + | |
- | 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> | + | |
- | git clone https://gitlab.com/b12mihai1/ns-3-dev.git ~/ns-3-dev | + | |
- | cd ~/ns-3-dev | + | |
- | git checkout -b isrm_2020 remotes/origin/isrm_2020 | + | |
- | git submodule init | + | |
- | git submodule update --remote --merge | + | |
- | git submodule foreach git pull origin master | + | |
- | ./waf configure --build-profile=debug --enable-examples --enable-tests && ./waf build -j4 | + | |
- | </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> | + | |
- | + | ||
- | Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda: | + | |
- | + | ||
- | <code bash> | + | |
- | student@isrm-vm-2020:~$ jupyter-notebook | + | |
- | </code> | + | |
- | + | ||
- | Pe parcursul laboratorului, vom avea nevoie de utilitarul ''tshark'': | + | |
- | <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 91: | ||
</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 312: | Line 166: | ||
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. | ||
Line 318: | Line 173: | ||
<code bash> | <code bash> | ||
- | mihai@wormhole:~/facultate/ns-3-dev$ ./waf --run "lab3 --numberOfNodes=2 \ | + | mihai@wormhole:~/facultate/ns-3-dev$ ./ns3 run "lab3 --numberOfNodes=2 \ |
--payloadSize=1400 --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2" | --payloadSize=1400 --offeredRate=11Mbps --phyRate=DsssRate11Mbps --simulationTime=2" | ||
Waf: Entering directory `/home/mihai/facultate/ns-3-dev/build' | Waf: Entering directory `/home/mihai/facultate/ns-3-dev/build' |