Tento článok otvára sériu publikácií s prekladom učebnice "" o simulátore sietí ns-3.

Tento dokument je prekladom pôvodného dokumentu v angličtine, ktorý bol napísaný v pre a nachádza sa v adresári doc/tutorial zdrojového kódu ns-3.
1 Predslov
1.1 O ns-3
1.2 Pre používateľov ns-2
1.3 Účasť v projekte
1.4 Organizácia príručky
2 Zdroje informácií
2.1 Sieť
2.2 Git
2.3 WAF
2.4 Vývojové prostredie
2.5 Programovanie soketov
Hlavná dokumentácia projektu ns-3 je dostupná v piatich formách:
- Dokumentácia k API simulátora: ns-3 .
- Učebnica, príručka a knižnica modelov pre a .
- ns-3.
Kapitola 1
Úvod
Simulátor ns-3 je simulátor siete s diskrétnymi udalosťami, určený predovšetkým na výskum a vzdelávacie účely. Projekt vyvíjajúci ns-3 bol zahájený v roku 2006 a je to projekt s otvoreným zdrojovým kódom.
Cieľom tejto príručky je predstaviť ns-3 novým používateľom systematickým a štruktúrovaným spôsobom. Niekedy je pre nováčika zložité získať potrebné informácie a premeniť ich na funkčné modelovanie. V tejto príručke realizujeme niekoľko modelovacích príkladov a zároveň ukazujeme a vysvetľujeme kľúčové pojmy a vlastnosti.
Počas výkladu predstavíme úplnú dokumentáciu k ns-3 a poskytneme odkazy na zdrojový kód pre tých, ktorí majú záujem o hlbšie porozumenie fungovania systému.
Na začiatku stojí za to zdôrazniť niekoľko kľúčových bodov:
- ns-3 má otvorený zdrojový kód, projekt sa usiluje udržiavať otvorené prostredie, v ktorom môžu výskumníci prispieť a zdieľať svoje softvérové výstupy.
- ns-3 nie je späť kompatibilné rozšírenie ns-2, je to nový simulátor. Oba simulátory sú napísané v C++, ale ns-3 je nový simulátor, ktorý nepodporuje API rozhrania ns-2.
1.1 O ns-3
Simulátor ns-3 bol vyvinutý na to, aby poskytoval otvorenú prispôsobiteľnú platformu na modelovanie sietí, šetrenie a vzdelávanie v oblasti sietí. V skratke, ns-3 poskytuje modely toho, ako sú navrhnuté a fungujú siete prenosu dát a ponúka používateľovi simulačný engine na vykonávanie simulačných experimentov. Dôvody na použitie ns-3 môžu zahŕňať situácie, keď je potrebné vykonať výskum, ktorý je zložitý alebo nemožný na skutočnom systéme, možnosť skúmať správanie systému v prísne kontrolovanom prostredí, reprodukovateľnom prostredí, ako aj naučiť sa, ako fungujú siete.
Používatelia si všimnú, že súbor modelov dodávaný v ns-3 je zameraný na modelovanie činnosti internetových protokolov a sietí, ale ns-3 nie je obmedzený len na internetové systémy. Niektorí používatelia používajú ns-3 na modelovanie systémov, ktoré nie sú založené na internetových technológiách.
Existuje množstvo nástrojov na modelovanie sietí. Nižšie sú uvedené niektoré vyznačujúce sa rysy ns-3 v porovnaní s inými nástrojmi.
- ns-3 bol navrhnutý ako súbor knižníc, ktoré je možné kombinovať navzájom, ako aj s inými externými knižnicami softvéru. Zatiaľ čo niektoré platformy modelovania poskytujú používateľom jedinečné integrované prostredie s grafickým používateľským rozhraním, ktoré riadi všetku činnosť, ns-3 je v tomto ohľade modulárnejší. S ns-3 môžu byť použité viaceré externé animátory, nástroje na analýzu údajov a vizualizáciu. Napriek tomu sa od používateľov očakáva práca v príkazovom riadku a s nástrojmi na vývoj softvéru C++ a / alebo Python.
- ns-3 sa primárne používa v systémoch Linux alebo macOS, hoci existuje podpora pre systémy BSD, ako aj pre platformy Windows schopné kompilovať kód pre Linux, ako Windows Subsystem pre Linux alebo Cygwin. Nativne pre Windows Visual Studio v súčasnosti nie je podporované, hoci vývojár pracuje na realizácii tejto možnosti. Používatelia Windows môžu tiež používať virtuálny stroj s Linuxom.
- ns-3 nie je oficiálne podporovaný produkt žiadnej spoločnosti. Podpora ns-3 je poskytovaná s maximálnou starostlivosťou na fóre používateľov ns-3 (ns-3-users@googlegroups.com).
1.2 Pre používateľov ns-2
Pre tých, ktorí poznajú ns-2 (populárny nástroj, ktorý predcházel ns-3), je pri prechode na ns-3 najvýraznejšou zmenou jazyk skriptov. Programy v ns-2 sú napísané v OTcl a výsledky simulácie možno vizualizovať pomocou animátora sietí nam. V ns-2 nie je možné spustiť simuláciu výlučne z C++ (to znamená ako program main() bez akéhokoľvek OTcl). Okrem toho sú niektoré komponenty ns-2 napísané v C++, zatiaľ čo iné v OTcl. V ns-3 je simulátor plne napísaný v C++ s voliteľnými viazaniami Pythonu. Preto môžu byť skripty simulácie napísané buď v C++, alebo v Pythone. Sú k dispozícii nové animátory a vizualizátory, ktoré sa naďalej vyvíjajú. Keďže ns-3 generuje súbory sledovania paketov pcap, môžu sa použiť aj iné nástroje na analýzu stôp. V tejto príručke sa najskôr zameriame na skripty implementované v C++ a interpretáciu výsledkov prostredníctvom analýzy súborov sledovania.
Existujú však aj podobnosti (napríklad oba nástroje sú založené na objektoch C++, časť kódu ns-2 bola prenesená do ns-3). Pri podávaní sa snažíme ukázať rozdiely medzi ns-2 a ns-3.
Otázka, ktorú často počujeme: "Mám naďalej používať ns-2, alebo prejsť na ns-3?" Podľa autora, ak používateľ nie je nejako viazaný na ns-2 (na základe existujúceho osobného pohodlia a znalosti ns-2, alebo na základe konkrétneho simulačného modelu, ktorý je k dispozícii iba v ns-2), bude s ns-3 produktívnejší z nasledujúcich dôvodov:
- ns-3 je aktívne podporovaný s aktívnym, reagujúcim zoznamom diskusie používateľov, zatiaľ čo ns-2 je podporovaný iba mierne a viac ako desať rokov nevidel významné zmeny vo svojom základnom zdrojovom kóde.
- ns-3 poskytuje funkcie, ktoré nie sú k dispozícii v ns-2, ako je prostredie na beh implementačného kódu (umožňujúce používateľom spustiť v simulátore skutočný implementačný kód).
- ns-3 poskytuje nižšiu základnú úroveň abstrakcie v porovnaní s ns-2, čo mu umožňuje lepšie zodpovedať tomu, ako interagujú skutočné systémy. Niektoré obmedzenia zistené v ns-2 (napríklad správna podpora viacerých typov rozhraní na uzle) boli opravené v ns-3.
Vďaka svojej dlhoročnej histórii má ns-2 podstatne rozmanitejší súbor podporovaných modulov ako ns-3. Napriek tomu ns-3 disponuje podrobnejšími modelmi v niekoľkých populárnych oblastiach výskumu (vrátane zložitých modelov LTE a WiFi) a jeho podpora pre kódové implementácie umožňuje veľmi širokú škálu modelov s vysokou presnosťou. Používatelia môžu byť prekvapení, keď zistia, že celý sieťový zásobník Linux môže byť enkapsulovaný do uzla ns-3 pomocou rámca priameho vykonávania kódu (DCE). Modely z ns-2 je možné niekedy portovať do ns-3, najmä ak boli implementované v C++.
Ak máte pochybnosti, dobrým odporúčaním by bolo pozrieť si oba simulátory (ako aj iné simulátory), konkrétne modely dostupné pre váš výskum, ale majte na pamäti, že vaše výsledky môžu byť lepšie pri použití nástroja, ktorý je v súčasnosti aktívne vyvíjaný a podporovaný (ns-3).
1.3 Účasť v projekte
ns-3 je vedecko-vzdelávací simulátor určený pre výskumnú komunitu. Bude sa zakladať na aktuálnych príspevkoch komunity v oblasti vývoja nových modelov, ladenia alebo podpory existujúcich a zdieľania výsledkov. Existuje určitá politika, ktorá, ako dúfame, podnieti ľudí, aby prispeli k ns-3, tak ako to robili pre ns-2:
- Licencovanie s otvoreným zdrojovým kódom na základe kompatibility s licenciou GNU GPLv2.
- wiki.
- Stránka , podobná populárnej stránke pre ns-2.
- Používanie GitLab.com, vrátane systému sledovania chýb:
Chápeme, že ak aj len čítate tento dokument, možno v tejto fáze nep plánujete prispieť. Ale chceme, aby ste vedeli, že prispievanie je v súlade s duchom projektu a že vaše pripomienky budú pre nás cenné, aj keď ide o vaše počiatočné skúsenosti s ns-3 (napríklad „táto časť príručky nebola jasná ...“), oznámenie o zastaranej dokumentácii alebo komentár v kóde, atď. Preferovaným spôsobom zasielania opráv je buď vytvoriť vetvu (fork) so svojimi opravami a založiť požiadavku na zlúčenie, alebo vytvoriť požiadavku na našom sledovači a pridať patch. Tento sprievodca predpokladá, že noví používatelia môžu spočiatku postupovať napríklad podľa takejto cesty:
1.4 Organizácia príručky
Skúsiť stiahnuť a zostaviť kópiu;
- Skúsiť spustiť niekoľko ukážkových programov;
- Попробовать запустить несколько примеров программ;
- Pozrite sa na výsledok simulácie a skúste ho prispôsobiť.
Nakoniec sme sa snažili organizovať prezentáciu podľa týchto krokov.
Kapitola 2
Zdroje informácií
2.1 Sieť
Existuje niekoľko dôležitých zdrojov, o ktorých by mal vedieť každý používateľ ns-3. Hlavná webová stránka sa nachádza na adrese:
a poskytuje prístup k základným informáciám o systéme ns-3. Podrobná dokumentácia je dostupná prostredníctvom hlavnej webovej stránky na adrese: .
Na tejto webovej stránke nájdete aj dokumenty, ktoré sa týkajú architektúry systému.
Existuje wiki-stránka, ktorá dopĺňa hlavnú webovú stránku ns-3, nájdete ju na adrese: .
Tam sú odpovede na často kladené otázky pre používateľov a vývojárov, ako aj návody na riešenie problémov, cudzí kód, dokumenty atď.
Zdrojový kód je možné nájsť a prezerať na GitLab.com:
.
Tam je tiež v repozitári s názvom ns-3-dev nachádza aktuálne vývojové strom. Minulé vydania a experimentálne repozitáre vývojárov jadra sú tiež dostupné pod Mercurial na starej stránke projektu na adrese:
.
2.2 Git
Zložitým programovým systémom je potrebný spôsob, ako spravovať organizáciu a zmenu základného kódu a dokumentácie. Existuje mnoho spôsobov, ako to dosiahnuť, a možno ste počuli o niektorých systémoch, ktoré sa bežne používajú na tento účel. Až donedávna projekt ns-3 používal Mercurial ako systém správy zdrojového kódu, ale v decembri 2018 sme prešli na používanie Gitu. Hoci na čítanie tejto príručky nemusíte veľa vedieť o Gite, odporúčame sa s ním oboznámiť a používať ho na prístup k zdrojovému kódu. GitLab.com poskytuje zdroje na zvládnutie základných zručností na adrese: .
2.3 WAF
Po stiahnutí zdrojového kódu na váš počítač, aby ste získali funkčný program, je potrebné ho skompilovať. Rovnako ako pri správe zdrojového kódu, existuje množstvo nástrojov, ktoré túto funkciu umožňujú. Pravdepodobne najznámejším z týchto nástrojov je make. Aj keď je tento nástroj najznámejší, je potrebné poznamenať, že používanie v rozsiahlej a flexibilne konfigurovateľnej sústave je najzložitejšie. To viedlo k vývoju mnohých alternatív. Nedávno boli vyvinuté takéto systémy pomocou jazyka Python.
V projekte ns-3 sa používa systém zostavovania Waf. Je to systém novej generácie na báze Pythonu. Na zostavenie existujúceho systému ns-3 nie je potrebné poznať Python.
Pre tých, ktorí majú záujem o podrobnosti použitia Waf, je k dispozícii kniha na adrese:
a aktuálny kód:
.
2.4 Vývojové prostredie
Ako už bolo spomenuté vyššie, skripty v ns-3 sú písané v C++ alebo Pythone. Väčšina API ns-3 je dostupná v Pythone, ale modely sú prakticky napísané v C++. Tento sprievodca predpokladá, že máte skúsenosti s objektovo orientovaným programovaním v C++. Počas textu sa budeme venovať niektorým pokročilým konceptom a možno aj neznámym aspektom jazyka ako sú idiomy a dizajnové vzory. Neprajeme si, aby sa tento sprievodca stal učebnicou o C++, preto očakávame základné osvojenie jazyka. Na internete alebo v tlači existuje množstvo zdrojov informácií o C++.
Ak ste začiatočník v C++, predtým ako budete pokračovať, osvojte si základy jazyka pomocou učebnice alebo webovej stránky venovanej vzdelávaniu alebo hotovým receptom. Napríklad: .
Pod Linuxom systém ns-3 používa niekoľko komponentov z nástrojov projektu GNU. Nástroje sú súborom programovacích nástrojov dostupných v danej softvérovej platforme. Pre rýchly prehľad toho, čo patrí medzi nástroje GNU, pozrite sa na: .
Simulátor ns-3 používa gcc, GNU binutils a gdb. Zároveň na zostavovanie projektu nepoužívame ani make, ani autotools z nástrojov GNU. Na tieto funkcie používame Waf.
Na macOS sa používa súbor nástrojov Xcode. Používateľom ns-3 na Mac je dôrazne odporúčané nainštalovať Xcode a balíky nástrojov príkazového riadku z Apple App Store. Pre ďalšie informácie navštívte wiki stránku inštalácie ns-3: ().
Autor ns-3 zvyčajne pracuje v prostredí Linux alebo Unix-podobnom prostredí. Pre tých, ktorí pracujú na Windows, existujú prostredia, ktoré rôzne mierne imituje Linuxové prostredie. Pre týchto používateľov projekt ns-3 v minulosti (ale nie v súčasnosti) podporoval vývoj v prostredí Cygwin. Pre podrobnosti o sťahovaní a ďalšie informácie o Cygwin a ns-3 navštívte wiki stránku ns-3:
.
MinGW momentálne nie je oficiálne podporované. Alternatívou k Cygwin je inštalácia virtuálneho prostredia, ako je VMware server, kde nainštalovať Linux.
2.5 Programovanie soketov
V príkladoch použitých v tejto príručke budeme používať základné funkcie API rozhrania Berkeley Sockets. Ak ste začiatočník v oblasti socketov, odporúčame vám preskúmať API a niektoré bežné prípady použitia. Ako dobrý prehľad programovania socketov TCP/IP odporúčame použiť: "TCP/IP Sockets in C", Donahoo a Calvert.
Existuje súvisiaca webová stránka, ktorá obsahuje zdrojové príklady z knihy, ktorú nájdete na adrese:
.
Ak chápete prvé štyri kapitoly knihy (alebo pre tých, ktorí nemajú prístup k kópii knihy, echo klienti a servery zobrazené na webovej stránke uvedenej vyššie), to bude stačiť na pochopenie tutoriálu. Existuje podobná kniha
"Multicast Sockets, Multicast Sockets", Makofske a Almeroth.
Pokryje materiál, ktorý budete potrebovať, ak sa chystáte študovať v distribúcii príklady multicastu.
Pokračovanie:
Zdroj: habr.com
