Manual de simulare a rețelei ns-3. Capitolele 1, 2

Acest articol deschide o serie de publicații cu traducerea manualului "ns-3 Tutorial Release ns-3.29" pentru simulatorul de rețele ns-3.

Manual de simulare a rețelei ns-3. Capitolele 1, 2

Acest document este o traducere a documentului original în engleză, care a fost scris în reStructuredText pentru Sphinx și este stocat în directorul doc/tutorial al codului sursă ns-3.

1 Prefață
1.1 Despre ns-3
1.2 Pentru utilizatorii ns-2
1.3 Participarea la proiect
1.4 Organizarea manualului
2 Surse de informație
2.1 Rețea
2.2 Git
2.3 WAF
2.4 Mediu de dezvoltare
2.5 Programarea socket-urilor
capitol 3
capitol 4
capitolul 5
capitolul 6
capitolul 7
capitolele 8, 9

Descărcați traducerea într-un fișier pdf

Documentația inițială pentru proiectul ns-3 este disponibilă în cinci forme:

Prefață

Simulatorul ns-3 este un simulator de rețea cu evenimente discrete, destinat în principal cercetării și utilizării în scopuri educaționale. Proiectul care dezvoltă ns-3 a început în 2006 și este un proiect open-source.

Scopul acestui ghid este de a prezenta ns-3 utilizatorilor noi într-o manieră sistematică și structurată. Uneori, un începător poate avea dificultăți în a obține informațiile necesare și a le transforma în modelare funcțională. În acest ghid vom implementa câteva exemple de modelare, explicând și evidențiind conceptele și caracteristicile-cheie pe parcurs.

Pe parcursul prezentării, vom oferi documentația completă pentru ns-3 și vom include linkuri către codul sursă pentru cei interesați de o înțelegere mai profundă a funcționării sistemului.

La început, este important să menționăm câteva aspecte cheie:

  • ns-3 are un cod sursă deschis, proiectul își propune să mențină un mediu deschis în care cercetătorii pot contribui și împărtăși realizările lor software.
  • ns-3 nu este o extensie compatibilă înapoi cu ns-2, ci un nou simulator. Ambele simulatoare sunt scrise în C++, dar ns-3 reprezintă un nou simulator care nu suportă API-urile ns-2.

1.1 Despre ns-3

Simulatorul ns-3 a fost dezvoltat pentru a oferi o platformă deschisă și extensibilă pentru modelarea rețelelor, cercetarea rețelilor și educație. Pe scurt, ns-3 oferă modele ale modului în care sunt implementate și funcționează rețelele de transfer de date și oferă utilizatorului un motor de simulare pentru a desfășura experimente de simulare. Motivele pentru a utiliza ns-3 pot fi situații în care este necesară realizarea unei cercetări care este dificilă sau imposibilă de efectuat pe un sistem real, posibilitatea de a studia comportamentul unei sisteme într-un mediu strict controlat și reproductibil, precum și de a învăța despre modul în care funcționează rețelele.

Utilizatorii vor observa că setul de modele furnizat în ns-3 este concentrat pe modelarea funcționării protocoalelor de internet și a rețelelor, dar ns-3 nu este limitat doar la sistemele de internet; unii utilizatori folosesc ns-3 pentru a modela sisteme care nu se bazează pe tehnologiile internetului.

Există o mulțime de instrumente de modelare a rețelelor. Mai jos sunt prezentate câteva trăsături distinctive ale ns-3 în comparație cu alte instrumente.

  • ns-3 a fost dezvoltat ca un set de biblioteci care pot fi combinate între ele, precum și cu alte biblioteci software externe. În timp ce unele platforme de modelare oferă utilizatorilor un mediu integrat unitar cu o interfață grafică de utilizator care gestionează întreaga activitate, ns-3 este mai modular în această privință. Cu ns-3 pot fi utilizate mai multe animații externe, instrumente de analiză a datelor și vizualizare. Cu toate acestea, utilizatorii se așteaptă să lucreze în linia de comandă și cu instrumente de dezvoltare software C++ și / sau Python.
  • ns-3 este utilizat în principal în sistemele Linux sau macOS, deși există suport pentru sistemele BSD, precum și pentru platformele Windows capabile să compileze cod pentru Linux, cum ar fi Windows Subsystem for Linux sau Cygwin. Visual Studio nativ pentru Windows nu este în prezent suportat, deși dezvoltatorul lucrează la implementarea acestei funcționalități. Utilizatorii Windows pot folosi, de asemenea, o mașină virtuală cu Linux.
  • ns-3 nu este un produs software oficial susținut de vreo companie. Suportul pentru ns-3 este oferit cu maximum de efort pe forumul utilizatorilor ns-3 (ns-3-users@googlegroups.com).

1.2 Pentru utilizatorii ns-2

Pentru cei care sunt familiarizați cu ns-2 (un instrument popular, predecesor al ns-3), cea mai notabilă schimbare externă la trecerea la ns-3 este schimbarea limbajului de scripting. Programele în ns-2 sunt scrise în OTcl, iar rezultatele simulării pot fi vizualizate folosind animatorul de rețea nam. În ns-2, nu este posibil să pornești o simulare exclusiv din C++ (adică ca un program main() fără nicio OTcl). Mai mult, unele componente ns-2 sunt scrise în C++, iar altele în OTcl. În ns-3, simulatorul este scris complet în C++ cu legături opționale Python. Prin urmare, scenariile de simulare pot fi scrise atât în C++, cât și în Python. Sunt disponibile noi animatori și vizualizatori, iar acestea continuă să fie dezvoltate. Deoarece ns-3 generează fișiere de urmărire a pachetelor pcap, se pot utiliza și alte utilitare pentru a analiza urmele. În acest ghid, ne vom concentra mai întâi pe scenariile implementate în C++ și interpretarea rezultatelor prin analiza fișierelor de urmărire.

Dar există și asemănări (de exemplu, ambele instrumente sunt bazate pe obiecte C++, o parte din codul ns-2 a fost portată în ns-3). Pe măsură ce ne desfășurăm explicațiile, vom încerca să evidențiem diferențele dintre ns-2 și ns-3.

O întrebare pe care o auzim frecvent este: "Ar trebui să continui să folosesc ns-2 sau să trec la ns-3?" În opinia autorului, dacă utilizatorul nu este în niciun fel atașat de ns-2 (fie bazat pe confortul și cunoștințele existente despre ns-2, fie pe baza unui model de simulare specific disponibil doar în ns-2), atunci utilizarea ns-3 va fi mai productivă din următoarele motive:

  • ns-3 este activ întreținut cu o listă de discuții a utilizatorilor activă și receptivă, în timp ce ns-2 este susținut doar superficial și nu a văzut modificări semnificative în arborele său principal de cod de mai bine de zece ani.
  • ns-3 oferă funcții care nu sunt disponibile în ns-2, cum ar fi mediu de execuție pentru codul de implementare (permițând utilizatorilor să ruleze codul de implementare real în simulator).
  • ns-3 oferă un nivel de abstractizare de bază mai scăzut comparativ cu ns-2, ceea ce îi permite să corespundă mai bine modului în care interacționează sistemele reale. Unele limitări descoperite în ns-2 (de exemplu, suportul corect pentru mai multe tipuri de interfețe pe un nod) au fost corectate în ns-3.

Datorită istoriei sale îndelungate, ns-2 dispune de un set mai diversificat de module suportate decât ns-3. Cu toate acestea, ns-3 oferă modele mai detaliate în mai multe domenii populare de cercetare (inclusiv modele complexe LTE și WiFi), iar suportul său pentru codul de implementare permite o gamă foarte largă de modele de înaltă precizie. Utilizatorii ar putea fi surprinși să afle că întreaga stivă de rețea Linux poate fi încorporată într-un nod ns-3 utilizând cadrul de execuție directă a codului (DCE). Modelele din ns-2 pot fi uneori portate în ns-3, în special dacă acestea au fost implementate în C++.

Dacă aveți dubii, o recomandare bună ar fi să analizați ambele simulatoare (precum și alte simulatoare), în special modelele disponibile pentru cercetarea dumneavoastră, dar fiți conștienți că rezultatul poate fi mai bun folosind un instrument care este în prezent activ dezvoltat și susținut (ns-3).

1.3 Participarea la proiect

ns-3 este un simulator științific și educațional pentru comunitatea de cercetare. Acesta se va baza pe contribuțiile curente ale comunității în dezvoltarea de noi modele, depanarea sau întreținerea celor existente și schimbul de rezultate. Există o anumită politică care, sperăm, va încuraja oamenii să contribuie la ns-3, așa cum au făcut pentru ns-2:

  • Licențiere cu sursă deschisă bazată pe compatibilitatea cu licența GNU GPLv2.
  • wiki.
  • Pagina Codul colaboratorilor, similar cu pagina populară pentru ns-2.
  • Utilizarea GitLab.com, inclusiv sistemul de urmărire a erorilor:
    https://www.gitlab.com/nsnam

Înțelegem că, chiar dacă citiți acest document, este posibil să nu planificați să contribuiți la el în această etapă. Dar dorim să știți că a contribui se aliniază cu spiritul proiectului și că feedback-ul dumneavoastră despre experiența timpurie cu ns-3 (de exemplu, "această secțiune a manualului nu a fost clară ..."), raportarea documentației depășite sau comentariile din cod etc. vor fi apreciate. Modalitatea preferată de a trimite corecțiile este fie să faceți un fork al proiectului și să creați o cerere de unire, fie să deschideți o cerere pe trackerul nostru și să adăugați un patch. https://www.gitlab.com/nsnam Aceast ghid presupune că utilizatorii noi pot inițial să navigheze, de exemplu, pe un astfel de parcurs:

1.4 Organizarea manualului

Încercați să descărcați și să adunați o copie;

  • Încercați să rulați câteva exemple de programe;
  • Încercați să rulați câteva exemple de programe;
  • Vezi rezultatul simulării și încearcă să-l ajustezi.
    În cele din urmă, am încercat să organizăm prezentarea conform acestor pași.

Capitolul 2

Surse de informație

2.1 Rețea

Există câteva resurse importante despre care trebuie să știe orice utilizator al ns-3. Site-ul web principal se află la: https://www.nsnam.org
și oferă acces la informații de bază despre sistemul ns-3. Documentația detaliată este disponibilă prin intermediul site-ului principal la: https://www.nsnam.org/documentation/.

Pe aceeași pagină web, puteți găsi și documente referitoare la arhitectura sistemului.

Există o pagină wiki care completează site-ul principal ns-3, pe care o găsiți la: https://www.nsnam.org/wiki/.

Acolo veți găsi răspunsuri la întrebările frecvente pentru utilizatori și dezvoltatori, precum și ghiduri pentru depanare, cod terț, documente etc.
Codul sursă poate fi găsit și vizualizat pe GitLab.com:
https://gitlab.com/nsnam/.

Acolo în depozitul numit ns-3-dev se află arborele curent de dezvoltare. Versiunile anterioare și depozitele experimentale ale dezvoltatorilor nucleului pot fi găsite de asemenea sub Mercurial pe vechiul site al proiectului la:
http://code.nsnam.org.

2.2 Git

Sistemele software complexe necesită o modalitate de a gestiona organizarea și modificarea codului sursă și a documentației de bază. Există multe moduri de a realiza acest lucru, iar voi ați auzit probabil despre unele dintre sistemele folosite în mod obișnuit pentru aceasta. Până de curând, proiectul ns-3 a folosit Mercurial ca sistem de control al versiunilor, dar în decembrie 2018, am trecut la utilizarea Git. Deși nu trebuie să știți multe despre Git pentru a citi acest ghid, vă recomandăm să vă familiarizați cu el și să-l folosiți pentru a accesa codul sursă. GitLab.com oferă resurse pentru a învăța abilitățile de bază la: https://git-scm.com/book/ru/v2.

2.3 WAF

După ce ați descărcat codul sursă pe computerul dvs., pentru a obține un program funcțional, va trebui să-l compilați. La fel ca în cazul gestionării codului sursă, există o mulțime de instrumente disponibile pentru a îndeplini această funcție. Cel mai cunoscut dintre aceste instrumente este, probabil, make. Deși acest instrument este cel mai celebru, merită menționat că devine cel mai complex de utilizat într-o sistem foarte mare și flexibil configurabil. Acesta a fost motivul pentru care au fost dezvoltate multe alternative. Recent, au fost create astfel de sisteme folosind limbajul Python.

În proiectul ns-3 se folosește sistemul de construire Waf. Este o generație nouă de sisteme de construire bazate pe Python. Pentru a construi sistemul existent ns-3, nu trebuie să cunoașteți Python.

Pentru cei interesați de detaliile utilizării Waf, există o carte disponibilă la:
https://waf.io/book/
și codul curent:
https://gitlab.com/ita1024/waf/.

2.4 Mediu de dezvoltare

Așa cum s-a menționat mai sus, scripturile în ns-3 sunt scrise în C++ sau Python. Majoritatea API-ului ns-3 este disponibil în Python, însă modelele sunt scrise în C++. Acest ghid presupune că aveți cunoștințe despre programarea orientată pe obiect în C++. Pe parcursul expunerii, vom dedica ceva timp revizuirii conceptelor mai avansate și, posibil, unor particularități necunoscute ale limbajului, cum ar fi idiomele și șabloanele de design. Nu dorim ca acest ghid să devină un manual de C++, așa că ne așteptăm la o stăpânire de bază a limbajului. Există multe surse de informații despre C++ disponibile online sau în format tipărit.

Dacă sunteți începător în C++, înainte de a continua, învățați elementele de bază ale limbajului, folosind un manual sau un site web dedicat învățării sau rețetelor gata făcute. De exemplu, acesta: https://github.com/ashtanyuk/CPP-2018.

Pe Linux, sistemul ns-3 utilizează câteva componente din instrumentația proiectului GNU. Instrumentația este un set de unelte de programare disponibile în acest mediu software. Pentru o privire rapidă asupra a ceea ce este inclus în uneltele GNU, consultați. http://en.wikipedia.org/wiki/GNU_toolchain.

Simulatorul ns-3 folosește gcc, GNU binutils și gdb. Totuși, nu folosim make sau autotools din uneltele GNU pentru a construi proiectul. Pentru aceste funcții, utilizăm Waf.

Pe macOS se utilizează un set de instrumente Xcode. Utilizatorii ns-3 pe Mac sunt sfătuiți să instaleze Xcode și pachetele instrumentelor de linie de comandă din Apple App Store, precum și, pentru informații suplimentare, să viziteze pagina de wiki pentru instalarea ns-3: (https://www.nsnam.org/wiki/Installation).

În general, autorul ns-3 lucrează într-un mediu Linux sau Unix-like. Pentru cei care lucrează pe Windows, există medii care imită într-o anumită măsură mediul Linux. Pentru acești utilizatori, proiectul ns-3 a susținut în trecut (dar nu acum) dezvoltarea în mediu Cygwin. Pentru detalii despre descărcare și informații suplimentare despre Cygwin și ns-3, vizitați pagina wiki ns-3:
http://www.cygwin.com/.

MinGW nu este în prezent susținut oficial. O altă alternativă la Cygwin este instalarea unui mediu virtual, cum ar fi serverul VMware, unde se poate instala Linux.

2.5 Programarea socket-urilor

În exemplele utilizate în acest ghid, vom folosi capacitățile de bază ale API-ului pentru socket-urile Berkeley (Berkeley Sockets). Dacă sunteți novice în privința socket-urilor, vă recomandăm să vă familiarizați cu API-ul și câteva utilizări comune ale acestuia. Ca o bună revizuire a programării socket-urilor TCP/IP, recomandăm: "TCP/IP Sockets in C", Donahoo și Calvert.

Există un site web asociat care conține sursa exemplelor din carte, pe care o puteți găsi la:
http://cs.baylor.edu/~donahoo/practical/CSockets/.

Dacă înțelegeți primele patru capitole ale cărții (sau pentru cei care nu au acces la o copie a cărții, clienții și serverele echo, prezentate pe site-ul web de la linkul de mai sus), aceasta va fi suficient pentru a înțelege tutorialul. Există o carte similară
"Multicast Sockets, Multicast Sockets", Makofske și Almeroth.

Acesta acoperă materialul de care ați putea avea nevoie dacă doriți să studiați în distribuția exemplele de multicast.

Continuare: capitol 3

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster