Netværkssimulatorhåndbogen ns-3. Kapitler 1, 2

Denne artikel åbner en serie af publikationer med oversættelsen af lærebogen "ns-3 Tutorial Release ns-3.29" om simulatoren ns-3.

Netværkssimulatorhåndbogen ns-3. Kapitler 1, 2

Dette dokument er en oversættelse af det originale engelsk dokument, som er skrevet i reStructuredText for Sphinx og opbevares i mappen doc/tutorial i koden til ns-3.

1 Forord
1.1 Om ns-3
1.2 For brugere af ns-2
1.3 Deltagelse i projektet
1.4 Organisation af vejledningen
2 Informationskilder
2.1 Netværk
2.2 Git
2.3 WAF
2.4 Udviklingsmiljø
2.5 Programmering af sockets
kapitel 3
kapitel 4
kapitel 5
kapitel 6
kapitel 7
kapitlerne 8, 9

Download oversættelsen som én pdf-fil

Den primære dokumentation for ns-3 projektet er tilgængelig i fem former:

Forord

Simulatoren ns-3 er en diskret hændelsessimulator designet hovedsageligt til forskning og brug i uddannelsesmæssige formål. Projektet, der udvikler ns-3, startede i 2006 og er et open source projekt.

Målet med denne vejledning er at introducere ns-3 til nye brugere på en systematisk og struktureret måde. Nogle gange kan det være svært for nybegyndere at få den nødvendige information og omdanne den til arbejdsmæssig modellering. I denne vejledning vil vi gennemgå flere modelerings eksempler, mens vi forklarer nøglebegreber og funktioner.

Undervejs præsenterer vi den komplette dokumentation for ns-3 og giver links til kildekoden for dem, der er interesserede i en dybere forståelse af systemets funktion.

I begyndelsen er der nogle vigtige punkter at bemærke:

  • ns-3 har åbent kildesystem, projektet stræber efter at støtte en åben platform, hvor forskere kan bidrage og dele deres programmeringsarbejder.
  • ns-3 er ikke en bagudkompatibel udvidelse af ns-2; det er en ny simulator. Begge simulatorer er skrevet i C++, men ns-3 er en ny simulator, der ikke understøtter API-grænsefladerne fra ns-2.

1.1 Om ns-3

ns-3-simulatoren er udviklet for at levere en åben, udvidelig platform til netværksmodellering, netværksforskning og uddannelse. Kort sagt tilbyder ns-3 modeller af, hvordan pakkeoverførselsnetværk er implementeret og fungerer, og giver brugeren en simuleringsmotor til at udføre simuleringsforsøg. Årsagerne til at bruge ns-3 kan være situationer, hvor det er nødvendigt at udføre en undersøgelse, der er svær eller umulig at udføre på et reelt system, muligheden for at studere systemadfærd i et strengt kontrolleret, reproducerbart miljø samt at lære, hvordan netværk fungerer.

Brugere vil bemærke, at det sæt modeller, der leveres i ns-3, er fokuseret på modellering af internettet protokoller og netværk, men ns-3 er ikke begrænset til internet-systemer; nogle brugere anvender ns-3 til at modellere systemer, der ikke er baseret på internet-teknologier.

Der er mange værktøjer til netværksmodellering. Nedenfor er nogle af de karakteristiske træk ved ns-3 i forhold til andre værktøjer.

  • ns-3 er designet som et sæt biblioteker, som kan kombineres både indbyrdes og med andre eksterne softwarebiblioteker. Mens nogle modelleringsplatforme tilbyder brugerne et samlet integreret miljø med en grafisk brugerflade, der styrer alt arbejde, er ns-3 mere modulær i denne henseende. Med ns-3 kan flere eksterne animatorer, dataanalyse- og visualiseringsværktøjer anvendes. Brugerne skal dog forvente at arbejde i kommandolinjen og med C++ og/eller Python udviklingsværktøjer.
  • ns-3 bruges hovedsageligt i Linux- eller macOS-systemer, selvom der er support til BSD-systemer samt til Windows-platforme, der kan kompilere kode til Linux, såsom Windows Subsystem til Linux eller Cygwin. Windows Visual Studio understøttes i øjeblikket ikke, selvom udvikleren arbejder på at implementere denne mulighed. Windows-brugere kan også benytte en virtuel Linux-maskine.
  • ns-3 er ikke et officielt understøttet produkt fra nogen firma. Understøttelsen af ns-3 gives maximalt gennem ns-3-brugernes forum (ns-3-users@googlegroups.com).

1.2 For brugere af ns-2

For those familiar with ns-2 (the popular tool that preceded ns-3), the most noticeable external change when transitioning to ns-3 is the change in the scripting language. Programs in ns-2 are written in OTcl, with simulation results visualized using the nam network animator. In ns-2, it is impossible to run a simulation solely from C++ (meaning as a main() program without any OTcl). Moreover, some components of ns-2 are written in C++, while others are in OTcl. In ns-3, the simulator is entirely written in C++ with optional Python bindings. Therefore, simulation scripts can be written in both C++ and Python. New animators and visualizers are available and continue to be developed. Since ns-3 generates packet trace files in pcap format, other utilities can also be used for trace analysis. In this guide, we will first focus on scenarios implemented in C++ and the interpretation of results through the analysis of trace files.

But there are similarities as well (for example, both tools are built on C++ objects, and part of the ns-2 code has been ported to ns-3). In the following, we will attempt to highlight the differences between ns-2 and ns-3.

A common question we often hear is: "Should I still use ns-2 or switch to ns-3?" According to the author, if the user is not somehow tied to ns-2 (whether based on existing personal comfort and knowledge of ns-2, or due to a specific simulation model that is only available in ns-2), then they will be more productive with ns-3 for the following reasons:

  • ns-3 is actively supported with an active, responsive user mailing list, while ns-2 is only lightly supported and has not seen significant changes in its main code tree for over ten years.
  • ns-3 provides features not available in ns-2, such as a runtime environment for implementation code (allowing users to run real implementation code in the simulator).
  • ns-3 offers a lower base level of abstraction compared to ns-2, allowing it to better match how real systems interact. Some limitations found in ns-2 (such as proper support for multiple interface types on a node) have been addressed in ns-3.

På grund af sin lange historie har ns-2 et mere varieret sæt af understøttede moduler end ns-3. Ikke desto mindre har ns-3 mere detaljerede modeller inden for flere populære forskningsområder (herunder komplekse LTE- og WiFi-modeller), og dens kodeimplementeringssupport tillader et meget bredt udvalg af modeller med høj præcision. Brugere kan blive overraskede over at finde ud af, at hele netværksstakken i Linux kan indkapsles i en ns-3-node ved hjælp af rammeværket for direkte kodeudførelse (DCE). Modeller fra ns-2 kan nogle gange porteres til ns-3, især hvis de er blevet implementeret i C++.

Hvis du er i tvivl, ville det være en god anbefaling at se på begge simulatorer (samt andre simulatorer), især på modeller tilgængelige for din forskning, men husk, at dit resultat muligvis vil være bedre ved at bruge et værktøj, der i øjeblikket aktivt udvikles og støttes (ns-3).

1.3 Deltagelse i projektet

ns-3 er en forsknings- og uddannelses-simulator for forskningssamfundet. Den vil bygge videre på de nuværende bidrag fra samfundet til udviklingen af nye modeller, fejlfinding eller support af eksisterende og deling af resultater. Der er en politik, vi håber, vil opfordre folk til at bidrage til ns-3, som de gør for ns-2:

  • Licensiering med åben kildekode baseret på overensstemmelse med GNU GPLv2-licensen.
  • wiki.
  • Side Bidragyders kode, der ligner den populære side for ns-2.
  • Brug af GitLab.com, herunder fejlsporingssystemet:
    https://www.gitlab.com/nsnam

Vi forstår, at hvis du læser dette dokument, så har du måske ikke planer om at bidrage til det på nuværende tidspunkt. Men vi vil gerne have, at du ved, at bidrag er i ånden af projektet, og at din feedback, selv om din tidlige erfaring med ns-3 er værdsat (f.eks. "denne sektion af handboken var ikke klar …"), en rapport om forældet dokumentation eller en kommentar i koden osv. er meget værdifuld for os. Den foretrukne måde at indsende rettelser på er enten at lave en fork med dine rettelser og oprette en pull request, eller at oprette en anmodning i vores tracker og vedhæfte et patch. https://www.gitlab.com/nsnam Denne vejledning forudsætter, at nye brugere oprindeligt kan navigere, for eksempel via følgende vej:

1.4 Organisation af vejledningen

Prøv at downloade og opbygge en kopi;

  • Prøv at køre nogle eksempelprogrammer;
  • Forsøg at køre flere eksempelprogrammer;
  • Se på resultatet af simuleringen og prøv at tilpasse det.
    I sidste ende forsøgte vi at organisere fremlæggelsen i overensstemmelse med disse trin.

Kapitel 2

Kilder til information

2.1 Netværk

Der er flere vigtige ressourcer, som enhver ns-3-bruger skal være opmærksom på. Hovedwebstedet findes på: https://www.nsnam.org
og giver adgang til grundlæggende information om ns-3-systemet. Den detaljerede dokumentation er tilgængelig gennem hovedwebstedet på: https://www.nsnam.org/documentation/.

På denne webside kan du også finde dokumenter vedrørende systemarkitekturen.

Der er en wiki-side, der supplerer hovedwebstedet ns-3, og du vil finde den på: https://www.nsnam.org/wiki/.

Her kan du finde svar på ofte stillede spørgsmål for brugere og udviklere samt fejlfindingsguider, tredjepartskode, dokumenter osv.
Kildekoden kan findes og gennemgås på GitLab.com:
https://gitlab.com/nsnam/.

Der findes også et repository med navnet ns-3-dev som indeholder det nuværende udviklingstræ. Tidligere udgivelser og eksperimentelle udvikler-repositories kan også findes under Mercurial på projektets gamle websted på:
http://code.nsnam.org.

2.2 Git

Komplekse software systemer har brug for en måde at håndtere organiseringen og ændringen af den grundlæggende kode og dokumentation. Der er mange måder at opnå dette, og du har måske hørt om nogle af de systemer, der typisk bruges til dette. Indtil for nylig har ns-3-projektet brugt Mercurial som kildekodehåndteringssystem, men i december 2018 skiftede vi til at bruge Git. Selvom du ikke behøver at vide meget om Git for at læse denne vejledning, anbefaler vi at sætte sig ind i det og bruge det til at få adgang til kildekoden. GitLab.com tilbyder ressourcer til at mestre grundlæggende færdigheder på: https://git-scm.com/book/ru/v2.

2.3 WAF

Når du har downloadet kildekoden til din computer, skal du kompilere den for at få et funktionsdygtigt program. Ligesom med kildekodestyring er der mange værktøjer til rådighed for at udføre denne funktion. Det mest kendte af disse værktøjer er sandsynligvis make. Selvom dette værktøj er det mest velkendte, er det også det mest komplekse at bruge i meget store og fleksibelt konfigurerbare systemer. Dette har ført til udviklingen af mange alternativer. For nylig er sådanne systemer blevet udviklet ved hjælp af Python-sproget.

I ns-3-projektet bruges bygge-systemet Waf. Det er et næste generations byggeredskab baseret på Python. For at bygge det eksisterende ns-3-system behøver du ikke at kende Python.

For dem, der er interesseret i detaljer om brugen af Waf, er der en bog tilgængelig på adressen:
https://waf.io/book/
og den aktuelle kode:
https://gitlab.com/ita1024/waf/.

2.4 Udviklingsmiljø

Som nævnt tidligere køres script i ns-3 på C++ eller Python. De fleste API'er i ns-3 er tilgængelige på Python, men modellerne er uanset skrevet i C++. Denne vejledning forudsætter, at du har kendskab til objektorienteret programmering i C++. I løbet af denne vejledning vil vi tage os tid til at gennemgå de mest avancerede koncepter og måske også ukendte egenskaber ved sproget, såsom idiomer og designmønstre. Vi ønsker ikke, at denne vejledning skal blive en lærebog om C++, så vi forventer, at du har grundlæggende kendskab til sproget. Der er mange informationskilder om C++ tilgængelige online eller i trykt form.

Hvis du er ny inden for C++, så lær grundlæggende færdigheder i språket ved at bruge en lærebog eller en hjemmeside, der er dedikeret til undervisning eller opskrifter. For eksempel: https://github.com/ashtanyuk/CPP-2018.

Under Linux bruger ns-3-systemet flere komponenter fra GNU-projektets værktøjssæt. Værktøjssættet er en samling af programmeringsværktøjer, der er tilgængelige i dette softwaremiljø. For et hurtigt overblik over, hvad der er inkluderet i GNU-værktøjer, se. http://en.wikipedia.org/wiki/GNU_toolchain.

Simulatoren ns-3 bruger gcc, GNU binutils og gdb. Samtidig bruger vi ikke make eller autotools fra GNU-værktøjer til at bygge projektet. Til disse funktioner bruger vi Waf.

I macOS bruger man værktøjet Xcode. Brugere af ns-3 på Mac anbefales kraftigt at installere Xcode og kommandolinjeværktøjerne fra Apple App Store, samt at besøge ns-3 installationswiki-siden for yderligere information: (https://www.nsnam.org/wiki/Installation).

Normalt arbejder forfatteren af ns-3 i en Linux- eller Unix-lignende miljø. For dem, der arbejder i Windows, findes der miljøer, der på forskellige niveauer simulerer Linux-miljøet. For sådanne brugere har ns-3 tidligere (men ikke længere) understøttet udvikling i Cygwin-miljøet. For detaljer om download og yderligere information om Cygwin og ns-3, besøg ns-3 wiki-siden:
http://www.cygwin.com/.

MinGW understøttes i øjeblikket ikke officielt. Et andet alternativ til Cygwin er at installere et virtuelt miljø, såsom VMware-server, hvor man kan installere Linux.

2.5 Programmering af sockets

I de eksempler, der bruges i denne vejledning, vil vi anvende de grundlæggende funktioner i Berkeley Socket API. Hvis du er ny til sockets, anbefaler vi, at du sætter dig ind i API'et og nogle almindelige anvendelsestilfælde. Som en god oversigt over TCP/IP socket-programmering anbefaler vi: "TCP/IP Sockets in C", Donahoo og Calvert.

Der er en tilknyttet hjemmeside, der indeholder kilden til eksemplerne i bogen, som du kan finde på:
http://cs.baylor.edu/~donahoo/practical/CSockets/.

Hvis du forstår de første fire kapitler i bogen (eller for dem, der ikke har adgang til en kopi af bogen, echoservere og -klienter som vist på hjemmesiden via linket ovenfor), vil det være tilstrækkeligt til at forstå vejledningen. Der findes en lignende bog
"Multicast Sockets, Multicast Sockets", Makofske og Almeroth.

Den dækker materialet, som du muligvis får brug for, hvis du skal studere eksemplerne på multicast i distributionen.

Fortsættelse: kapitel 3

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster