Denna artikel öppnar en serie publikationer med översÀttningen av lÀroboken "" pÄ ns-3 nÀtverkssimulatorn.

Detta dokument Àr en översÀttning av originaldokumentet pÄ engelska, som skrevs pÄ för och lagras i katalogen doc/handledning ns-3 kÀllkod.
1 Förord
1.1 Om ns-3
1.2 För ns-2 anvÀndare
1.3 Deltagande i projektet
1.4 Ledningens organisation
2 InformationskÀllor
2.1 NĂ€tverk
2.2 Git
2.3 WAF
2.4 Utvecklingsmiljö
2.5 Sockelprogrammering
PrimÀr dokumentation för ns-3-projektet finns tillgÀnglig i fem former:
- Simulator API dokumentation:ns-3 .
- Handledning, guide och modellbibliotek för О .
- ns-3.
Kapitel 1
Förord
ns-3-simulatorn Àr en nÀtverkssimulator för diskreta evenemang avsedd frÀmst för forskning och utbildning. Projektet som utvecklar ns-3 startades 2006 och Àr ett projekt med öppen kÀllkod.
Syftet med denna manual Àr att introducera ns-3 för nya anvÀndare pÄ ett systematiskt och strukturerat sÀtt. Ibland kan det vara svÄrt för en nybörjare att fÄ den information de behöver och omvandla den till en fungerande simulering. I den hÀr handledningen gÄr vi igenom flera simuleringsexempel, och demonstrerar och förklarar nyckelbegrepp och funktioner lÀngs vÀgen.
NÀr vi gÄr kommer vi att tillhandahÄlla fullstÀndig dokumentation för ns-3 och tillhandahÄlla lÀnkar till kÀllkoden för dem som Àr intresserade av att förstÄ hur systemet fungerar mer pÄ djupet.
Det finns nÄgra viktiga punkter att notera i början:
- ns-3 Àr öppen kÀllkod, projektet syftar till att upprÀtthÄlla en öppen miljö dÀr forskare kan bidra och dela med sig av sin mjukvaruutveckling.
- ns-3 Àr inte en bakÄtkompatibel förlÀngning av ns-2, det Àr en ny simulator. BÄda simulatorerna Àr skrivna i C++, men ns-3 Àr en ny simulator som inte stöder ns-2 API:er.
1.1 Om ns-3
ns-3-simulatorn utvecklades för att tillhandahÄlla en öppen, utbyggbar plattform för nÀtverkssimulering, nÀtverksforskning och utbildning. Kort sagt tillhandahÄller ns-3 modeller för hur paketdatanÀtverk implementeras och fungerar och ger anvÀndaren en simulatormotor för att utföra simuleringsexperiment. SkÀlen att anvÀnda ns-3 Àr bland annat situationer dÀr man vill bedriva forskning som Àr svÄr eller omöjlig att göra pÄ ett riktigt system, förmÄgan att studera systembeteende i en hÄrt kontrollerad miljö, en reproducerbar miljö och att lÀra sig om hur nÀtverk fungerar.
AnvÀndare kommer att mÀrka att uppsÀttningen av modeller som tillhandahÄlls i ns-3 Àr fokuserad pÄ att modellera driften av Internetprotokoll och nÀtverk, men ns-3 Àr inte begrÀnsad till Internetsystem, och vissa anvÀndare anvÀnder ns-3 för att modellera icke-internetbaserade system.
Det finns mÄnga nÀtverksmodelleringsverktyg tillgÀngliga. Nedan Àr nÄgra av de utmÀrkande egenskaperna hos ns-3 jÀmfört med andra instrument.
- ns-3 Àr designad som en uppsÀttning bibliotek som kan kombineras tillsammans, sÄvÀl som med andra externa programbibliotek. Medan vissa modelleringsplattformar ger anvÀndare en enda integrerad miljö med ett grafiskt anvÀndargrÀnssnitt som styr allt arbete, Àr ns-3 mer modulÀr i detta avseende. Flera externa animatörer, dataanalys- och visualiseringsverktyg kan anvÀndas med ns-3. AnvÀndare förvÀntas dock arbeta pÄ kommandoraden och med C++ och/eller Python mjukvaruutvecklingsverktyg.
- ns-3 anvÀnds huvudsakligen i system Linux eller macOS, Àven om det finns stöd för BSD-system sÄvÀl som plattformar Windows, kapabel att kompilera kod för LinuxsÄsom Windows Delsystem för Linux eller Cygwin. Ursprungligen frÄn Windows Visual Studio stöds för nÀrvarande inte, Àven om utvecklaren arbetar med att implementera den hÀr funktionen. Windows kan ocksÄ anvÀnda en virtuell maskin med Linux.
- ns-3 Àr inte en officiellt stödd mjukvaruprodukt av nÄgot företag. Support för ns-3 tillhandahÄlls sÄ gott vi kan pÄ ns-3 anvÀndarforum (ns-3-users@googlegroups.com).
1.2 För ns-2 anvÀndare
För dem som Àr bekanta med ns-2 (det populÀra verktyget som föregick ns-3), Àr den mest mÀrkbara externa förÀndringen nÀr man flyttar till ns-3 förÀndringen i skriptsprÄk. Program i ns-2 Àr skrivna i OTcl, och simuleringsresultat kan visualiseras med hjÀlp av nam nÀtverksanimatorn. I ns-2 Àr det inte möjligt att köra en simulering enbart frÄn C++ (dvs som ett main()-program utan nÄgon OTcl). Dessutom Àr vissa komponenter i ns-2 skrivna i C++, medan andra skrivs i OTcl. I ns-3 Àr simulatorn skriven helt i C++ med valfria Python-bindningar. DÀrför kan simuleringsskript skrivas i bÄde C++ och Python. Nya animatörer och visualiserare Àr tillgÀngliga och fortsÀtter att utvecklas. Eftersom ns-3 genererar pcap-paketspÄrningsfiler kan andra verktyg ocksÄ anvÀndas för att analysera spÄr. I den hÀr handledningen kommer vi först att fokusera pÄ skript implementerade i C++ och tolka resultaten genom analys av spÄrningsfiler.
Men det finns ocksÄ likheter (till exempel Àr bÄda verktygen baserade pÄ C++-objekt, en del av ns-2-koden portades till ns-3). NÀr vi gÄr kommer vi att försöka visa skillnaderna mellan ns-2 och ns-3.
En frÄga vi ofta hör Àr: "Ska jag fortfarande anvÀnda ns-2 eller gÄ över till ns-3?" Enligt författarens Äsikt, om en anvÀndare inte pÄ nÄgot sÀtt Àr bunden till ns-2 (antingen baserat pÄ befintlig personlig komfort och kunskap om ns-2, eller baserat pÄ en specifik simuleringsmodell som endast Àr tillgÀnglig i ns-2), sÄ kommer han att vara mer produktiv med ns-3 av följande skÀl:
- ns-3 underhÄlls aktivt med en aktiv, lyhörd e-postlista för anvÀndare, medan ns-2 endast har underhÄllits lÀtt och inte har sett betydande förÀndringar i sitt huvudkodtrÀd pÄ över ett decennium.
- ns-3 tillhandahÄller funktioner som inte Àr tillgÀngliga i ns-2, t.ex. en implementeringskodkörning (som tillÄter anvÀndare att köra riktig implementeringskod i simulatorn).
- ns-3 ger en lÀgre abstraktionsnivÄ Àn ns-2, vilket gör att den bÀttre matchar hur verkliga system interagerar. Vissa begrÀnsningar som finns i ns-2 (som korrekt stöd för flera grÀnssnittstyper pÄ en nod) har fixats i ns-3.
PÄ grund av sin lÄnga historia har ns-2 en mer varierad uppsÀttning moduler som stöds Àn ns-3. ns-3 har dock mer detaljerade modeller inom flera populÀra forskningsomrÄden (inklusive komplexa LTE- och WiFi-modeller), och dess implementeringskodstöd möjliggör ett mycket brett utbud av högkvalitativa modeller. AnvÀndare kan bli förvÄnade över att hela nÀtverksstacken Linux kan inkapslas i en ns-3-nod med hjÀlp av DCE-ramverket (direct code execution). ns-2-modeller kan ibland portas till ns-3, sÀrskilt om de implementerades i C++.
Om du Àr osÀker skulle en bra rekommendation vara att titta pÄ bÄda simulatorerna (och andra simulatorer ocksÄ), i synnerhet de modeller som finns tillgÀngliga för din studie, men tÀnk pÄ att ditt resultat kan bli bÀttre med hjÀlp av ett verktyg som för nÀrvarande aktivt utvecklas och underhÄlls (ns-3).
1.3 Deltagande i projektet
ns-3 Àr en vetenskaplig pedagogisk simulering för forskarvÀrlden. Det kommer att bygga pÄ pÄgÄende bidrag frÄn samhÀllet för att utveckla nya modeller, felsöka eller underhÄlla befintliga och dela resultat. Det finns nÄgra policyer som vi hoppas kommer att uppmuntra mÀnniskor att bidra till ns-3 som de gör för ns-2:
- Licensering med öppen kÀllkod baserad pÄ kompatibilitet med GNU GPLv2-licensen.
- wikin.
- Sida , liknande den populÀra sidan för ns-2.
- AnvÀnda GitLab.com, inklusive problemspÄrningssystemet:
Vi förstÄr att Àven om du lÀser detta dokument, kanske du inte planerar att bidra till det i detta skede. Men vi vill att du ska veta att att bidra ligger i projektets anda, och att vi skulle uppskatta din feedback Àven om dina tidiga erfarenheter av ns-3 (t.ex. "den hÀr delen av handledningen var inte tydlig..."), rapportering av förÄldrad dokumentation eller kommentarer i koden, etc... Den föredragna metoden Àr att skicka in korrigeringar eller att lÀmna med dina korrigeringar och skapa en pull-begÀran, eller skapa en begÀran pÄ vÄr tracker och lÀgg till en patch.
1.4 Ledningens organisation
Den hÀr guiden förutsÀtter att nya anvÀndare initialt kan följa en vÀg som denna:
- Försök att ladda ner och bygga en kopia;
- Prova att köra nÄgra exempelprogram;
- Titta pÄ simuleringsresultatet och försök justera det.
Till slut försökte vi organisera presentationen enligt dessa steg.
Kapitel 2
KĂ€llor till information
2.1 NĂ€tverk
Det finns flera viktiga resurser som alla ns-3-anvÀndare bör vara medvetna om. Huvudwebbplatsen finns pÄ:
och ger tillgÄng till grundlÀggande information om ns-3-systemet. Detaljerad dokumentation finns tillgÀnglig via huvudwebbplatsen pÄ: .
PÄ samma webbsida kan du ocksÄ hitta dokument relaterade till systemarkitekturen.
Det finns en wikisida som kompletterar ns-3s huvudwebbplats, som finns pÄ: .
Den innehÄller vanliga frÄgor för anvÀndare och utvecklare, sÄvÀl som felsökningsguider, tredjepartskod, dokumentation och mer.
KÀllkoden kan hittas och ses pÄ GitLab.com:
.
DÀr i förvaret med namnet ns-3-dev Det nuvarande utvecklingstrÀdet finns. Tidigare utgÄvor och experimentella arkiv frÄn kÀrnutvecklarna kan ocksÄ hittas under Mercurial pÄ den gamla projektplatsen pÄ:
.
2.2 Git
Komplexa mjukvarusystem behöver ett sĂ€tt att hantera organisationen och förĂ€ndringen av den underliggande koden och dokumentationen. Det finns mĂ„nga sĂ€tt att uppnĂ„ detta, och du kanske har hört talas om nĂ„gra av de system som vanligtvis anvĂ€nds för att göra detta. Tills nyligen anvĂ€nde ns-3-projektet Mercurial som sitt kĂ€llkodshanteringssystem, men i december 2018 gick vi över till att anvĂ€nda Git. Ăven om du inte behöver veta mycket om Git för att lĂ€sa den hĂ€r guiden, rekommenderar vi att du bekantar dig med den och anvĂ€nder den för att komma Ă„t din kĂ€llkod. GitLab.com tillhandahĂ„ller resurser för att bemĂ€stra kĂ€rnfĂ€rdigheter pĂ„: .
2.3 WAF
NĂ€r du har laddat ner kĂ€llkoden till din dator mĂ„ste du kompilera den för att göra programmet redo att köras. Precis som med kĂ€llkodshantering finns det mĂ„nga verktyg tillgĂ€ngliga för att utföra denna funktion. Förmodligen Ă€r det mest kĂ€nda av dessa verktyg göra. Ăven om detta verktyg Ă€r det mest vĂ€lkĂ€nda, Ă€r det ocksĂ„ det svĂ„raste att anvĂ€nda nĂ€r det anvĂ€nds i ett mycket stort och mycket konfigurerbart system. Detta har lett till att mĂ„nga alternativ har utvecklats. Nyligen har sĂ„dana system utvecklats med Python-sprĂ„ket.
ns-3-projektet anvÀnder Waf-byggsystemet. Det Àr en del av en ny generation av Python-baserade byggsystem. För att bygga ett befintligt ns-3-system behöver du inte kÀnna till Python.
För dem som Àr intresserade av information om hur man anvÀnder Waf finns en bok tillgÀnglig pÄ:
och den aktuella koden:
.
2.4 Utvecklingsmiljö
Som nÀmnts ovan exekveras skript i ns-3 i C++ eller Python. Det mesta av ns-3 API Àr tillgÀngligt i Python, men modellerna Àr skrivna i C++ ÀndÄ. Denna handledning förutsÀtter att du Àr bekant med objektorienterad programmering i C++. NÀr vi fortsÀtter kommer vi att Àgna lite tid Ät att granska nÄgra av de mer avancerade koncepten och kanske obekanta sprÄkfunktioner som idiom och designmönster. Vi vill inte att den hÀr guiden ska bli en C++ handledning, sÄ vi förvÀntar oss grundlÀggande kunskaper i sprÄket. Det finns mÄnga informationskÀllor om C++ tillgÀngliga pÄ Internet eller i tryckt form.
Om du Àr ny pÄ C++, innan du fortsÀtter, lÀr dig grunderna i sprÄket med hjÀlp av en handledning eller en webbplats dedikerad till utbildning eller recept. Till exempel, sÄ hÀr: .
nedanför Linuxns-3-systemet anvÀnder flera komponenter frÄn GNU-verktygskedjan. En verktygskedja Àr en uppsÀttning programmeringsverktyg som finns tillgÀngliga i en given programvarumiljö. För en snabb översikt över vad som ingÄr i GNU-verktygskedjan, se .
ns-3-simulatorn anvÀnder gcc, GNU binutils och gdb. Samtidigt anvÀnder vi varken make- eller autoverktyg frÄn GNU-verktygskedjan för att bygga projektet. För dessa funktioner anvÀnder vi Waf.
РmacOS Xcode-verktygskedjan anvÀnds. ns-3-anvÀndare pÄ Mac uppmanas starkt att installera Xcode och kommandoradsverktygspaketen frÄn Apple App Store, och för mer information, besök ns-3-installationswikisidan: ().
Vanligtvis arbetar författaren till ns-3 i Linux eller Unix-liknande miljö. För de som arbetar under Windows, det finns miljöer som imiterar omgivningen i varierande grad LinuxFör sÄdana anvÀndare har ns-3-projektet historiskt (men inte för nÀrvarande) stöttat utveckling i Cygwin-miljön. För nedladdningsdetaljer och mer information om Cygwin och ns-3, besök ns-3 wikisidan:
.
MinGW stöds för nÀrvarande inte officiellt. Ett annat alternativ till Cygwin Àr att installera en virtuell miljö, till exempel VMware Server, dÀr du kan installera Linux.
2.5 Sockelprogrammering
Exemplen i den hÀr handledningen anvÀnder de grundlÀggande funktionerna i Berkeley Sockets API. Om du Àr nybörjare pÄ sockets rekommenderar vi att du bekanta dig med API:et och nÄgra vanliga anvÀndningsomrÄden. För en bra översikt över socketprogrammering, TCP/IP Vi rekommenderar att du anvÀnder: "TCP/IP Hylsor i C-form, Donahoo och Calvert.
Det finns en relaterad webbplats som innehÄller kÀllan till exemplen i boken, som du kan hitta pÄ:
.
Om du förstÄr de fyra första kapitlen i boken (eller för de som inte har tillgÄng till en kopia av boken, ekoklienterna och servrarna som visas pÄ webbsidan lÀnkad ovan), kommer det att rÀcka för att förstÄ handledningen. Det finns en liknande bok
"Multicast Sockets, Multicast Sockets", Makofske och Almeroth.
Den tÀcker material du kan behöva om du skulle studera distributionens multicast-exempel.
FortsÀttning:
KĂ€lla: will.com
