Handleiding voor de ns-3 netwerk simulator. Hoofdstukken 1,2

Dit artikel opent een serie publicaties met de vertaling van het handboek "ns-3 Tutorial Release ns-3.29" over de ns-3 netwerk simulator.

Handleiding voor de ns-3 netwerk simulator. Hoofdstukken 1,2

Dit document is een vertaling van het oorspronkelijke document in het Engels, dat is geschreven in reStructuredText voor Sphinx en bevindt zich in de map doc/tutorial van de broncode van ns-3.

1 Voorwoord
1.1 Over ns-3
1.2 Voor ns-2 gebruikers
1.3 Deelname aan het project
1.4 Organisatie van de handleiding
2 Informatiebronnen
2.1 Netwerk
2.2 Git
2.3 WAF
2.4 Ontwikkelomgeving
2.5 Socketprogrammering
hoofdstuk 3
hoofdstuk 4
hoofdstuk 5
hoofdstuk 6
hoofdstuk 7
hoofdstukken 8, 9

Download de vertaling als één PDF-bestand

De primaire documentatie voor het ns-3 project is beschikbaar in vijf vormen:

Voorwoord

De ns-3 simulator is een discrete-event netwerksimulator, voornamelijk bedoeld voor onderzoek en educatief gebruik. Het project dat ns-3 ontwikkelt, is gestart in 2006 en is een open source project.

Doel van deze gids is om ns-3 te introduceren aan nieuwe gebruikers in een systematische, gestructureerde vorm. Soms kan het voor een beginner moeilijk zijn om de benodigde informatie te krijgen en deze om te zetten in een werkend model.

In deze gids zullen we verschillende modelleringsvoorbeelden implementeren, waarbij we onderweg de belangrijkste concepten en kenmerken uitleggen.

Naarmate we vorderen, zullen we de volledige documentatie over ns-3 presenteren en links naar de broncode geven voor degenen die geïnteresseerd zijn in een dieper begrip van hoe het systeem werkt.

  • Aan het begin willen we enkele belangrijke punten aanwijzen:
  • ns-3 heeft een open source code en het project streeft naar een open omgeving waar onderzoekers hun bijdragen kunnen leveren en hun softwareontwikkelingen kunnen delen. ns-3 is geen achterwaarts compatibele uitbreiding van ns-2, het is een nieuwe simulator. Beide simulators zijn in C++ geschreven, maar ns-3 is een nieuwe simulator die geen ns-2 API's ondersteunt.

1.1 Over ns-3

De ns-3 simulator is ontwikkeld om een open en uitbreidbaar platform te bieden voor netwerkmodellering, netwerkonderzoek en onderwijs. Kortom, ns-3 biedt modellen van hoe netwerken voor pakketoverdracht zijn geïmplementeerd en functioneren, en geeft de gebruiker een simulatiemotor voor het uitvoeren van simulatie-experimenten. Redenen om ns-3 te gebruiken kunnen situaties zijn waarin een onderzoek moet worden uitgevoerd dat moeilijk of onmogelijk te doen is op een echt systeem, de mogelijkheid om het gedrag van een systeem in een strikt gecontroleerde, reproduceerbare omgeving te bestuderen, en om te leren hoe netwerken werken.

Gebruikers zullen opmerken dat de in ns-3 aangeboden set modellen zich richt op het modelleren van internetprotocollen en netwerken, maar ns-3 is niet beperkt tot alleen internet-systemen; sommige gebruikers gebruiken ns-3 voor het modelleren van systemen die niet op internettechnologieën zijn gebaseerd.

Er zijn veel netwerkmodelleringstools beschikbaar. Hieronder staan enkele onderscheidende kenmerken van ns-3 in vergelijking met andere tools.

  • ns-3 is ontworpen als een set bibliotheken die samen kunnen worden gecombineerd, evenals met andere externe softwarebibliotheken. Terwijl sommige modelleringplatformen gebruikers een enkele geïntegreerde omgeving met een grafische gebruikersinterface bieden die het hele proces beheert, is ns-3 in dit opzicht meer modulair. Met ns-3 kunnen verschillende externe animators, data-analyse- en visualisatietools worden gebruikt. Het is echter te verwachten dat gebruikers in de opdrachtregel werken en met ontwikkeltools in C++ en/of Python.
  • ns-3 wordt voornamelijk gebruikt in Linux- of macOS-systemen, hoewel er ondersteuning is voor BSD-systemen en voor Windows-platforms die code voor Linux kunnen compileren, zoals Windows Subsystem for Linux of Cygwin. De native Windows Visual Studio wordt momenteel niet ondersteund, hoewel de ontwikkelaar werkt aan de implementatie van deze functionaliteit. Windows-gebruikers kunnen ook een virtuele machine met Linux gebruiken.
  • ns-3 is geen officieel ondersteund product van een bedrijf. Ondersteuning voor ns-3 wordt geboden met de grootste inzet op het gebruikersforum van ns-3 (ns-3-users@googlegroups.com).

1.2 Voor ns-2 gebruikers

Voor degenen die bekend zijn met ns-2 (een populaire tool die aan ns-3 voorafging), is de meest opvallende uiterlijke verandering bij het overstappen op ns-3 de wijziging van de scriptsprache. Programma's in ns-2 zijn geschreven in OTcl, en de simulatie resultaten kunnen worden gevisualiseerd met behulp van de netwerk animator nam. In ns-2 is het niet mogelijk om een simulatie uitsluitend vanuit C++ te starten (dat wil zeggen als main() programma zonder enige OTcl). Bovendien zijn sommige componenten van ns-2 geschreven in C++, terwijl andere in OTcl zijn geschreven. In ns-3 is de simulator volledig geschreven in C++ met optionele Python bindings. Daarom kunnen simulatiedocumenten zowel in C++ als in Python worden geschreven. Nieuwe animators en visualizers zijn beschikbaar en worden nog steeds ontwikkeld. Aangezien ns-3 pcap-pakket traceerbestanden genereert, kunnen ook andere hulpmiddelen worden gebruikt voor analyse van de traceringen. In deze handleiding richten we ons in eerste instantie op scenario's die zijn geïmplementeerd in C++ en de interpretatie van de resultaten via de analyse van traceerbestanden.

Er zijn echter ook overeenkomsten (bijvoorbeeld zijn beide tools gebaseerd op C++ objecten, en een deel van de ns-2 code is naar ns-3 geporteerd). Terwijl we dit uitleggen, zullen we proberen de verschillen tussen ns-2 en ns-3 aan te geven.

De vraag die we vaak horen: "Moet ik nog steeds ns-2 gebruiken of overstappen naar ns-3?" Volgens de auteur, als de gebruiker op een of andere manier niet afhankelijk is van ns-2 (op basis van bestaande persoonlijke comfort en kennis van ns-2, of op basis van een specifieke simulatiemodel dat alleen beschikbaar is in ns-2), dan zal hij met ns-3 productiever zijn om de volgende redenen:

  • ns-3 wordt actief ondersteund met een actieve, responsieve gebruikers mailinglijst, terwijl ns-2 slechts lichtjes wordt ondersteund en al meer dan tien jaar geen significante veranderingen in zijn hoofdcode heeft gezien.
  • ns-3 biedt functies die niet beschikbaar zijn in ns-2, zoals een runtime-omgeving voor implementatiecode (waardoor gebruikers daadwerkelijk implementatiecode in de simulator kunnen draaien).
  • ns-3 biedt een lagere basisabstractie in vergelijking met ns-2, waardoor het beter overeenkomt met hoe echte systemen interageren. Sommige beperkingen die in ns-2 werden ontdekt (zoals het correcte ondersteunen van verschillende interface types op een knooppunt) zijn in ns-3 verholpen.

Dankzij zijn lange geschiedenis heeft ns-2 een diverser aanbod aan ondersteunde modules dan ns-3. Toch heeft ns-3 meer gedetailleerde modellen in verschillende populaire onderzoeksgebieden (inclusief complexe modellen voor LTE en WiFi). De ondersteuning van de implementatiecode laat een breed scala aan modellen met hoge nauwkeurigheid toe. Gebruikers kunnen verrast zijn te ontdekken dat de hele netwerstack van Linux in een ns-3-knooppunt kan worden ingekapseld met behulp van het directe uitvoeringscode (DCE) framework. Modellen van ns-2 kunnen soms naar ns-3 worden gepoort, vooral als ze in C++ zijn geïmplementeerd.

Als u twijfelt, is het een goed idee om naar beide simulators (en ook andere simulators) te kijken, vooral naar de modellen die beschikbaar zijn voor uw onderzoek, maar houd er rekening mee dat uw resultaat mogelijk beter is met een tool die momenteel actief wordt ontwikkeld en ondersteund (ns-3).

1.3 Deelname aan het project

ns-3 is een wetenschappelijk-onderwijs simulator voor de onderzoekscommunity. Het zal voortbouwen op de huidige bijdragen van de gemeenschap aan de ontwikkeling van nieuwe modellen, het debuggen of ondersteunen van bestaande modellen en het delen van resultaten. Er is een beleid dat hopelijk mensen zal aanmoedigen bij te dragen aan ns-3, zoals ze dat doen voor ns-2:

  • Licentiëring met een open bron op basis van compatibiliteit met de GNU GPLv2-licentie.
  • wiki.
  • Pagina Bijdragerscode, vergelijkbaar met de populaire pagina voor ns-2.
  • Gebruik van GitLab.com, inclusief het foutopsporingssysteem:
    https://www.gitlab.com/nsnam

We begrijpen dat, zelfs als u dit document leest, u op dit moment misschien niet van plan bent om bij te dragen. Maar we willen dat u weet dat bijdragen aansluit bij de geest van het project en dat uw feedback waardevol voor ons zal zijn, zelfs over uw vroege ervaringen met ns-3 (bijv. "dit gedeelte van de handleiding was niet duidelijk..."); meldingen van verouderde documentatie of opmerkingen in de code, etc. De voorkeur gaat uit naar het indienen van correcties door te forkeren op https://www.gitlab.com/nsnam met uw correcties en een pull-verzoek te creëren, of door een verzoek in te dienen op onze tracker en een patch toe te voegen.

1.4 Organisatie van de handleiding

Deze handleiding gaat ervan uit dat nieuwe gebruikers in eerste instantie een traject kunnen volgen zoals:

  • Probeer een kopie te downloaden en te bouwen;
  • Probeer een paar voorbeeldprogramma's uit te voeren;
  • Bekijk het resultaat van de simulatie en probeer het aan te passen.
    Uiteindelijk hebben we geprobeerd de presentatie volgens deze stappen te organiseren.

Hoofdstuk 2

Informatiebronnen

2.1 Netwerk

Er zijn verschillende belangrijke bronnen die elke gebruiker van ns-3 moet kennen. De hoofdwebsite is te vinden op: https://www.nsnam.org
en biedt toegang tot basisinformatie over het ns-3 systeem. Gedetailleerde documentatie is beschikbaar via de hoofdwebsite op: https://www.nsnam.org/documentation/.

Op dezelfde webpagina vindt u ook documenten die betrekking hebben op de systeemarchitectuur.

Er is een wiki-pagina die de hoofdwebsite van ns-3 aanvult, deze vindt u op: https://www.nsnam.org/wiki/.

Daar vindt u antwoorden op veelgestelde vragen voor gebruikers en ontwikkelaars, evenals handleidingen voor probleemoplossing, externe code, documentatie, enz.
De broncode is te vinden en te bekijken op GitLab.com:
https://gitlab.com/nsnam/.

Daarin is de repository genaamd ns-3-dev de actuele ontwikkelingsboom. Eerdere releases en experimentele repositories van de kernontwikkelaars zijn ook te vinden onder Mercurial op de oude projectwebsite op:
http://code.nsnam.org.

2.2 Git

Complexe softwaresystemen hebben een manier nodig om de organisatie en wijziging van de basiscode en documentatie te beheren. Er zijn veel manieren om dit te bereiken, en je hebt misschien van enkele systemen gehoord die hiervoor vaak worden gebruikt. Tot voor kort gebruikte het ns-3 project Mercurial als het versiebeheersysteem, maar in december 2018 zijn we overgestapt op Git. Hoewel je niet veel hoeft te weten over Git om deze handleiding te lezen, raden we aan om het te leren en te gebruiken om toegang te krijgen tot de broncode. GitLab.com biedt middelen om de basisvaardigheden te beheersen op: https://git-scm.com/book/ru/v2.

2.3 WAF

Nadat u de broncode op uw computer heeft gedownload, moet u deze compileren om een werkende applicatie te krijgen. Zoals bij het beheer van broncode zijn er veel tools beschikbaar voor deze functie. Waarschijnlijk is de bekendste van deze tools make. Hoewel dit instrument het meest bekend is, is het ook het moeilijkst te gebruiken in een zeer groot en flexibel configureerbaar systeem. Dit heeft geleid tot de ontwikkeling van vele alternatieven. Onlangs zijn dergelijke systemen ontwikkeld met behulp van de programmeertaal Python.

In het ns-3-project wordt het Waf-buildsysteem gebruikt. Dit is een nieuw generatie build-systeem gebaseerd op Python. Voor het bouwen van het bestaande ns-3-systeem heeft u geen Python-kennis nodig.

Voor degenen die geïnteresseerd zijn in de details van het gebruik van Waf, is er een boek beschikbaar op:
https://waf.io/book/
en de huidige code:
https://gitlab.com/ita1024/waf/.

2.4 Ontwikkelomgeving

Zoals eerder vermeld, worden scripts in ns-3 uitgevoerd in C++ of Python. Het grootste deel van de ns-3 API is beschikbaar in Python, maar de modellen zijn in ieder geval in C++ geschreven. Deze handleiding gaat ervan uit dat u bekend bent met objectgeoriënteerd programmeren in C++. Tijdens de uitleg zullen we enige tijd besteden aan het bekijken van de meest geavanceerde concepten en mogelijk onbekende kenmerken van de taal, zoals idiomen en ontwerpsjablonen. We willen niet dat deze handleiding verandert in een C++-handboek, dus we verwachten een basiskennis van de taal. Er zijn veel informatiebronnen over C++ beschikbaar op internet of in druk.

Als u nieuw bent in C++, zorg er dan voor dat u de basisprincipes van de taal beheerst door gebruik te maken van een handleiding of website gewijd aan leren of kant-en-klare recepten. Bijvoorbeeld: https://github.com/ashtanyuk/CPP-2018.

Onder Linux gebruikt het ns-3-systeem verschillende componenten van de GNU-projecttoolset. De toolset is een verzameling programmeertools die beschikbaar zijn in deze softwareomgeving. Voor een snelle samenvatting van wat de GNU-tools omvatten, zie: http://en.wikipedia.org/wiki/GNU_toolchain.

De ns-3-simulator maakt gebruik van gcc, GNU binutils en gdb. Tegelijkertijd gebruiken we geen make of autotools uit de GNU-tools voor het bouwen van het project. Voor deze functies gebruiken we Waf.

Op macOS wordt een set van tools genaamd Xcode gebruikt. Gebruikers van ns-3 op Mac worden ten zeerste aangeraden om Xcode en de commandoregelhulpprogrammatuur van de Apple App Store te installeren, en voor meer informatie, bezoek de wiki-installatiepagina van ns-3: (https://www.nsnam.org/wiki/Installation).

Gewoonlijk werkt de auteur van ns-3 in een Linux- of Unix-achtige omgeving. Voor degenen die op Windows werken, zijn er omgevingen die in verschillende mate Linux-omgevingen nabootsen. Voor deze gebruikers werd in het verleden (maar nu niet meer) de ontwikkeling van ns-3 ondersteund in de Cygwin-omgeving. Voor meer details over het downloaden en aanvullende informatie over Cygwin en ns-3, bezoek de wiki-pagina van ns-3:
http://www.cygwin.com/.

MinGW wordt momenteel officieel niet ondersteund. Een andere alternatieve oplossing voor Cygwin is het installeren van een virtuele omgeving, zoals VMware-server, waar Linux kan worden geïnstalleerd.

2.5 Socketprogrammering

In de voorbeelden die in deze handleiding worden gebruikt, zullen we de basisfunctionaliteiten van de Berkeley Socket API gebruiken. Als je nieuw bent met sockets, raden we aan om de API en enkele veelvoorkomende gebruiksgevallen te bekijken. Voor een goed overzicht van TCP/IP socketprogrammering raden we aan: "TCP/IP Sockets in C", Donahoo en Calvert.

Er is een bijbehorende website die de bron van de voorbeelden in het boek bevat, die je kunt vinden op:
http://cs.baylor.edu/~donahoo/practical/CSockets/.

Als je de eerste vier hoofdstukken van het boek begrijpt (of voor degenen die geen toegang hebben tot een exemplaar van het boek, de echo-klanten en servers die op de website bij de bovenstaande link worden getoond), is dat voldoende om de tutorial te begrijpen. Er is een vergelijkbaar boek
"Multicast Sockets, Multicast Sockets", Makofske en Almeroth.

Het behandelt het materiaal dat je nodig kunt hebben als je de voorbeelden van multicast-distributie in de distributie bestudeert.

Voortzetting: hoofdstuk 3

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster