See artikkel avab publikatsioonide seeria, mis tõlgib õpikute "" võrgu simulaatorist ns-3.

See dokument on ingliskeelse originaaldokumendi tõlge, mis on kirjutatud jaoks ja hoitakse kataloogis doc/tutorial ns-3 lähtekoodis.
1 Eelwoord
1.1 Ns-3-st
1.2 Ns-2 kasutajatele
1.3 Projekti kaasamine
1.4 Käsiraamatu korraldus
2 Teabeallikad
2.1 Võrk
2.2 Git
2.3 WAF
2.4 Arenduskeskkond
2.5 Soketiprogrammeerimine
Ns-3 projekti algdokumentatsioon on saadaval viies vormis:
- Simulaatori API dokumentatsioon: ns-3 .
- Õpik, juhend ja mudelite raamatukogu jaoks ja .
- ns-3.
Peatükk 1
Eessõna
Ns-3 simulaator on diskreetse sündmusena põhinev võrgu simulaator, mis on peamiselt ette nähtud teaduslikuks kasutamiseks ja hariduslikel eesmärkidel. Ns-3 arendusprojekt algas 2006. aastal ja on avatud lähtekoodiga projekt.
Selle juhendi eesmärk on tutvustada ns-3 uutele kasutajatele süsteemselt ja struktureeritult. Algajale võib olla keeruline vajalikku teavet leida ja selle töömodelliks muuta. Selle juhendi raames rakendame mitmeid modelleerimise näiteid, selgitades ja tutvustades keeletegevuse käigus võtme mõisted ja jooned.
Teksti tõlgendamisel esitame täies mahus ns-3 dokumentatsiooni ja anname viiteid lähtekoodile neile, kes on süvitsi huvitunud süsteemi toimimisest.
Alustuseks tasub märkida mõned põhiteenused:
- Ns-3-l on avatud lähtekood, projekt püüab järgida avatud keskkonda, kus teadlased saavad oma panust anda ja jagada oma programmitootel.
- Ns-3 ei ole tagasipöörduv ns-2 laiendus, see on uus simulaator. Mõlemad simulaatorid on kirjutatud C++-s, kuid ns-3 on uus simulaator, mis ei toeta ns-2 API liideseid.
1.1 Ns-3-st
ns-3 simulaator on välja töötatud, et pakkuda avatud ja laiendatavat platvormi võrgu modelleerimiseks, võrgu teadusuuringuteks ja hariduseks. Lühidalt öeldes pakub ns-3 mudeleid, kuidas andmepaketiteed põhimõtteliselt toimivad ja töötab ning annab kasutajale simulaatori mootori simulatsiooni katsete läbiviimiseks. Põhjused ns-3 kasutamiseks võivad olla olukorrad, kus on vaja teostada uuringut, mida on raske või võimatu teha reaalsetes süsteemides, võimalus uurida süsteemi käitumist rangelt juhitud ja korduvates keskkondades, samuti mõista, kuidas võrgud töötavad.
Kasutajad märkavad, et ns-3 pakutud mudelite komplekt keskendub interneti protokollide ja võrkude modelleerimisele, kuid ns-3 ei piirdu ainult internetisüsteemidega, mõned kasutajad kasutavad ns-3 internetitehnoloogiatest mittetulenevate süsteemide modelleerimiseks.
Võrgu modelleerimise tööriistu on palju. Allpool on mõned eristatavad omadused, mis eristavad ns-3 teistest tööriistadest.
- ns-3 on välja töötatud raamatukogude komplektina, mida saab omavahel ja teiste välistarkvara raamatukogudega kombineerida. Kuigi mõned modelleerimisplatvormid pakuvad kasutajatele ühtset integreeritud keskkonda, millel on graafiline kasutajaliides, mis haldab kogu tööd, on ns-3 selles osas modulaarsem. ns-3-ga võivad töötada mitmed välist animeerijad, andmeanalüüsi ja visualiseerimise tööriistad. Siiski ootavad kasutajalt käskude real ja C++ ja/või Python arendustööriistadega töötamist.
- ns-3 kasutatakse peamiselt Linuxi või macOS süsteemides, kuigi on toega BSD süsteemidele ja Windowsi platvormidele, mis suudavad Linuxile suunatud koodi kompileerida, nagu Windowsi alamsüsteem Linuxi jaoks või Cygwin. Windowsile mõeldud Visual Studio ei ole praegu toetatud, kuigi arendaja töötab selle võimaluse rakendamise nimel. Windowsi kasutajad saavad kasutada ka Linuxi virtuaalmasinat.
- ns-3 ei ole ametlikult toetatav toode ühegi ettevõtte poolt. ns-3 toetamist pakutakse maksimaalsete pingutustega ns-3 kasutajate foorumis (ns-3-users@googlegroups.com).
1.2 Ns-2 kasutajatele
Nende jaoks, 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 ning simuleerimise tulemusi saab visualiseerida, kasutades võrgu animaatore nam. ns-2-s ei ole võimalik simuleerimist käivitada ainult C++-st (st nagu main() programm ilma igasuguse OTcl-ita). Veelgi enam, mõned ns-2 komponendid on kirjutatud C++-s, teised aga OTcl-is. ns-3-s, simulaator on täielikult kirjutatud C++-s koos valikuliste Python sidemetega. Seetõttu saab simuleerimise skripte kirjutada nii C++-s kui ka Pythoni keeles. Uued animaatorid ja visualiseerijad on saadaval ja jätkuvalt arendamisel. Kuna ns-3 genereerib pakettide jälgimisfailid pcap, saab kasutada ka teisi utiliite jälgede analüüsimiseks. Selles juhendis keskendume esmalt C++-s rakendatud skriptidele ja tulemuste tõlgendamisele jälgimisfailide analüüsi kaudu.
Kuid leidub ka sarnasusi (näiteks on mõlemad tööriistad C++ objektide põhised, osa ns-2 koodist on portitud ns-3-sse). Esitamise käigus püüame näidata erinevusi ns-2 ja ns-3 vahel.
Küsimus, mida me sageli kuuleme: "Kas pean endiselt kasutama ns-2 või peaksin minema ns-3-le?" Autori arvates, kui kasutaja ei ole mingil viisil kinni ns-2-st (olemasoleva isikliku mugavuse ja teadmise põhjal ns-2-st või spetsiifilise simuleerimise mudeli põhjal, mis on saadaval ainult ns-2-s), siis on ns-3-ga produktiivsem järgmiste põhjuste tõttu:
- ns-3-d toetatakse aktiivselt ning sellel on aktiivne, vastutulelik kasutajate meililisti, samas kui ns-2-d toetatakse vaid veidi ja enam kui kümme aastat ei ole selle peamises koodipuus toimunud olulisi muudatusi.
- ns-3 pakub funktsioone, mis ei ole saadaval ns-2-s, nagu rakenduskoodi käitamise keskkond (mis võimaldab kasutajatel simulaatoris käitada reaalse rakenduskoodi).
- ns-3 tagab madalama abstraktsioonitaseme võrreldes ns-2-ga, mis võimaldab tal paremini vastata sellele, kuidas reaalsed süsteemid suhtlevad. Mõned ns-2-s esinevad piirangud (nt õige toetamine mitut tüüpi liideseid sõlmes) on ns-3-s kõrvaldatud.
Oma pika ajaloo tõttu on ns-2-l rohkem mitmekesine toetatud moodulite valik kui ns-3-l. Siiski on ns-3-l detailsemad mudelid mitmes populaarse uuringuvaldkonnas (sealhulgas keerukad LTE ja WiFi mudelid), selle rakenduskoodi tugi lubab väga laia valikut kõrge täpsusega mudeleid. Kasutajad võivad olla üllatunud, et kogu Linuxi võrgi virn saab kapseldada ns-3 sõlmesse, kasutades otse käitava kodeerimise raamistikku (DCE). Ns-2-st saab mõningaid mudeleid portida ns-3-sse, eriti kui need on rakendatud C++ keeles.
Kui kahtlete, oleks hea soovitus vaadata mõlemaid simulatore (ning ka teisi simulatore), eriti mudeleid, mis on teie uurimistöös saadaval, kuid pidage meeles, et teie tulemus võib olla parem tööriista kasutamisel, mis on hetkel aktiivselt arendamisel ja toetatakse (ns-3).
1.3 Projekti kaasamine
ns-3 on teaduslik-õppe simulaator uurimiscommunity jaoks. See tugineb kogukonna praegustele panustele uute mudelite väljatöötamisel, olemasolevate tõrgete kõrvaldamisel või toetamisel ning tulemuste vahetamisel. On olemas teatud poliitikad, mis, nagu me loodame, julgustavad inimesi panustama ns-3-sse, nagu nad on seda teinud ns-2-s:
- Avaallika litsentsimine GNU GPLv2 litsentsiga ühilduva põhjal.
- wiki.
- Leht , sarnane populaarsele ns-2 lehele.
- GitLab.com kasutamine, sealhulgas vea jälgimise süsteem:
Me mõistame, et isegi kui te loete seda dokumenti, võite sellel hetkel mitte kavatse panustada. Kuid tahame, et te teaksite, et panustamine on projekti vaim ning teie tagasiside, isegi teie varase kogemuse kohta ns-3-ga (nt "see õpikusektsioon ei olnud selge ..."), aegunud dokumentatsiooni teate või koodi kommentaari jms kohta on meile väärtuslik. Eelistatud viis paranduste edastamiseks on kas teha hargnemine (fork) koos teie parandustega ja luua ühinemise taotlus või luua vahekokkuvõtte ja lisada patš. See juhend eeldab, et uued kasutajad võivad alguses liikuda näiteks järgmist teed pidi:
1.4 Käsiraamatu korraldus
Proovige alla laadida ja koguda koopia;
- Proovige käivitada mõningaid näidiskoode;
- Proovige käivitada mõningaid näidiskoode;
- Vaata simulatsiooni tulemust ja proovi seda kohandada.
Kokkuvõttes püüdsime korraldada esitlust vastavalt nendele sammudele.
Peatükk 2
Teabeallikad
2.1 Võrk
On mitu olulist ressurssi, millest iga ns-3 kasutaja peaks teadlik olema. Peamine veebisait asub aadressil:
ja pakub juurdepääsu põhiteabele ns-3 süsteemi kohta. Üksikasjalik dokumentatsioon on saadaval põhiveebisaidi kaudu aadressil: .
Samas veebilehes leiate ka dokumendid, mis käsitlevad süsteemiarhitektuuri.
On olemas wikileht, mis täiendavad ns-3 põhiveebisaiti, mille leiate aadressilt: .
Seal on vastuseid sageli esitatavatele küsimustele kasutajate ja arendajate jaoks, samuti tõrkeotsingu juhised, kolmanda osapoole kood, dokumendid jne.
Allika kood on saadaval ja seda saab vaadata GitLab.com:
.
Seal on ka hoidla nimega ns-3-dev kus asub praegune arenduse puu. Varasemad väljaanded ning tuum arendajate eksperimentaalsed hoidlad on samuti saadaval Mercurial'is vana projekti veebisaidi kaudu aadressil:
.
2.2 Git
Komplekssete programmeerimisseeriate jaoks on vajalik mingisugune meetod aluskoodi ja dokumentatsiooni haldamiseks ning muutmiseks. On palju viise, kuidas seda saavutada, ja võib-olla olete kuulnud mõnest süsteemist, mida tavaliselt selleks kasutatakse. Hiljuti kasutas projekt ns-3 Mercurial'i lähtekoodi haldamise süsteemina, kuid 2018. aasta detsembris vahetasime Git'i kasutamise üle. Kuigi selle juhendi lugemiseks ei pea te Git'ist palju teadma, soovitame teil sellega tuttavaks saada ja kasutada seda lähtekoodi juurde pääsemiseks. GitLab.com pakub ressursse põhiteadmiste omandamiseks aadressil: .
2.3 WAF
Pärast seda, kui olete allalaadinud lähtekoodi oma arvutisse, peate selle töökorras programmi saamiseks kompileerima. Nagu lähtekoodi haldamise puhul, on selle funktsiooni täitmiseks saadaval palju tööriistu. Tõenäoliselt on kõige tuntum neist tööriistast make. Kuigi see tööriist on kõige tuntum, tuleks märkida, et selle kasutamine väga suures ja paindlikult konfigureeritavas süsteemis osutub keerukaks. See oli põhjuseks, miks arendati mitmeid alternatiive. Hiljuti on sellised süsteemid välja töötatud Python'i keelt kasutades.
Projektis ns-3 kasutatakse Waf ehitussüsteemi. See on uus põlvkond Python'i põhiseid ehitussüsteeme. Olemasoleva ns-3 süsteemi ehitamiseks ei pea te Python'it teadma.
Neile, kes on huvitatud Waf'i kasutamise detailidest, on saadaval raamat, mis on kergesti kätte saadav aadressilt:
ja praegune kood:
.
2.4 Arenduskeskkond
Nagu eespool mainitud, töötatakse ns-3 skriptid C++ või Python'i keeles. Suur osa ns-3 API-st on saadaval Python'is, kuid mudelid on igal juhul kirjutatud C++ keeles. See juhend eeldab, et olete tuttav objektorienteeritud programmeerimisega C++ keeles. Juhendi käigus pühendame veidi aega kõige arenenumate kontseptsioonide ja võib-olla tundmatute keeleomaduste, nagu idiomid ja disainimallid, ülevaatamiseks. Me ei soovi, et see juhend muutuks C++ õpikuks, seega ootame, et teil oleks keele põhiteadmised. Internetis või trükis on saadaval palju teabeallikaid C++ kohta.
Kui olete C++ uustulnukas, siis enne jätkamist õppige keele aluseid mõne õpikuga või veebilehega, mis on pühendatud õppimisele või valmislahendustele. Näiteks sellised: .
Linuxi all kasutab süsteem ns-3 mitmeid komponente GNU projekti tööriistadest. Tööriistad on programmeerimistööriistade kogum, mis on saadaval antud tarkvarakeskkonnas. Kiireks ülevaateks GNU tööriistadest vaadake, palun. .
Simulaator ns-3 kasutab gcc, GNU binutils ja gdb. Samuti ei kasuta me projekti ehitamiseks ei make ega autotools GNU tööriistadsest. Nende funktsioonide jaoks kasutame Waf'i.
macOS-is kasutatakse Xcode'i tööriistakomplekti. Ns-3 kasutajatele Macis soovitatakse tungivalt installida Xcode ja Apple App Store'ist komando tööriistade paketid ning lisainformatsiooni jaoks külastada ns-3 installimise wiki-lehte: ().
Tavaliselt töötab ns-3 autor Linuxi või Unixiga sarnases keskkonnas. Neile, kes töötavad Windowsis, on olemas keskkondi, mis erineval määral imiteerivad Linuxi keskkonda. Selleteemal kasutajad, ns-3 projekt toetas minevikus (kuid mitte praegu) arendust Cygwin keskkonnas. Lisateabe saamiseks Cygwini ja ns-3 kohta külastage ns-3 wiki-lehte:
.
MinGW pole praegu ametlikult toetatud. Teiseks alternatiiviks Cygwinile on virtuaalses keskkonnas, nagu VMware server, Linuxi installimine.
2.5 Soketiprogrammeerimine
Käesolevas juhendis kasutatavates näidetes kasutame Berkeley Socketsi API põhifunktsioone. Kui olete sülekotides uus, soovitame tutvuda API ja mõningate levinud kasutusjuhtudega. Hea ülevaate TCP/IP soketite programmeerimisest saate lugedes: "TCP/IP Sockets in C", Donahoo ja Calvert.
On olemas seotud veebisait, mis sisaldab raamatust pärinevaid näidiseid, mida leiate aadressilt:
.
Kui mõistate raamatu esimesi nelja peatükki (või kui teil ei ole juurdepääsu raamatu eksemplarile, siis saidil ülaltoodud lingil olevad echo kliendid ja serverid), piisab sellest, et mõista õpetust. On olemas sarnane raamat
"Multicast Sockets, Multicast Sockets", Makofske ja Almeroth.
See katab materjali, mis võib olla vajalik, kui õpite jaotuses mitme aadressiga edastamise näiteid.
Jätkub:
Allikas: habr.com
