See artikkel avab artiklite seeria, kus on tõlgitud õpik "" võrgusimulaatori ns-3 kohta.

See dokument on originaaldokumendi tõlge inglise keeles, mis on kirjutatud kuna ja asub kataloogis doc/tutorial ns-3 lähtekoodis.
1 Eessõna
1.1 ns-3 kohta
1.2 ns-2 kasutajatele
1.3 Osalemine projektis
1.4 Juhendi struktuur
2 Teabeallikad
2.1 Võrk
2.2 Git
2.3 WAF
2.4 Arenduskeskkond
2.5 Soketiprogrammeerimine
Projekti ns-3 põhiteave on saadaval viies formaadis:
- Simulaatori API dokumentatsioon: ns-3 .
- Õpik, juhend ja mudeliraamatukogu ja .
- ns-3.
Peatükk 1
Eessõna
ns-3 simulaator on diskreetsete sündmuste võrgusimulaator, mis on mõeldud peamiselt teadusuuringuteks ja hariduslikuks kasutamiseks. ns-3 arendamise projekt algas 2006. aastal ja see on avatud lähtekoodiga projekt.
Selle juhendi eesmärk on tutvustada ns-3 uuteks kasutajateks struktureeritud ja süsteemsel viisil. Alguses võib uuel kasutajal olla keeruline leida vajalikku teavet ja muuta see tööks sobivaks modelleerimiseks. Selles juhendis toome välja mitmeid modelleerimise näiteid ning selgitame ja näitame ülesande käigus võtmetehnoloogiaid ja omadusi.
Juhendi käigus esitame täieliku dokumentatsiooni ns-3 kohta ja jagame linke lähtekoodi juurde neile, kes on huvitatud süsteemi sügavamast mõistmisest.
Alustamiseks tasub välja tuua mitmeid võtmeaspekte:
- ns-3 omab avatud lähtekoodi, projekt püüab luua avatud keskkonna, kus teadlased saavad panustada ja jagada oma programmeerimistöö tulemusi.
- ns-3 ei ole tagasiühilduv ns-2 laiendus, vaid uus simulaator. Mõlemad simulaatorid on kirjutatud C++ keeles, kuid ns-3 on uus simulaator, mis ei toeta ns-2 API liideseid.
1.1 ns-3 kohta
ns-3 simulaator on loodud avatud, laiendatava platvormi pakkumiseks võrgumudelite, võrguuuringute ja hariduse jaoks. Lühidalt öeldes pakub ns-3 mudeleid selle kohta, kuidas andmepakettide võrgud on rakendatud ja kuidas need toimivad, andes kasutajale simulaatorimootori simulatsioonieksperimentide läbiviimiseks. ns-3 kasutamise põhjused võivad hõlmata olukordi, kus on vajalik läbi viia uuring, mida on keeruline või võimatu teha reaalsetes süsteemides, võimalust uurida süsteemi käitumist rangelt kontrollitud ja uuendatavates tingimustes, samuti õppida, kuidas võrgud töötavad.
Kasutajad märkavad, et ns-3-s pakutud mudelite komplekt on keskendunud internetiprotokollide ja -võrkude töö simuleerimisele, kuid ns-3 ei piirdu ainult internetisüsteemidega. Mõned kasutajad kasutavad ns-3 ka mitte-interneti-tehnoloogiatel põhinevate süsteemide mudeldamiseks.
Võrgumudelite loomiseks on palju tööriistu. Alljärgnevalt on välja toodud mõned eripärad, mis eristavad ns-3 teistest tööriistadest.
- ns-3 on kujundatud kui teekide kogum, mida saab omavahel ja teiste väliste tarkvara teekidega kombineerida. Kuigi mõned simuleerimisplatvormid pakuvad kasutajatele ühtset integreeritud keskkonda koos graafilise kasutajaliidese, mis haldab kogu toimingut, on ns-3 selles osas modulaarsem. ns-3-ga saab kasutada mitmeid väliseid animaatoreid, andmeanalüüsi ja visualiseerimise tööriistu. Siiski peavad kasutajad arvestama töö tegemisega käsureas ning C++ ja/või Python arendustööriistadega.
- ns-3 kasutatakse peamiselt Linuxi või macOS süsteemides, kuigi toetust on ka BSD süsteemidele ja Windowsi platvormidele, mis suudavad Linuxi koodi kompileerida, nagu Windows Subsystem for Linux või Cygwin. Windowsi jaoks mõeldud Visual Studio ei ole praegu toetatud, kuigi arendaja töötab selle võimaluse rakendamise kallal. Windowsi kasutajad saavad samuti kasutada Linuxi virtuaalmasinat.
- ns-3 ei ole ametlikult toetatud ühegi ettevõtte toode. ns-3 toe tagamiseks on kasutajate foorumil (ns-3-users@googlegroups.com) maksimaalne pühendumine.
1.2 ns-2 kasutajatele
Neile, kes tunnevad ns-2 (populaarne tööriist, mis eelnes ns-3), on ns-3 üleminekul kõige silmatorkavam väline muutus skriptikeele vahetamine. ns-2 programmid on kirjutatud OTcl-is ja simulatsiooni tulemusi saab visualiseerida võrguanimatsiooni tööriista nam abil. ns-2-s ei ole võimalik simuleerimist käivitada ainult C++-st (st nagu main() programmi ilma OTcl-ita). Lisaks on osa ns-2 komponente kirjutatud C++-s, teised aga OTcl-is. ns-3-s on simulator täielikult kirjutatud C++-s, millel on valikulised Python'i sidemed. Seetõttu saab simulatsiooni skripte kirjutada nii C++-s kui ka Python'is. Uued animatsioonid ja visualiseerijad on saadaval ning jätkuvalt arendamisel. Kuna ns-3 genereerib pakettide jälgimisfailid pcap vormingus, saab kasutada ka teisi utiliite jälgimisfailide analüüsimiseks. Käesolevas juhendis keskendume esmalt C++-s rakendatud skriptidele ja tulemuste tõlgendamisele jälgimisfailide analüüsi kaudu.
Kuid leidub ka ühisosi (näiteks põhinevad mõlemad tööriistad C++ objektidel, osa ns-2 koodist on portitud ns-3-sse). Jätkates, püüame näidata ns-2 ja ns-3 erinevusi.
Küsimus, mida kuuleme tihti: "Kas ma peaksin endiselt ns-2 kasutama või minema üle ns-3-le?" Autori arvates, kui kasutaja ei ole mingil moel seotud ns-2-ga (olles seotud isikliku mugavuse ja ns-2 teadmisega või konkreetsest simuleerimismudelist, mis on saadaval ainult ns-2-s), siis on tal ns-3-iga töötades tõhusam järgmiste põhjuste tõttu:
- ns-3-d toetatakse aktiivselt ja seal on aktiivne, vastutulelik kasutajate meililisti, samas kui ns-2 toetatakse vaid napilt ja see ei ole üle kümne aasta oma peamises koodipuu struktuuris märkimisväärseid muudatusi näinud.
- ns-3 pakub funktsioone, mis ei ole saadaval ns-2-s, nagu rakenduskoodi käitamisrežiim (mis võimaldab kasutajatel simulatsioonis käivitada reaalse rakenduskoodi).
- ns-3 pakub võrreldes ns-2-ga madalamat abstraktsioonitaset, mis võimaldab tal paremini vastata sellele, kuidas reaalsed süsteemid omavahel suhtlevad. Mõned piirangud, mis leiti ns-2-s (näiteks mitme tüüpi liideste nõuetekohane tugi sõlmes), on ns-3-s parandatud.
Oma pika ajaloo tõttu omab ns-2 mitmekesisemat toetatud moodulite kogumit kui ns-3. Siiski omab ns-3 põletavaid mudeleid mitmes tuntud uurimisvaldkonnas (sealhulgas keerukad LTE ja WiFi mudelid), samas kui selle rakenduskoodi tugi lubab väga laia valikut kõrge täpsusega mudeleid. Kasutajad võivad olla üllatunud, et kogu Linuxi võrgustakk võib olla kapseldatud ns-3 sõlme, kasutades otse koodi täitmise raamistikku (DCE). Mõnda ns-2 mudelit on mõnikord võimalik ns-3-sse portida, eriti kui need on C++ keeles rakendatud.
Kui te pole kindel, on mõistlik vaadata nii mõlemaid simulaatoreid (ning muid simulaatoreid), eelkõige mudeleid, mis on teie uurimiseks saadaval, kuid pidage meeles, et teie tulemused võivad olla paremad, kui kasutate tööriista, mida arendatakse ja toetatakse aktiivselt (ns-3).
1.3 Osalemine projektis
ns-3 on teadus- ja haridussimulaator uurimiskogukonnale. See tugineb kogukonna praegustele panustele uute mudelite arendamisel, olemasolevate tõrgete parandamisel või toetamisel ning tulemustega jagamisel. On teatud poliitika, mis, nagu me loodame, julgustab inimesi panustama ns-3-sse, nagu nad seda teevad ns-2 puhul:
- Avaallika litsents, mis põhineb GNU GPLv2 litsentsi ühilduvusel.
- wiki.
- Lehekülg , sarnane populaarsele lehele ns-2 jaoks.
- GitLab.com kasutamine, sealhulgas veaparanduse jälgimise süsteem:
Me chame meeles, et kui te isegi loete seda dokumenti, siis te ei pruugi praegu plaanida sellega panustama hakata. Kuid tahame, et te teadke, et panustamine on projekti vaim ja teie tagasiside on meile väärtuslik, isegi teie varasema kogemuse kohta ns-3 (näiteks "see õpik jagu ei olnud arusaadav ..."), teade vananenud dokumentatsiooni või kommentaar koodis jne. Eelistatud viis paranduste saatmiseks on kas teha haru (fork) koos teie parandustega ja luua sulgemistaotlus või esitada taotlus meie jälgimisrakenduses ja lisada patch. kui teie parandustega ja luua sulgemistaotlus, või luua taotlus meie jälgimisrakenduses ja lisada patch.
1.4 Juhendi struktuur
See juhend eeldab, et uued kasutajad võivad alguses järgida näiteks sellist teed:
- Püüda alla laadida ja koostada koopia;
- Püüda käivitada mõned näidistprogrammid;
- Vaadata simuleerimise tulemust ja proovida seda kohandada.
Lõppkokkuvõttes püüdsime korraldada esitlust vastavalt nendele sammudele.
Peatükk 2
Teabeallikad
2.1 Võrk
On mitu olulist ressurssi, mille olemasolust peaks iga ns-3 kasutaja teadlik olema. Peamine veebisait asub aadressil:
ja pakub juurdepääsu ns-3 süsteemi põhiteabele. Üksikasjalik dokumentatsioon on saadaval põhiveebisaidi kaudu: .
Samal veebilehel leiate ka dokumente, mis käsitlevad süsteemi arhitektuuri.
On olemas wiki-leht, mis täiendab ns-3 põhiveebisaiti, mille leiate aadressilt: .
Sealt leiate vastuseid sageli esitatavatele küsimustele kasutajatele ja arendajatele, samuti tõrkeotsingu juhendeid, kolmandate osapoolte koodi, dokumente jne.
Algkoodi saab leida ja vaadata GitLab.com veebisaidilt:
.
Samuti on seal hoidlas nimega ns-3-dev praegu arenduse puu. Eelmised väljaanded ja katsetamiseks mõeldud arendajate hoidlad on samuti saadaval Mercurialis projekti vana saidi aadressil:
.
2.2 Git
Kompaktsetele süsteemidele on vajalik mingi viis organisatsiooni ja alusmooduli ning dokumentatsiooni muutmise haldamiseks. Selle saavutamiseks on palju erinevaid viise, ja võib-olla olete kuulnud mõningatest süsteemidest, mida tavaliselt kasutatakse. Kuni viimase ajani kasutas projekt ns-3 Mercuriali lähtekoodi versioonihaldusena, kuid detsembris 2018 lülitusime Git'i kasutamisele. Kuigi selle juhendi lugemiseks ei pea te Git'ist palju teadma, soovitame tutvuda sellega ja kasutada seda lähtekoodi ligipääsemiseks. GitLab.com pakub ressursse, et omandada põhioskused aadressil: .
2.3 WAF
Pärast seda, kui olete allalaadinud lähtekoodi oma arvutisse, peate koostama toimiva programmi. Nagu lähtekoodi juhtimise puhulgi, on selle ülesande täitmiseks saadaval mitmeid tööriistu. Tõenäoliselt on neist kõige kuulsam make. Kuigi see tööriist on tuntud, tuleb märkida, et selle kasutamine suures ja paindlikult konfigureeritavas süsteemis osutub kõige keerulisemaks. See on olnud põhjuseks paljude alternatiivsete lahenduste väljatöötamiseks. Hiljuti on sellised süsteemid arendatud Python'i keelt kasutades.
Projektis ns-3 kasutatakse Waf ehitussüsteemi. See on uus põlvkond ehitussüsteemidest, mis põhinevad Python'il. Olemasoleva ns-3 süsteemi koostamiseks ei ole Python'i tundmine vajalik.
Need, kes on huvitatud Wafi kasutamise detailidest, saavad lugeda raamatut, mis on saadaval aadressil:
ja praegune kood:
.
2.4 Arenduskeskkond
Nagu already mainitud, ns-3 skriptid töötavad C++ või Pythonis. Suurem osa ns-3 API-st on saadaval Pythonis, kuid mudelid on igal juhul kirjutatud C++. See juhend eeldab, et olete tuttav objektorienteeritud programmeerimisega C++-s. Juhendi käigus pühendame aega ka kõige arenenumate kontseptsioonide ja võib-olla tunmatu keele omaduste, nagu iidiumid ja disainimustrid, ülevaatamiseks. Me ei soovi, et see juhend muutuks C++ õpetamisraamatuks, seega eeldame keele põhiteadmisi. Internetis või trükis on palju allikaid C++ kohta.
Kui olete C++ algaja, siis enne jätkamist õppige keele põhialustega tutvustava raamatu või veebisaidi abil. Näiteks sellisega: .
Linuxi all kasutab ns-3 süsteem paarit komponenti GNU projekti tööriistadest. Tööriistad on programmeerimistööriistade kogum, mis on saadaval antud tarkvarakeskkonnas. Kiireks ülevaateks GNU tööriistadest, vaadake. .
ns-3 simulaator kasutab gcc, GNU binutils ja gdb. Samuti ei kasuta me projekti koostamisel GNU tööriistu nagu make ega autotools. Nende funktsioonide jaoks kasutame Waf.
macOS-is kasutatakse Xcode'i tööriistade komplekti. ns-3 kasutajatele Mac-il soovitatakse tungivalt installida Xcode ja Apple App Store'ist saadud käsurea tööriistade paketid; lisainformatsiooni saamiseks külastage ns-3 paigalduswiki lehte: ().
Tavaliselt töötab ns-3 autor Linuxi või Unix-sarnases keskkonnas. Windowsi kasutajate jaoks on olemas keskkonnad, mis erineval määral simuleerivad Linuxi keskkonda. Sellistele kasutajatele on ns-3 projekt minevikus (kuid mitte praegu) toetanud arendust Cygwini keskkonnas. Cygwini ja ns-3 kohta lisainformatsiooni ja allalaadimise üksikasjade saamiseks külastage ns-3 wikit:
.
MinGW ei ole praegu ametlikult toetatud. Teine alternatiiv Cygwinile on virtuaalkeskkonna, näiteks VMware serveri installimine, kus saab Linuxi paigaldada.
2.5 Soketiprogrammeerimine
Käesolevas juhendis kasutatud näidetes keskendume Berkeley socket'i API põhilistele funktsioonidele. Kui olete socket'itega algaja, soovitame tutvuda API-ga ja mõne levinud kasutusjuhendiga. Hea ülevaate TCP/IP socket'ite programmeerimisest leiate raamatust: "TCP/IP Sockets in C", autoriteks Donahoo ja Calvert.
On olemas seotud veebisait, millelt leiate raamatust näidiseid sisaldava allika, aadressil:
.
Kui mõistate raamatu esimesi nelja peatükki (või kui teil ei ole juurdepääsu raamatu koopiale, on eho kliendid ja serverid, nagu on näidatud ülaltoodud lingil, piisavad, et mõista juhendit. On olemas sarnane raamat
"Multicast Sockets, Multicast Sockets", autoriteks Makofske ja Almeroth.
See katab materjali, mis võib olla vajalik, kui kavatsete uurida jaotises multikaadri näidiseid.
Jätkub:
Allikas: habr.com
