This is an old revision of the document!
ns-3
este un simulator de rețele (Ethernet
, WiFi
, 4G
etc.) ce oferă:
UDP
/TCP
etc.)
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
.
Obiectiv: Acest laborator oferă o idee de bază a modului în care funcționează simulatorul:
Cele mai importante pagini de parcurs despre ns-3
la început, dar și în timpul laboratoarelor sunt:
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
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:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run wifi-tcp Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Build commands will be stored in build/compile_commands.json 'build' finished successfully (1.282s) 1.1s: 45.8086 Mbit/s 1.2s: 55.3472 Mbit/s (...) 10.9s: 50.8723 Mbit/s Average throughput: 52.1959 Mbit/s
Alternativ îi puteți specifica calea completă către codul sursă:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run examples/wifi-tcp
Dacă vrem să transmitem parametrii în linia de comandă simulării (deoarece wifi-tcp
suportă) o putem face cu ghilimele:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --run "wifi-tcp --pcap --simulationTime=3" Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Build commands will be stored in build/compile_commands.json 'build' finished successfully (1.287s) 1.1s: 45.8086 Mbit/s 1.2s: 55.3472 Mbit/s (...) 3.9s: 52.7565 Mbit/s Average throughput: 52.9017 Mbit/s
Întrucât opțiunea --pcap
activează mecanismul de 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:
student@isrm-vm-2020:~/ns-3-dev$ ls AccessPoint*.pcap Station*.pcap AccessPoint-0-0.pcap Station-1-0.pcap
Iată un exemplu de schimb de pachete wifi pentru procedura de asociere a stației la access point:
Avem si un al doilea exemplu care arată traficul TCP schimbat între dispozitive:
Parcurgem codul sursă din ns3/examples/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
Î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:
Mai multe detalii pe wiki-ul ns-3
Î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:
student@isrm-vm-2020:~/ns-3-dev$ ./waf --command-template="valgrind \ --leak-check=full --show-reachable=yes %s" \ --run wifi-tcp Waf: Entering directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Waf: Leaving directory `/home/vagrant/facultate/isrm/ns-3-dev/build' Build commands will be stored in build/compile_commands.json 'build' finished successfully (1.303s) ==21406== Memcheck, a memory error detector ==21406== 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 ==21406== Command: /home/vagrant/facultate/isrm/ns-3-dev/build/examples/wireless/ns3.30.1-wifi-tcp-debug ==21406== (...) =21406== LEAK SUMMARY: (...) ==21406== For counts of detected and suppressed errors, rerun with: -v ==21406== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Exemple de pe wiki-ul nsnam pentru lucrul cu: