This is an old revision of the document!
ns-3
este un simulator de rețele (Ethernet
, Wi-Fi
, 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 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:
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:~/ns3$ ./waf --command-template="valgrind \ --leak-check=full --show-reachable=yes %s" \ --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 (0.936s) ==2901== Memcheck, a memory error detector ==2901== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==2901== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info ==2901== Command: /home/student/ns3/build/examples/wireless/ns3-dev-wifi-tcp-debug ==2901== (...) =2901== LEAK SUMMARY: (...) ==2901== For counts of detected and suppressed errors, rerun with: -v ==2901== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Exemple de pe wiki-ul nsnam pentru lucrul cu:
Pentru lucrul acasă vă recomandăm să folosiți instrucțiunile din pagina setup ISRM deoarece are toate pachetele necesare (inclusiv Visual Studio Code cu toate dependențele necesare).