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:
In cadrul laboratoarelor, vom folosi masina virtuala pe care o puteti descarca de aici. Pe VM au fost deja executati pasii de configurare de mai jos.
Pentru inceput, puteti parcurge Tutorial ns-3, indeosebi urmatoarele sectiuni:
Î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
. Putem rula orice exemplu astfel:
student@isrm-vm:~/ns3$ ./waf --run wifi-tcp Waf: Entering directory `/home/student/ns3/build' Waf: Leaving directory `/home/student/ns3/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 puteți specifica calea completă către codul sursă:
student@isrm-vm:~/ns3$ ./waf --run examples/wireless/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:~/ns3$ ./waf --run "wifi-tcp --pcap --simulationTime=3" Waf: Entering directory `/home/student/ns3/build' Waf: Leaving directory `/home/student/ns3/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:~/ns3$ ls AccessPoint*.pcap Station*.pcap AccessPoint-0-0.pcap Station-1-0.pcap
Iată un exemplu de schimb de pachete Wi-Fi 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/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
Î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 receptorilorMAC
:LMAC
(lower MAC
): accesul la mediu (DCF
/EDCA
ca algoritmi de backoff pentru evitarea coliziunilor), RTS/CTS
, ACK
-uri de nivel 2UMAC
(upper MAC
): beacon, probe request/probe response, WPA2
etc.IPv4
, TCP
/UDP
- tipul de trafic între noduriMai 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: