This shows you the differences between two versions of the page.
isrm:laboratoare:new:01 [2021/01/01 17:37] vlad.traista [Instalare și configurare] |
isrm:laboratoare:new:01 [2021/01/01 18:24] (current) vlad.traista [Development] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Laborator 01: Introducere în ns-3 ====== | ====== Laborator 01: Introducere în ns-3 ====== | ||
- | ''ns-3'' este un simulator de rețele (''Ethernet'', ''WiFi'', ''4G'' etc.) ce oferă: | + | ''ns-3'' este un simulator de rețele (''Ethernet'', ''Wi-Fi'', ''4G'' etc.) ce oferă: |
* modele pentru studiul circulației unui pachet în rețea | * modele pentru studiul circulației unui pachet în rețea | ||
* un engine pentru simulări de rețele complexe (noduri, modele de propagare, trafic ''UDP''/''TCP'' etc.) | * un engine pentru simulări de rețele complexe (noduri, modele de propagare, trafic ''UDP''/''TCP'' etc.) | ||
* un mecanism de tracing atat in format text, cat și în format pcap. | * un mecanism de tracing atat in format text, cat și în format pcap. | ||
- | Simulatorul este scris în ''C++'', iar modelele se pot dezvolta în ''C++'' sau ''Python''. In cadrul laboratoarelor vom folosi și vom dezvolta modele în ''C++'' deoarece suportul oferit in ''ns-3'' este mai bun decat cel pentru ''Python''. | + | Simulatorul este scris în ''C++'', iar modelele se pot dezvolta în ''C++'' sau ''Python''. In cadrul laboratoarelor vom folosi și vom dezvolta modele în ''C++'' deoarece capabilitatile si suportul oferite in ''ns-3'' sunt mai bune decat cele pentru ''Python''. |
**Obiectiv:** Acest laborator oferă o idee de bază a modului în care funcționează simulatorul: | **Obiectiv:** Acest laborator oferă o idee de bază a modului în care funcționează simulatorul: | ||
Line 127: | Line 127: | ||
===== Rulare exemple existente ===== | ===== Rulare exemple existente ===== | ||
- | - se va folosi instalarea din ~/Desktop/ISRM/ns-3-dev, pregătită cu instrucțiunile de mai sus | + | Pentru inceput, puteti parcurge [[https://www.nsnam.org/docs/tutorial/html/index.html|Tutorial ns-3]], indeosebi urmatoarele sectiuni: |
- | - citit [[https://www.nsnam.org/docs/tutorial/html/index.html|Tutorial ns-3]], pe porțiuni | + | - [[https://www.nsnam.org/docs/tutorial/html/conceptual-overview.html|Conceptual Overview]] |
- | - în particular, secțiunile: [[https://www.nsnam.org/docs/tutorial/html/conceptual-overview.html|Conceptual Overview]], [[https://www.nsnam.org/docs/tutorial/html/building-topologies.html|Building Topologies]], [[https://www.nsnam.org/docs/tutorial/html/tracing.html|Tracing]], | + | - [[https://www.nsnam.org/docs/tutorial/html/building-topologies.html|Building Topologies]] |
- | - scopul este de a rula exemplele ''first.cc, second.cc, ..., sixth.cc'' din examples/tutorial. | + | - [[https://www.nsnam.org/docs/tutorial/html/tracing.html|Tracing]] |
- | În cadrul laboratorului ne vom concentra pe simulări Wi-Fi (IEEE 802.11). Exemple de simulări (în afara celor pe care le veți primi pentru laboratorul de ISRM) găsiți în ''ns3/examples/wireless'' | + | În cadrul laboratorului ne vom concentra pe simulări Wi-Fi (''IEEE 802.11''). Puteti gasi exemple de simulări (în afara celor pe care le veți primi pentru laboratorul de ISRM) în ''ns3/examples/wireless'' |
- | Ne propunem să rulăm un exemplu simplu: ''ns3/examples/wireless/wifi-tcp.cc''. Acesta constă dintr-o stație (STA) care se conectează la un access point (AP) folosind 802.11n. Traficul este uplink de la STA la AP. Odată ce build-ul de ''waf'' s-a incheiat cu succes la pasul anterior și ''hello-simulator'' a rulat, putem rula orice exemplu astfel: | + | Ne propunem să rulăm un exemplu simplu: ''ns3/examples/wireless/wifi-tcp.cc''. Acesta constă dintr-o stație (''STA'') care se conectează la un access point (''AP'') folosind ''802.11n''. Traficul este ''uplink'' de la ''STA'' la ''AP''. Putem rula orice exemplu astfel: |
<code bash> | <code bash> | ||
- | student@isrm-vm-2020:~/ns-3-dev$ ./waf --run wifi-tcp | + | student@isrm-vm:~/ns3$ ./waf --run wifi-tcp |
- | Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Entering directory `/home/student/ns3/build' |
- | Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Leaving directory `/home/student/ns3/build' |
Build commands will be stored in build/compile_commands.json | Build commands will be stored in build/compile_commands.json | ||
'build' finished successfully (1.282s) | 'build' finished successfully (1.282s) | ||
Line 150: | Line 150: | ||
</code> | </code> | ||
- | Alternativ îi puteți specifica calea completă către codul sursă: | + | Alternativ puteți specifica calea completă către codul sursă: |
<code bash> | <code bash> | ||
- | student@isrm-vm-2020:~/ns-3-dev$ ./waf --run examples/wifi-tcp | + | student@isrm-vm:~/ns3$ ./waf --run examples/wireless/wifi-tcp |
</code> | </code> | ||
- | Dacă vrem să transmitem parametrii în linia de comandă simulării (deoarece ''wifi-tcp'' suportă) o putem face cu ghilimele: | + | Dacă vrem să transmitem parametrii în linia de comandă simulării (deoarece ''wifi-tcp'' suportă), o putem face cu ghilimele: |
<code bash> | <code bash> | ||
- | student@isrm-vm-2020:~/ns-3-dev$ ./waf --run "wifi-tcp --pcap --simulationTime=3" | + | student@isrm-vm:~/ns3$ ./waf --run "wifi-tcp --pcap --simulationTime=3" |
- | Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Entering directory `/home/student/ns3/build' |
- | Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Leaving directory `/home/student/ns3/build' |
Build commands will be stored in build/compile_commands.json | Build commands will be stored in build/compile_commands.json | ||
'build' finished successfully (1.287s) | 'build' finished successfully (1.287s) | ||
Line 172: | Line 172: | ||
</code> | </code> | ||
- | Întrucât opțiunea ''%%--%%pcap'' activează mecanismul de [[https://www.nsnam.org/docs/tutorial/html/tracing.html#pcap|pcap tracing din ns-3]] (vom discuta mai târziu despre acesta) putem vizualiza cu wireshark următoarele capturi care se generează în directorul curent: | + | Întrucât opțiunea ''%%--%%pcap'' activează mecanismul de [[https://www.nsnam.org/docs/tutorial/html/tracing.html#pcap|pcap tracing din ns-3]] (vom discuta mai târziu despre acesta), putem vizualiza cu wireshark următoarele capturi care se generează în directorul curent: |
<code bash> | <code bash> | ||
- | student@isrm-vm-2020:~/ns-3-dev$ ls AccessPoint*.pcap Station*.pcap | + | student@isrm-vm:~/ns3$ ls AccessPoint*.pcap Station*.pcap |
AccessPoint-0-0.pcap Station-1-0.pcap | AccessPoint-0-0.pcap Station-1-0.pcap | ||
</code> | </code> | ||
- | Iată un exemplu de schimb de pachete wifi pentru procedura de asociere a stației la access point: | + | Iată un exemplu de schimb de pachete Wi-Fi pentru procedura de asociere a stației la access point: |
{{:isrm:laboratoare:new:sample-pcap-caputre-ns3.png?500|}} | {{:isrm:laboratoare:new:sample-pcap-caputre-ns3.png?500|}} | ||
- | Avem si un al doilea exemplu care arată traficul TCP schimbat între dispozitive: | + | Avem si un al doilea exemplu care arată traficul ''TCP'' schimbat între dispozitive: |
{{:isrm:laboratoare:new:capture-tcp_traffic_ns3.png?500|}} | {{:isrm:laboratoare:new:capture-tcp_traffic_ns3.png?500|}} | ||
Line 189: | Line 189: | ||
===== Structura unui cod sursă al unei simulări în C++ ===== | ===== Structura unui cod sursă al unei simulări în C++ ===== | ||
- | Parcurgem codul sursă din ''ns3/examples/wifi-tcp.cc'' | + | Parcurgem codul sursă din ''ns3/examples/wireless/wifi-tcp.cc'' |
Urmariți și explicațiile de aici: https://www.nsnam.org/docs/tutorial/html/building-topologies.html#building-a-wireless-network-topology | Urmariți și explicațiile de aici: https://www.nsnam.org/docs/tutorial/html/building-topologies.html#building-a-wireless-network-topology | ||
===== Structura modelului Wi-Fi ===== | ===== Structura modelului Wi-Fi ===== | ||
- | În cadrul laboratorului ne vom concentra pe simulări Wi-Fi (IEEE 802.11). ''ns-3'' ne oferă posibilitatea de a configura toate nivelele din stiva OSI: | + | În cadrul laboratorului ne vom concentra pe simulări Wi-Fi (IEEE ''802.11''). ''ns-3'' ne oferă posibilitatea de a configura toate nivelele din stiva OSI: |
- | * PHY - modelul de canal, propagare, atenuare, senzitivitatea receptorilor | + | * ''PHY'' - modelul de canal, propagare, atenuare, senzitivitatea receptorilor |
- | * MAC: | + | * ''MAC'': |
- | * LMAC (lower MAC): accesul la mediu (DCF/EDCA ca algoritmi de backoff pentru evitarea coliziunilor), RTS/CTS, ACK-uri de nivel 2 | + | * ''LMAC'' (lower ''MAC''): accesul la mediu (''DCF''/''EDCA'' ca algoritmi de backoff pentru evitarea coliziunilor), ''RTS/CTS'', ''ACK''-uri de nivel 2 |
- | * UMAC (upper MAC): beacon, probe request/probe response, WPA2 etc. | + | * ''UMAC'' (upper ''MAC''): beacon, probe request/probe response, ''WPA2'' etc. |
- | * IPv4, TCP/UDP - tipul de trafic între noduri | + | * ''IPv4'', ''TCP''/''UDP'' - tipul de trafic între noduri |
{{:isrm:laboratoare:new:wifiarchitecture.png?600|}} | {{:isrm:laboratoare:new:wifiarchitecture.png?600|}} | ||
Line 212: | Line 212: | ||
<code bash> | <code bash> | ||
- | student@isrm-vm-2020:~/ns-3-dev$ ./waf --command-template="valgrind \ | + | student@isrm-vm:~/ns3$ ./waf --command-template="valgrind \ |
--leak-check=full --show-reachable=yes %s" \ | --leak-check=full --show-reachable=yes %s" \ | ||
--run wifi-tcp | --run wifi-tcp | ||
- | Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Entering directory `/home/student/ns3/build' |
- | Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' | + | Waf: Leaving directory `/home/student/ns3/build' |
Build commands will be stored in build/compile_commands.json | Build commands will be stored in build/compile_commands.json | ||
- | 'build' finished successfully (1.303s) | + | 'build' finished successfully (0.936s) |
- | ==21406== Memcheck, a memory error detector | + | ==2901== Memcheck, a memory error detector |
- | ==21406== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. | + | ==2901== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. |
- | ==21406== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info | + | ==2901== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info |
- | ==21406== Command: /home/vagrant/facultate/isrm/ns-3-dev/build/examples/wireless/ns3.30.1-wifi-tcp-debug | + | ==2901== Command: /home/student/ns3/build/examples/wireless/ns3-dev-wifi-tcp-debug |
- | ==21406== | + | |
+ | ==2901== | ||
(...) | (...) | ||
- | =21406== LEAK SUMMARY: | + | =2901== LEAK SUMMARY: |
(...) | (...) | ||
- | ==21406== For counts of detected and suppressed errors, rerun with: -v | + | ==2901== For counts of detected and suppressed errors, rerun with: -v |
- | ==21406== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) | + | ==2901== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) |
</code> | </code> | ||
Line 239: | Line 240: | ||
===== Development ===== | ===== Development ===== | ||
- | |||
- | * Pentru lucrul acasă vă recomandăm să folosiți instrucțiunile din pagina [[isrm:mv|setup ISRM]] deoarece are toate pachetele necesare (inclusiv Visual Studio Code cu toate dependențele necesare). | ||
<note tip> | <note tip> |