Differences

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

Link to this comparison view

isrm:laboratoare:new:01 [2019/12/27 13:10]
mbarbulescu [Rulare exemple existente]
isrm:laboratoare:new:01 [2020/02/24 20:26] (current)
mbarbulescu
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.) creat cu scopul de a oferi modele pentru studiul circulației unui pachet în rețea și de a oferi un engine pentru simulări de rețele complexe (noduri, modele de propagare, trafic UDP/TCP etc.). Pe lângă acestea oferă mecanism de tracing text și în format pcap. 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. +''​ns-3''​ este un simulator de rețele (Ethernet, WiFi, 4G etc.) creat cu scopul de a oferi modele pentru studiul circulației unui pachet în rețea și de a oferi un engine pentru simulări de rețele complexe (noduri, modele de propagare, trafic UDP/TCP etc.). Pe lângă acestea oferă ​un mecanism de tracing ​atat in format ​text, cat și în format pcap. 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. 
  
 **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, 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, 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.
  
-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 începutdar și în timpul laboratoarelor de ISRM 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>​
  
   * 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-get install libgsl-dev gsl-bin libgslcblas0 \+student@isrm-vm-2020:​~$ sudo apt update 
 +student@isrm-vm-2020:~$ 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 24: Line 26:
 </​note>​ </​note>​
  
-   * Clonăm codul sursă al simulatorului și ne mutăm pe ultima versiune a sa 3.30:+   * Clonăm codul sursă al simulatorului și ne mutăm pe versiunea ​3.29:
  
 <code bash> <code bash>
-student@isrm-vm-2020:​~$ git clone https://​gitlab.com/​nsnam/​ns-3-dev.git +student@isrm-vm-2020:​~$ git clone https://​gitlab.com/​b12mihai1/​ns-3-dev.git 
-student@isrm-vm-2020:​~$ cd ns-3-dev +student@isrm-vm-2020:​~$ cd ~/ns-3-dev 
-student@isrm-vm-2020:​~$ git checkout -b release_ns-3.30.1 ​ns-3.30.1 +student@isrm-vm-2020:​~/ns-3-dev$ git checkout -b isrm_2020 remotes/​origin/​isrm_2020 
-student@isrm-vm-2020:​~$ git branch ​-vvv +student@isrm-vm-2020:~/ns-3-dev$ git submodule init 
-  ​master ​         da1b41ed1 [origin/master] tcp: Ensure that congestion state is set after every notification +student@isrm-vm-2020:​~/ns-3-dev$ git submodule update ​--remote --merge 
-* release_ns-3.30.1 82c05e41a Update RELEASE_NOTES for ns-3.30.1+student@isrm-vm-2020:​~/ns-3-dev$ git submodule foreach git pull origin master ​  # in caz ca cea anterioara nu ne muta pe ultimul commit din master 
 +student@isrm-vm-2020:~/ns-3-dev$ git branch -vvv
 </​code>​ </​code>​
  
Line 50: Line 53:
 </​code>​ </​code>​
  
-Versiunea de ''​g++''​ atât pe sistemele din laborator cât și din mașina virtuală este ''​7.4.0''​ și are suport pentru C++14.+Versiunea de ''​g++''​ atât pe sistemele din laboratorcât și din mașina virtuală este ''​7.4.0''​ și are suport pentru C++14.
  
 E posibil ca cei de la ns-3 să fi hardcodat în folderul rădăcină în ''​wscript''​ standardul. E suficient să modificați linia următoare și puteți obține by default suportul pentru C++14: E posibil ca cei de la ns-3 să fi hardcodat în folderul rădăcină în ''​wscript''​ standardul. E suficient să modificați linia următoare și puteți obține by default suportul pentru C++14:
Line 92: Line 95:
 </​code>​ </​code>​
  
 +</​spoiler>​
 ===== Rulare exemple existente ===== ===== Rulare exemple existente =====
 +
 +  - se va folosi instalarea din ~/​Desktop/​ISRM/​ns-3-dev,​ pregătită cu instrucțiunile de mai sus
 +  - citit [[https://​www.nsnam.org/​docs/​tutorial/​html/​index.html|Tutorial ns-3]], pe porțiuni
 +  - î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]], ​
 +  - scopul este de a rula exemplele ''​first.cc,​ second.cc, ..., sixth.cc''​ din examples/​tutorial.
  
 Î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). Exemple de simulări (în afara celor pe care le veți primi pentru laboratorul de ISRM) găsiți î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. O dată ce un build ''​waf'' ​ni s-a terminat ​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. Odată ce build-ul de ''​waf''​ s-a incheiat ​cu succes la pasul anterior și ''​hello-simulator''​ a rulat, putem rula orice exemplu astfel:
  
 <code bash> <code bash>
Line 134: Line 143:
 </​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>
Line 145: Line 154:
 {{:​isrm:​laboratoare:​new:​sample-pcap-caputre-ns3.png?​500|}} {{:​isrm:​laboratoare:​new:​sample-pcap-caputre-ns3.png?​500|}}
  
-Iată și cum 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 169: Line 178:
 ===== Debugging cu valgrind/​gdb ===== ===== Debugging cu valgrind/​gdb =====
  
-Întrucât putem greși la scripturi ​''​waf''​ ne oferă posibilitatea de a ne rula scriptul cu ''​valgrind''​ respectiv ''​gdb''​. ​+Întrucât putem comite greseli in cadrul script-urilor, ​''​waf''​ ne oferă posibilitatea de a ne rula scriptul cu ''​valgrind''​respectiv ''​gdb''​. ​
  
 Pentru exemplul nostru: Pentru exemplul nostru:
Line 202: Line 211:
 ===== Development ===== ===== Development =====
  
-  * Pentru ​lucru 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+  * 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>
-Dacă deja folosiți Visual Studio Code acasă puteți ​pe host să vă instalați extensia [[https://​code.visualstudio.com/​docs/​remote/​remote-overview|Remote development]] dar trebuie ​apoi extensiile instalate să le reinstalați pe Visual Studio Code-ul vostru manual și pentru "​remote"​.+Dacă deja folosiți Visual Studio Code acasăputeți să instalați extensia [[https://​code.visualstudio.com/​docs/​remote/​remote-overview|Remote development]]dar trebuie ​ca extensiile instalate ​local să le reinstalați pe Visual Studio Code-ul vostru manual și pentru ​mediul ​"​remote"​.
 </​note>​ </​note>​
  
isrm/laboratoare/new/01.1577445013.txt.gz · Last modified: 2019/12/27 13:10 by mbarbulescu
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