Ky kjo artikull hap një seri publikimesh me përkthimin e librit të mësimeve "" për simulatorin e rrjeteve ns-3.

Ky dokument është një përkthim i dokumentit origjinal në anglisht, i shkruar në për dhe ruhet në direktorinë doc/tutorial të kodit burimor të ns-3.
1 Parathënie
1.1 Rreth ns-3
1.2 Për përdoruesit e ns-2
1.3 Pjesëmarrja në projekt
1.4 Organizatë e udhëzuesit
2 Burime informacioni
2.1 Rrjeti
2.2 Git
2.3 WAF
2.4 Mjedisi zhvillimi
2.5 Programimi i soketëve
Dokumentacioni fillestar për projektin ns-3 është në dispozicion në pesë forma:
- Dokumentacioni i API-së së simulatorit: ns-3 .
- Udhëzues, manual dhe bibliotekë modelet për dhe .
- ns-3.
Kapitulli 1
Parathënie
Simulatori ns-3 është një simulator rrjeti me ngjarje të diskutueshme, i dizajnuar kryesisht për kërkime dhe përdorim në qëllime edukative. Projekti që zhvillon ns-3 filloi në vitin 2006 dhe është një projekt me kod të hapur.
Qëllimi i këtij udhëzuesi është të prezantojë ns-3 për përdoruesit e rinj në një strukturë sistematike. Ndonjëherë nxënësi ka vështirësi në marrjen e informacionit të nevojshëm dhe ta shndërrojë atë në modelizim funksional. Në këtë udhëzues, ne do të realizojmë disa shembuj modelizimi, duke ilustruar dhe shpjeguar konceptet dhe veçoritë kryesore.
Gjatë paraqitjes, ne do të ofrojmë dokumentacion të plotë mbi ns-3 dhe do të japim lidhje me kodin burimor për ata që janë të interesuar në një kuptim më të thellë të funksionimit të sistemit.
Në fillim, është e rëndësishme të theksohen disa pika kyçe:
- ns-3 ka kod të hapur, projekti përpiqet të mbështesë një mjedis të hapur, ku kërkuesit mund të kontribuojnë dhe të ndajnë arritjet e tyre programore.
- ns-3 nuk është një zgjerim përkatës i ns-2, është një simulator i ri. Të dy simulatorët janë shkruar në C++, por ns-3 është një simulator i ri që nuk mbështet interface të API-së së ns-2.
1.1 Rreth ns-3
Simulatori ns-3 është zhvilluar për të ofruar një platformë të hapur dhe të zgjerueshme për modelimin e rrjeteve, kërkimin në rrjet dhe arsimimin. Në thelb, ns-3 ofron modele se si janë realizuar dhe si funksionojnë rrjetet e transfertës së paketave dhe i jep përdoruesit një motor simulues për të kryer eksperimente imituese. Shkaku për të përdorur ns-3 mund të jetë situata kur është e nevojshme të kryhet një kërkim që është e vështirë ose e pamundur të realizohet në një sistem të vërtetë, mundësia për të studiuar sjelljen e sistemit në një ambient rigoroz të kontrolluar, si dhe për të mësuar se si funksionojnë rrjetet.
Përdoruesit do të vërejnë se grupi i modeleve që ofrohet në ns-3 është i fokusuara në modelimin e funksionimit të protokolleve të internetit dhe rrjeteve, por ns-3 nuk është i kufizuar vetëm në sistemet e internetit; disa përdorues e përdorin ns-3 për të modeluar sisteme që nuk janë të bazuara në teknologjitë e internetit.
Ekziston një gamë e gjerë mjetesh për modelimin e rrjeteve. Më poshtë janë disa karakteristika të veçanta të ns-3 krahasuar me mjete të tjera.
- ns-3 është zhvilluar si një grup bibliotekash që mund të mblidhen së bashku, si dhe me biblioteka të tjera softuerike të jashtme. Ndërsa disa platforma modelimi ofrojnë përdoruesve një ambient të integruar dhe të vetëm me një ndërfaqe grafike përdoruesi që menaxhon gjithë punën, ns-3 është më modulare në këtë drejtim. Me ns-3 mund të përdoren disa animatorë të jashtëm, mjete analize të dhënash dhe vizualizimi. Megjithatë, përdoruesit presin të punojnë me linjën e komandës dhe me mjete zhvillimi softuerik C++ dhe / ose Python.
- ns-3 përdoret kryesisht në sistemet Linux ose macOS, megjithëse ka mbështetje për sistemet BSD, si dhe për platformat Windows që janë në gjendje të kompilohet kodi për Linux, si Windows Subsystem për Linux ose Cygwin. Visual Studio që është vendas për Windows aktualisht nuk mbështetet, megjithatë zhvilluesi po punon për implementimin e kësaj mundësie. Përdoruesit e Windows gjithashtu mund të përdorin një makinë virtuale me Linux.
- ns-3 nuk është një produkt softuerik që mbështetet zyrtarisht nga ndonjë kompani. Mbështetja për ns-3 ofrohet me maksimumin e përkushtimit në forumet e përdoruesve të ns-3 (ns-3-users@googlegroups.com).
1.2 Për përdoruesit e ns-2
Për ata që janë njohur me ns-2 (një mjet popullar që i parapriu ns-3), kalimi në ns-3 ndryshimi më i dukshëm është gjuha e skenarëve. Programet në ns-2 janë shkruar në OTcl, dhe rezultatet e simulimit mund të vizualizohen duke përdorur animatorin e rrjeteve nam. Në ns-2 nuk është e mundur të nisni një simulim ekskluzivisht nga C++ (dmth si një program main() pa asnjë OTcl). Më tej, disa komponente të ns-2 janë shkruar në C++, ndërsa të tjera në OTcl. Në ns-3, simulatori është shkruar plotësisht në C++ me lidhje të opsionale Python. Prandaj, skenaret e simulimit mund të shkruhen si në C++, ashtu edhe në Python. Animatorë dhe vizualizues të rinj janë në dispozicion dhe vazhdojnë të zhvillohen. Meqenëse ns-3 gjeneron skedarë të ndjekjes së paketave pcap, mjete të tjera gjithashtu mund të përdoren për analizimin e ndjekjeve. Në këtë udhëzues, ne fillimisht do të fokusohemi në skenaret e zbatuara në C++ dhe interpreton rezultatin përmes analizës së skedarëve të ndjekjes.
Por ka edhe ngjashmëri (për shembull, të dy mjetet janë të bazuara në objekte C++, një pjesë e kodit të ns-2 është portuar në ns-3). Ndërsa po e paraqesim, ne do të përpiqemi të tregojmë ndryshimet midis ns-2 dhe ns-3.
Një pyetje që ne shpesh e dëgjojmë: "A duhet të vazhdoj të përdor ns-2 apo të kaloj në ns-3?" Sipas autorit, nëse përdoruesi në një mënyrë nuk është i varur nga ns-2 (në bazë të komoditetit personal dhe njohurisë ekzistuese për ns-2, ose në bazë të një modeli të veçantë imitimor që disponohet vetëm në ns-2), atëherë me ns-3 do të jetë më produktiv për këto arsye:
- ns-3 mbështetet aktivisht me një listë diskutimesh përdoruesish aktive dhe reaguese, ndërsa ns-2 mbështetet vetëm lehtë dhe që më shumë se dhjetë vjet nuk ka parë ndryshime të rëndësishme në pemën e saj të kodit.
- ns-3 ofron funksione që nuk janë të disponueshme në ns-2, siç është ambienti për ekzekutimin e kodit të realizimit (duke lejuar përdoruesit të ekzekutojnë kodin e realizimit real në simulator).
- ns-3 ofron një nivel më të ulët bazë të abstraksionit në krahasim me ns-2, duke i lejuar atij të përputhet më mirë me mënyrën si ndërveprojnë sistemet reale. Disa kufizime, të gjetura në ns-2 (për shembull, mbështetje e saktë për disa lloje ndërfaqesh në nyje) janë rregulluar në ns-3.
Falë historisë së saj të gjatë, ns-2 ka një gamë më të gjerë modulash të mbështetur se ns-3. Megjithatë, ns-3 ka modele më të detajuara në disa fushat e njohura të kërkimit (përfshirë modelet komplekse LTE dhe WiFi), mbështetja e implementimit të kodit të saj lejon një gamë të gjerë modelesh me saktësi të lartë. Përdoruesit mund të habiten kur mësojnë se e gjithë steka rrjetore Linux mund të inkorporohet në një nyje ns-3 duke përdorur kornizën e ekzekutimit të drejtpërdrejtë të kodit (DCE). Modelet nga ns-2 ndonjëherë mund të portohen në ns-3, veçanërisht nëse ato janë implementuar në C++.
Nëse keni dyshime, një rekomandim i mirë do të ishte të shqyrtonit të dy simuluesit (si dhe simulues të tjerë), veçanërisht modelet e disponueshme për kërkimin tuaj, por mbani në mend se rezultati juaj mund të jetë më i mirë duke përdorur një mjet që aktualisht po zhvillohet dhe mbështetet aktivisht (ns-3).
1.3 Pjesëmarrja në projekt
ns-3 është një simulator edukativo-shkencor për komunitetin kërkues. Ai do të mbështetet në kontributet aktuale të komunitetit në zhvillimin e modeleve të reja, debugimin ose mbështetje për ato ekzistuese dhe shkëmbimin e rezultateve. Ekziston një politikë që shpresojmë se do të nxisë njerëzit të kontribuojnë në ns-3, ashtu siç e bëjnë për ns-2:
- Licencimi me burim të hapur bazuar në përputhshmërinë me licencën GNU GPLv2.
- wiki.
- Faqja , e ngjashme me faqen popullore për ns-2.
- Përdorimi i GitLab.com, duke përfshirë sistemin e ndjekjes së gabimeve:
Ne e kuptojmë se nëse madje po e lexoni këtë dokument, ndoshta në këtë fazë nuk po planifikoni të kontribuoni në të. Por duam që të dini se kontributet janë në frymën e projektit dhe se komentet tuaja, edhe për përvojën tuaj të hershme me ns-3 (p.sh., "kjo seksion i manualit nuk ishte e qartë ..."), raportimi i dokumentacionit të vjetëruar ose komentet në kod etj., do të jenë të çmuara për ne. Mënyra e preferuar për të dërguar rregullime është ose të bëni një fork me rregullimet tuaja dhe të krijoni një kërkesë për bashkim, ose të krijoni një kërkesë në tracker-in tonë dhe të shtoni një patch. Ky udhëzues supozon se përdoruesit e rinj mund të fillojnë, për shembull, me këtë rrugë:
1.4 Organizatë e udhëzuesit
Të provoni të shkarkoni dhe të ndërtoni një kopje;
- Të provoni të ekzekutoni disa shembuj programesh;
- Të provoni të ekzekutoni disa shembuj programesh;
- Shihni rezultatet e simullimit dhe provoni ta përshtatni atë.
Në fund të fundit, përpiqëm të organizojmë paraqitjen në përputhje me këto hapa.
Kapitulli 2
Burimet e informacionit
2.1 Rrjeti
Ka disa burime të rëndësishme që çdo përdorues i ns-3 duhet të dijë. Webfaqja kryesore ndodhet në adresën:
dhe ofron akses në informacionin bazë rreth sistemit ns-3. Dokumentacioni i detajuar është i disponueshëm përmes webfaqes kryesore në adresën: .
Në këtë webfaqe, gjithashtu mund të gjeni dokumente lidhur me arkitekturën e sistemit.
Ekziston një faqe wiki që plotëson webfaqen kryesore të ns-3, e cila mund të gjendet në adresën: .
Atje do të gjeni përgjigje të pyetjeve të shpeshta për përdoruesit dhe zhvilluesit, si dhe udhëzime për zgjidhjen e problemeve, kod të palëve të treta, dokumente etj.
Kodine burimor mund ta gjeni dhe ta shihni në GitLab.com:
.
Po ashtu në depo të quajtur ns-3-dev ndodhet tregu aktual i zhvillimit. Publikimet e kaluara dhe depo eksperimentale të zhvilluesve të bërthamës gjithashtu mund të gjenden nën Mercurial në faqen e vjetër të projektit në adresën:
.
2.2 Git
Sistemet komplekse të programimit kanë nevojë për një mënyrë për të menaxhuar organizimin dhe ndryshimet në kodin dhe dokumentacionin themelor. Ka shumë mënyra për ta arritur këtë, dhe ndoshta keni dëgjuar për disa nga sistemet që zakonisht përdoren për këtë. Deri në fund të vitit 2018, projekti ns-3 përdorte Mercurial si sistemin për menaxhimin e kodit burimor, por në dhjetor 2018, ne u kaluam në përdorimin e Git. Megjithëse nuk keni nevojë të dini shumë rreth Git për të lexuar këtë udhëzues, ne rekomandojmë të njiheni me të dhe ta përdorni atë për të hyrë në kodin burimor. GitLab.com ofron burime për të zotëruar aftësitë bazë në adresën: .
2.3 WAF
Pasi që e keni shkarkuar kodin burimor në kompjuterin tuaj, për të marrë një program të gatshëm për t'u përdorur, do t'ju duhet ta compiloni atë. Ashtu si në rastin e menaxhimit të kodit burimor, ka shumë mjete të disponueshme për ta kryer këtë funksion. Ndoshta mjeti më i njohur nga këto është make. Përveç se ky mjet është më i njohuri, është e rëndësishme të theksohet se ai ndonjëherë është më i komplikuar për t'u përdorur në një sistem shumë të madh dhe fleksibël. Kjo ka qenë arsyeja për zhvillimin e alternativave të shumta. Së fundmi, janë zhvilluar sisteme të tilla duke përdorur gjuhën Python.
Në projektin ns-3, përdoret sistemi i ndërtimit Waf. Ky është një sistem ndërtimi i brezit të ri bazuar në Python. Për të ndërtuar sistemin ekzistues ns-3, nuk do t'ju nevojitet të dini Python.
Për ata që janë të interesuar në detajet e përdorimit të Waf, ekziston një libër i disponueshëm në adresën:
dhe kodi aktual:
.
2.4 Mjedisi zhvillimi
Siç u përmend më parë, skenarët në ns-3 ekzekutohen në C++ ose Python. Pjesa më e madhe e API-së së ns-3 është e disponueshme në Python, por modelet gjithsesi janë shkruar në C++. Ky udhëzues supozon se jeni të njohur me programimin orientuar nga objektet në C++. Ndërsa e prezantojmë, ne do t'i kushtojmë disa kohë një rishikimi të koncepteve më të avancuara dhe ndoshta karakteristikave të panjohura të gjuhës si idiomat dhe modelet e dizajnit. Nuk duam që ky udhëzues të shndërrohet në një tekst mësimor për C++, prandaj presim njohuri bazike të gjuhës. Ka shumë burime informacioni për C++ të disponueshme në internet ose në shtyp.
Nëse jeni fillestar në C++, para se të vazhdoni, mësoni bazat e gjuhës duke përdorur një libër mësimor ose një ueb-faqe që merret me mësimin ose receta të gatshme. Për shembull, një të tillë: .
Nën Linux, sistemi ns-3 përdor disa komponentë nga kutia e mjeteve të projektit GNU. Kutia e mjeteve është një grup mjetesh programimi të disponueshme në këtë mjedis softuerik. Për një pasqyrë të shpejtë të asaj që përfshihet në mjetet GNU shihni: .
Simulatori ns-3 përdor gcc, GNU binutils dhe gdb. Ndërkohë, ne nuk përdorim as make dhe as autotools nga mjetet GNU për ndërtimin e projektit. Për këto funksione ne përdorim Waf.
Në macOS përdorim një grup mjetesh Xcode. Përdoruesve të ns-3 në Mac iu rekomandohet fuqishëm të instalojnë Xcode dhe paketat e mjeteve të linjës së komandës nga Apple App Store, si dhe, për më shumë informacion, vizitoni faqen e wiki për instalimin e ns-3: ().
Zakonisht, autori i ns-3 punon në një mjedis Linux ose Unix të ngjashëm. Për ata që punojnë në Windows, ekzistojnë mjedise që në mënyra të ndryshme imitojnë mjedisin Linux. Për përdoruesit e tillë, projekti ns-3 në të kaluarën (por jo aktualisht) mbështeste zhvillimin në mjedisin Cygwin. Për detaje mbi shkarkimin dhe informacionin shtesë mbi Cygwin dhe ns-3, vizitoni faqen e wiki të ns-3:
.
MinGW aktualisht nuk mbështetet zyrtarisht. Një alternativë tjetër për Cygwin është instalimi i një mjedisi virtual, si VMware server, ku të instaloni Linux.
2.5 Programimi i soketëve
Në shembujt e përdorur në këtë udhëzues, do të përdorim funksionalitetet bazë të API-së së soketëve Berkeley (Berkeley Sockets). Nëse jeni fillestar në soketë, rekomandojmë të njiheni me API-në dhe disa raste të zakonshme të përdorimit të saj. Si një përmbledhje të mirë të programimit të soketëve TCP/IP, rekomandojmë: "TCP/IP Sockets in C", Donahoo dhe Calvert.
Ekziston një faqe e lidhur, e cila përmban burimin e shembujve në libër, të cilin mund ta gjeni në adresën:
.
Nëse kuptoni katër kapitujt e parë të librit (ose për ata që nuk kanë akses në një kopje të librit, klientët dhe serverët e echo, të montruar në faqen e internetit në lidhjen e mësipërme), ky informacion do të jetë i mjaftueshëm për të kuptuar udhëzuesin. Ekziston një libër i ngjashëm
"Multicast Sockets, Multicast Sockets", Makofske dhe Almeroth.
Ai përfshin materialin që mund t'ju nevojitet nëse do të studiojë shembujt e shpërndarjes multicast në distro.
Vijimi:
Burimi: habr.com
