Differences

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

Link to this comparison view

isrm:laboratoare:new:01 [2020/12/31 21:40]
vlad.traista [Laborator 01: Introducere în ns-3]
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. ​La ISRM vom folosi și vom dezvolta modele în C++ deoarece suportul ​este mai bun+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ă simulatorulcum se pregătește o simulare, unde se găsesc componentele internecum se configurează componentele de rețea, etcÎn principal ​se prezintă exemple simple și explicații bazate pe experimente simple, familiare unui student care a luat un curs introductiv de rețele.+**Obiectiv:​** Acest laborator oferă o idee de bază a modului în care funcționează simulatorul
 +  * cum se pregătește o simulare, unde se găsesc componentele interne 
 +  * cum se configurează componentele de rețea. 
 +  * in principal ​vom discuta ​experimente simple, familiare unui student care a luat un curs introductiv de rețele.
  
-Cele mai importante pagini de parcurs despre ''​ns-3''​ la început, dar și în timpul laboratoarelor ​de ISRM sunt:+Cele mai importante pagini de parcurs despre ''​ns-3''​ la început, dar și în timpul laboratoarelor sunt:
     * [[https://​www.nsnam.org/​docs/​tutorial/​html/​index.html|Tutorial pentru utilizatori]]     * [[https://​www.nsnam.org/​docs/​tutorial/​html/​index.html|Tutorial pentru utilizatori]]
     * [[https://​www.nsnam.org/​docs/​manual/​html/​index.html|Development & Manual]]     * [[https://​www.nsnam.org/​docs/​manual/​html/​index.html|Development & Manual]]
  
 ===== Instalare și configurare ===== ===== Instalare și configurare =====
-<​spoiler>​+ 
 +In cadrul laboratoarelor,​ vom folosi masina virtuala pe care o puteti descarca de [[https://​ocw.cs.pub.ro/​courses/​isrm/​mv|aici]]. Pe VM au fost deja executati pasii de configurare de mai jos. 
 + 
 +<​spoiler ​Pasi configurare masina virtuala>
  
   * Dependențele necesare ''​ns-3''​ sunt descrise în [[https://​www.nsnam.org/​wiki/​Installation|pagina de instalare]]. Pentru ISRM vom folosi următoarele pachete pe o distribuție Ubuntu:   * Dependențele necesare ''​ns-3''​ sunt descrise în [[https://​www.nsnam.org/​wiki/​Installation|pagina de instalare]]. Pentru ISRM vom folosi următoarele pachete pe o distribuție Ubuntu:
  
 <code bash> <code bash>
-student@isrm-vm-2020:~$ sudo apt update +student@isrm-vm:​~$ sudo apt update 
-student@isrm-vm-2020:~$ sudo apt -y install libgsl-dev gsl-bin libgslcblas0 \+student@isrm-vm:​~$ sudo apt -y install libgsl-dev gsl-bin libgslcblas0 \
     autoconf cvs bzr unrar \     autoconf cvs bzr unrar \
     sqlite sqlite3 libsqlite3-dev \     sqlite sqlite3 libsqlite3-dev \
Line 34: Line 40:
  
 <code bash> <code bash>
-student@isrm-vm-2020:~$ git clone https://​gitlab.com/​nsnam/​ns-3-dev.git +student@isrm-vm:​~$ git clone https://​gitlab.com/​nsnam/​ns-3-dev.git 
-student@isrm-vm-2020:~$ cd ~/​ns-3-dev +student@isrm-vm:​~$ cd ~/​ns-3-dev 
-student@isrm-vm-2020:​~/​ns-3-dev$ git checkout -b ns-332-rel ns-3.32+student@isrm-vm:​~/​ns-3-dev$ git checkout -b ns-332-rel ns-3.32
 </​code>​ </​code>​
  
Line 42: Line 48:
  
 <code bash> <code bash>
-student@isrm-vm-2020:~$ cd ~/​ns-3-dev/​examples +student@isrm-vm:​~$ cd ~/​ns-3-dev/​examples 
-student@isrm-vm-2020:~$ git clone https://​github.com/​isrm-lab/​ns3-labs.git +student@isrm-vm:​~$ git clone https://​github.com/​isrm-lab/​ns3-labs.git 
-student@isrm-vm-2020:~$ cd ~/​ns-3-dev/​examples/​ns3-labs && git log -1+student@isrm-vm:​~$ cd ~/​ns-3-dev/​examples/​ns3-labs && git log -1
 commit 5214caf7fbc39b280edf47154ed95f2fcca78a7c (HEAD -> master, origin/​master,​ origin/​HEAD) commit 5214caf7fbc39b280edf47154ed95f2fcca78a7c (HEAD -> master, origin/​master,​ origin/​HEAD)
 </​code>​ </​code>​
Line 51: Line 57:
  
 <code bash> <code bash>
-student@isrm-vm-2020:​~/​ns-3-dev$ ./waf configure --build-profile=debug --enable-examples --enable-tests +student@isrm-vm:​~/​ns-3-dev$ ./waf configure --build-profile=debug --enable-examples --enable-tests 
-student@isrm-vm-2020:​~/​ns-3-dev$ ./waf build -j4+student@isrm-vm:​~/​ns-3-dev$ ./waf build -j4
 </​code>​ </​code>​
  
Line 67: Line 73:
  
 <code bash> <code bash>
-student@isrm-vm-2020:​~/​ns-3-dev$ git diff wscript+student@isrm-vm:​~/​ns-3-dev$ git diff wscript
  
 diff --git a/wscript b/wscript diff --git a/wscript b/wscript
Line 88: Line 94:
  
 <code bash> <code bash>
-student@isrm-vm-2020:​~/​ns-3-dev$ ./waf --check-profile+student@isrm-vm:​~/​ns-3-dev$ ./waf --check-profile
 Waf: Entering directory `/​home/​student/​ns-3-dev/​build'​ Waf: Entering directory `/​home/​student/​ns-3-dev/​build'​
 Build profile: debug Build profile: debug
-student@isrm-vm-2020:​~/​ns-3-dev$ ./waf --run hello-simulator+student@isrm-vm:​~/​ns-3-dev$ ./waf --run hello-simulator
 Waf: Entering directory `/​home/​student/​ns-3-dev/​build'​ Waf: Entering directory `/​home/​student/​ns-3-dev/​build'​
 Waf: Leaving directory `/​home/​student/​ns-3-dev/​build'​ Waf: Leaving directory `/​home/​student/​ns-3-dev/​build'​
Line 97: Line 103:
 '​build'​ finished successfully (2.256s) '​build'​ finished successfully (2.256s)
 Hello Simulator Hello Simulator
-student@isrm-vm-2020:​~/​ns-3-dev$ ./test.py+student@isrm-vm:​~/​ns-3-dev$ ./test.py
 (...) (...)
 '​build'​ finished successfully (1.799s) '​build'​ finished successfully (1.799s)
Line 106: Line 112:
 Pentru a realiza grafice, trebuie sa instalam si pachetele de Python: Pentru a realiza grafice, trebuie sa instalam si pachetele de Python:
 <code bash> <code bash>
-student@isrm-vm-2020:~$ sudo apt-get update +student@isrm-vm:​~$ sudo apt-get update 
-student@isrm-vm-2020:~$ sudo apt-get install python3-pip +student@isrm-vm:​~$ sudo apt-get install python3-pip 
-student@isrm-vm-2020:~$ pip3 install matplotlib jupyter +student@isrm-vm:​~$ pip3 install matplotlib jupyter 
-student@isrm-vm-2020:~$ sudo ln -s ~/​.local/​bin/​jupyter-notebook /​usr/​bin/​jupyter-notebook+student@isrm-vm:​~$ sudo ln -s ~/​.local/​bin/​jupyter-notebook /​usr/​bin/​jupyter-notebook
 </​code>​ </​code>​
  
Line 115: Line 121:
  
 <code bash> <code bash>
-student@isrm-vm-2020:~$ jupyter-notebook+student@isrm-vm:​~$ jupyter-notebook
 </​code>​ </​code>​
  
Line 121: Line 127:
 ===== Rulare exemple existente ===== ===== Rulare exemple existente =====
  
-  - se va folosi instalarea din ~/​Desktop/​ISRM/​ns-3-devpregătită cu instrucțiunile de mai sus +Pentru inceputputeti 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 144: 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 166: 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 183: 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 206: 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 233: 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>
isrm/laboratoare/new/01.1609443653.txt.gz · Last modified: 2020/12/31 21:40 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