Denna artikel inleder en serie publikationer med översÀttning av lÀroboken "" för nÀtverkssimulatorn ns-3.

Detta dokument Àr en översÀttning av det ursprungliga dokumentet pÄ engelska, som Àr skrivet i för och lagras i katalogen doc/tutorial i ns-3:s kÀllkod.
1 Inledning
1.1 Om ns-3
1.2 För ns-2-anvÀndare
1.3 Deltagande i projektet
1.4 Organisation av manualen
2 InformationskÀllor
2.1 NĂ€tverk
2.2 Git
2.3 WAF
2.4 Utvecklingsmiljö
2.5 Programmering av sockets
Den primÀra dokumentationen för ns-3-projektet finns i fem format:
- API-dokumentationen för simulatorn: ns-3 .
- Handledningen, manualen och modellbiblioteket för och .
- ns-3.
Kapitel 1
Förord
Simulatorn ns-3 Àr en hÀndelsedriven nÀtverkssimulator, avsedd frÀmst för forskning och utbildningsÀndamÄl. Projektet som utvecklar ns-3 startades 2006 och Àr ett öppen kÀllkodsprojekt.
Syftet med denna manual Àr att introducera ns-3 för nya anvÀndare pÄ ett systematiskt och strukturerat sÀtt. Det kan ibland vara svÄrt för nybörjare att fÄ den information de behöver och omvandla den till fungerande simuleringar. I denna manual genomför vi flera exempel pÄ simulering medan vi förklarar och visar centrala begrepp och funktioner.
I takt med att vi gÄr framÄt kommer vi att presentera den fullstÀndiga dokumentationen för ns-3 och ge lÀnkar till kÀllkoden för dem som Àr intresserade av en djupare förstÄelse av systemets funktionalitet.
I början Àr det vÀrt att notera nÄgra nyckelpunkter:
- ns-3 har öppen kÀllkod och projektet strÀvar efter att upprÀtthÄlla en öppen miljö dÀr forskare kan bidra och dela sina programvaruinsatser.
- ns-3 Àr inte en bakÄtkompatibel utvidgning av ns-2; det Àr en ny simulator. BÄda simulatorsystemen Àr skrivna i C++, men ns-3 Àr en ny simulator som inte stödjer ns-2:s API-grÀnssnitt.
1.1 Om ns-3
ns-3-simulatorn har utvecklats för att erbjuda en öppen och utbyggbar plattform för nÀtverksmodellering, nÀtverksforskning och utbildning. Kort sagt, ns-3 tillhandahÄller modeller för hur paketdatatransmissionsnÀtverk Àr implementerade och fungerar, och ger anvÀndaren en simuleringsmotor för att utföra simuleringsexperiment. Anledningar att anvÀnda ns-3 kan vara situationer dÀr det Àr svÄrt eller omöjligt att utföra forskning pÄ ett verkligt system, möjligheten att studera systembeteende i en strikt kontrollerad och reproducerbar miljö, samt att lÀra sig hur nÀtverk fungerar.
AnvÀndare kommer att mÀrka att den uppsÀttning modeller som erbjuds i ns-3 Àr fokuserad pÄ modellering av internetprotokoll och nÀtverk, men ns-3 Àr inte begrÀnsat till enbart internetbaserade system; vissa anvÀndare anvÀnder ns-3 för att modellera system som inte Àr baserade pÄ Internet-teknologier.
Det finns mÄnga verktyg för nÀtverksmodellering. HÀr Àr nÄgra sÀrskiljande drag hos ns-3 i jÀmförelse med andra verktyg.
- ns-3 har utformats som en uppsÀttning biblioteker som kan kombineras med varandra och med andra externa programvarubibliotek. Medan vissa modellplattformar erbjuder anvÀndarna en integrerad miljö med ett grafiskt anvÀndargrÀnssnitt som hanterar allt arbete, Àr ns-3 mer modulÀr i detta avseende. Med ns-3 kan flera externa animatorer, dataanalys- och visualiseringsverktyg anvÀndas. AnvÀndare förvÀntas dock arbeta i kommandoraden och med C++ och/eller Python-programmeringsverktyg.
- ns-3 anvÀnds frÀmst pÄ Linux- eller macOS-system, Àven om det finns stöd för BSD-system samt Windows-plattformar som kan kompilera kod för Linux, sÄsom Windows Subsystem for Linux eller Cygwin. Windows-versionen av Visual Studio stöds för nÀrvarande inte, Àven om utvecklaren arbetar pÄ att implementera denna möjlighet. Windows-anvÀndare kan ocksÄ anvÀnda en virtuell maskin med Linux.
- ns-3 Àr inte en officiellt stödd produkt frÄn nÄgot företag. Stödet för ns-3 ges med högsta engagemang pÄ forumet för ns-3-anvÀndare (ns-3-users@googlegroups.com).
1.2 För ns-2-anvÀndare
För dem som Àr bekanta med ns-2 (ett populÀrt verktyg som föregick ns-3) Àr det mest pÄtagliga yttre förÀndringarna vid övergÄngen till ns-3 bytet av skriptsprÄk. Program i ns-2 Àr skrivna i OTcl, och simuleringsresultat kan visualiseras med hjÀlp av nÀtverksanimatorn nam. I ns-2 Àr det omöjligt att köra en simulering enbart frÄn C++ (det vill sÀga som en main()-program utan nÄgon OTcl). Dessutom Àr vissa komponenter i ns-2 skrivna i C++ medan andra Àr skrivna i OTcl. I ns-3 Àr simulatorn helt skriven i C++ med valfria bindningar till Python. DÀrför kan simuleringsscenarier skrivas bÄde i C++ och Python. Nya animatorer och visualiserare finns tillgÀngliga och utvecklas fortfarande. Eftersom ns-3 genererar pcap-paketracefiler kan Àven andra verktyg anvÀndas för att analysera spÄren. I denna handledning kommer vi först att fokusera pÄ scenarier som realiserats i C++ och tolkningen av resultaten genom analys av tracefiler.
Men det finns Àven likheter (till exempel Àr bÄda verktygen baserade pÄ C++-objekt, en del av koden frÄn ns-2 har portats till ns-3). Under presentationen kommer vi att försöka visa skillnaderna mellan ns-2 och ns-3.
En frÄga som vi ofta hör Àr: "Ska jag fortfarande anvÀnda ns-2 eller byta till ns-3?" Enligt författarens Äsikt, om anvÀndaren pÄ nÄgot sÀtt inte Àr bunden till ns-2 (baserat pÄ befintlig personlig komfort och kunskap om ns-2, eller pÄ en specifik simuleringsmodell som endast Àr tillgÀnglig i ns-2), kommer ns-3 att ge en högre produktivitet av följande skÀl:
- ns-3 stöds aktivt med en aktiv och responsiv anvÀndarforum, medan ns-2 endast stöds nÄgot och har pÄ över tio Är inte sett nÄgra betydande förÀndringar i sin huvudsakliga kÀllkod.
- ns-3 erbjuder funktioner som inte Àr tillgÀngliga i ns-2, sÄsom en körningsmiljö för implementationskod (som gör att anvÀndare kan köra verklig implementationskod i simulatorn).
- ns-3 ger en lÀgre grundlÀggande abstraheringsnivÄ jÀmfört med ns-2, vilket gör att det bÀttre kan motsvara hur verkliga system interagerar. Vissa begrÀnsningar som upptÀckts i ns-2 (som korrekt stöd för flera typer av grÀnssnitt pÄ noden) har ÄtgÀrdats i ns-3.
Tack vare sin lÄnga historia har ns-2 ett mer varierat utbud av stödda moduler Àn ns-3. à andra sidan har ns-3 mer detaljerade modeller inom flera populÀra forskningsomrÄden (inklusive komplexa modeller för LTE och WiFi), och dess stöd för implementationskoden möjliggör en mycket bred uppsÀttning högprecisionsmodeller. AnvÀndare kan bli förvÄnade över att lÀra sig att hela Linux-nÀtverksstacken kan kapslas in i en ns-3-nod med hjÀlp av direkt körningskod (DCE) ramverket. Modeller frÄn ns-2 kan ibland porteras till ns-3, sÀrskilt om de har implementerats i C++.
Om du Àr osÀker Àr en bra rekommendation att titta pÄ bÄda simulators (liksom andra simulatorer), sÀrskilt pÄ modeller som Àr tillgÀngliga för din forskning, men kom ihÄg att ditt resultat kan bli bÀttre om du anvÀnder ett verktyg som för nÀrvarande aktivt utvecklas och underhÄlls (ns-3).
1.3 Deltagande i projektet
ns-3 Àr en forsknings- och utbildningssimulator för forskarsamhÀllet. Det kommer att bygga pÄ nuvarande bidrag frÄn samhÀllet i utvecklingen av nya modeller, felsökning eller underhÄll av befintliga, och dela resultat. Det finns viss policy som vi hoppas kommer att uppmuntra mÀnniskor att bidra till ns-3, precis som de gör för ns-2:
- Ăppen kĂ€llkodlicens baserad pĂ„ kompatibilitet med GNU GPLv2-licensen.
- wiki.
- Sida , liknande den populÀra sidan för ns-2.
- AnvÀndning av GitLab.com, inklusive buggrapportering:
Vi förstÄr att Àven om du lÀser detta dokument kan du kanske inte planera att bidra vid det hÀr laget. Men vi vill att du ska veta att bidra ligger i projektets anda och att din feedback, Àven om det handlar om din tidiga erfarenhet med ns-3 (t.ex. "denna del av manualen var inte tydlig ..."), rapportering av förÄldrad dokumentation eller kommentar i koden etc. kommer att vara vÀrdefull för oss... Det föredragna sÀttet att skicka in rÀttelser Àr antingen att göra en gaffel (fork) med dina rÀttelser och skapa en sammanslagningsförfrÄgan, eller att skapa en förfrÄgan pÄ vÄr tracker och lÀgga till en patch. Denna guide förutsÀtter att nya anvÀndare initialt kan följa en vÀg som den hÀr:
1.4 Organisation av manualen
Försök ladda ner och bygga en kopia;
- Försök köra nÄgra exempelprogram;
- Försök att köra nÄgra exempelprogram;
- Titta pÄ simuleringsresultatet och försök att anpassa det.
I slutÀndan försökte vi organisera presentationen enligt dessa steg.
Kapitel 2
InformationskÀllor
2.1 NĂ€tverk
Det finns flera viktiga resurser som varje anvÀndare av ns-3 bör kÀnna till. Huvudwebbplatsen finns pÄ:
och ger tillgÄng till grundlÀggande information om ns-3-systemet. Detaljerad dokumentation Àr tillgÀnglig via huvudwebbplatsen pÄ: .
PÄ denna webbsida kan du ocksÄ hitta dokument relaterade till systemarkitekturen.
Det finns en wiki-sida som kompletterar huvudwebbplatsen för ns-3, som du hittar pÄ: .
DÀr hittar du svar pÄ vanliga frÄgor för anvÀndare och utvecklare, samt felsökningsguider, tredjepartskod, dokument osv.
KÀllkoden kan hittas och ses pÄ GitLab.com:
.
DÀr i förvaret med namnet ns-3-dev finns den aktuella utvecklingsgrenen. Tidigare versioner och experimentella kÀrnutvecklarförvar kan ocksÄ hittas under Mercurial pÄ den gamla projektwebbplatsen pÄ:
.
2.2 Git
Komplexa programsystem behöver ett sĂ€tt att hantera organisationen och förĂ€ndringarna av den underliggande koden och dokumentationen. Det finns mĂ„nga sĂ€tt att uppnĂ„ detta, och du har kanske hört talas om nĂ„gra av de system som vanligtvis anvĂ€nds för detta. Fram till nyligen anvĂ€nde ns-3-projektet Mercurial som kĂ€llkodshanteringssystem, men i december 2018 bytte vi till att anvĂ€nda Git. Ăven om du inte behöver veta mycket om Git för att lĂ€sa denna handledning, rekommenderar vi att du bekantar dig med det och anvĂ€nder det för att fĂ„ tillgĂ„ng till kĂ€llkoden. GitLab.com erbjuder resurser för att bemĂ€stra grundlĂ€ggande fĂ€rdigheter pĂ„: .
2.3 WAF
NĂ€r du har laddat ner kĂ€llkoden till din dator, behöver du kompilera den för att fĂ„ en fĂ€rdig programvara. Precis som med hanteringen av kĂ€llkoden finns det mĂ„nga verktyg tillgĂ€ngliga för att utföra denna funktion. Förmodligen Ă€r det mest kĂ€nda av dessa verktyg make. Ăven om detta verktyg Ă€r det mest vĂ€lkĂ€nda, bör det noteras att det kan vara mest komplicerat att anvĂ€nda i ett mycket stort och flexibelt konfigurerbart system. Detta har lett till utvecklingen av mĂ„nga alternativ. Nyligen har sĂ„dana system utvecklats med hjĂ€lp av Python-sprĂ„ket.
I ns-3-projektet anvÀnds byggsystemet Waf. Det Àr en ny generation av byggsystem baserade pÄ Python. För att bygga det befintliga ns-3-systemet behöver du inte kunna Python.
För dem som Àr intresserade av detaljer om hur man anvÀnder Waf, finns det en bok tillgÀnglig pÄ adressen:
och den aktuella koden:
.
2.4 Utvecklingsmiljö
Som nÀmnts ovan körs skripten i ns-3 pÄ C++ eller Python. Största delen av API:et i ns-3 Àr tillgÀngligt pÄ Python, men modellerna Àr ÀndÄ skrivna i C++. Denna handbok förutsÀtter att du Àr bekant med objektorienterad programmering i C++. NÀr vi gÄr framÄt kommer vi att Àgna en viss tid Ät att gÄ igenom de mest avancerade koncepten och kanske okÀnda egenskaper hos sprÄket, som idiom och designmönster. Vi vill inte att denna handbok ska bli en lÀrarhandledning i C++, sÄ vi förvÀntar oss grundlÀggande kunskaper i sprÄket. Det finns mÄnga informationskÀllor om C++ tillgÀngliga online eller i tryck.
Om du Àr nybörjare i C++, vÀnligen se till att du behÀrskar grunderna i sprÄket innan du fortsÀtter, anvÀnda en lÀrobok eller en webbplats dedikerad till utbildning eller fÀrdiga recept. Till exempel: .
Under Linux anvÀnder ns-3-systemet flera komponenter frÄn GNU-projektets verktyg. Verktygen Àr en uppsÀttning programmeringsverktyg som finns tillgÀngliga i denna mjukvarumiljö. För en snabb översyn av vad som ingÄr i GNU-verktygen, se. .
Simulatorn ns-3 anvÀnder gcc, GNU binutils och gdb. Samtidigt anvÀnder vi varken make eller autotools för att bygga projektet frÄn GNU-verktygen. För dessa funktioner anvÀnder vi Waf.
I macOS anvÀnds uppsÀttningen verktyg Xcode. AnvÀndare av ns-3 pÄ Mac rekommenderas starkt att installera Xcode och kommandoradsverktyg frÄn Apple App Store, samt för mer information, besök wikisidan för installation av ns-3: ().
Vanligtvis arbetar ns-3 författaren i en Linux- eller Unix-liknande miljö. För de som arbetar under Windows finns det miljöer som i varierande grad imiterar Linux-miljön. För sÄdana anvÀndare har projektet ns-3 tidigare (men inte nu) stöd för utveckling i Cygwin-miljön. För detaljer om nedladdning och mer information om Cygwin och ns-3, besök wikisidan för ns-3:
.
MinGW stöds för nÀrvarande inte officiellt. Ett annat alternativ till Cygwin Àr att installera en virtuell miljö som VMware-server, dÀr Linux kan installeras.
2.5 Programmering av sockets
I exemplen som anvÀnds i den hÀr guiden kommer vi att anvÀnda de grundlÀggande funktionerna hos Berkeley Socket API. Om du Àr ny pÄ sockets rekommenderar vi att du bekantar dig med API:et och nÄgra vanliga anvÀndningsfall för dem. Som en bra översikt över TCP/IP-socketprogrammering rekommenderar vi: "TCP/IP Sockets in C", av Donahoo och Calvert.
Det finns en tillhörande webbplats som innehÄller kÀllan till exemplen i boken, som du kan hitta pÄ:
.
Om du förstÄr de första fyra kapitlen i boken (eller för dem som inte har tillgÄng till en kopia av boken, echo-klienterna och servrarna som visas pÄ webbplatsen via lÀnken ovan), Àr detta tillrÀckligt för att förstÄ handledningen. Det finns en liknande bok
"Multicast Sockets, Multicast Sockets", av Makofske och Almeroth.
Den tÀcker material som kan vara anvÀndbart om du studerar exemplen för multicast-distribution.
FortsÀttning:
KĂ€lla: habr.com
