Ez a cikk egy sorozatot nyit meg az "ns-3 Tutorial Release ns-3.29" tankönyv fordításával kapcsolatban." az ns-3 hálózatszimulátorhoz.

Ez a dokumentum az angol nyelvű eredeti dokumentum fordítása, amely a a m-appartmana a doc/tutorial ns-3 forráskódjának könyvtárában található.
1 Előszó
1.1 Az ns-3-ról
1.2 Az ns-2 felhasználóknak
1.3 Részvétel a projektben
1.4 A kézikönyv szervezése
2 Információforrások
2.1 Hálózat
2.2 Git
2.3 WAF
2.4 Fejlesztési környezet
2.5 Socket programozás
Az ns-3 projekthez kapcsolódó elsődleges dokumentáció öt formában elérhető:
- A szimulátor API dokumentációja: ns-3 .
- Tanulmányi segédlet, kézikönyv és modellkönyvtár a és .
- ns-3.
1. fejezet
Bevezető
Az ns-3 szimulátor egy diszkrét eseményekkel működő hálózatszimulátor, amelyet főként kutatási és oktatási célokra terveztek. A ns-3 fejlesztési projektszemélyzete 2006-ban indult, és nyílt forráskódú projekt.
Ennek a kézikönyvnek a célja, hogy bemutassa az ns-3-at az új felhasználóknak, rendszerezett formában. Néha nehéz lehet az új felhasználók számára szükséges információt megszerezni és azt működő modellé alakítani. Ebben a kézikönyvben számos modellezési példát mutatunk be, miközben bemutatjuk és magyarázzuk a kulcsfontosságú fogalmakat és tulajdonságokat.
A folyamat során bemutatjuk az ns-3 teljes dokumentációját, és hivatkozásokat adunk a forráskódhoz azok számára, akik mélyebb megértést keresnek a rendszer működéséről.
Kezdetben érdemes figyelembe venni néhány kulcsfontosságú szempontot:
- Az ns-3 nyílt forráskódú, a projekt célja egy nyitott környezet fenntartása, ahol a kutatók hozzájárulhatnak és megoszthatják programozási eredményeiket.
- Az ns-3 nem visszafelé kompatibilis kiterjesztése az ns-2-nek, ez egy új szimulátor. Mindkét szimulátor C++ nyelven készült, de az ns-3 egy új szimulátor, amely nem támogatja az ns-2 API interfészeit.
1.1 Az ns-3-ról
Az ns-3 szimulátor célja, hogy nyílt, bővíthető platformot biztosítson hálózati modellezéshez, hálózati kutatásokhoz és oktatáshoz. Röviden, az ns-3 modellezi a csomagkapcsolt hálózatok működését, és lehetővé teszi a felhasználók számára, hogy szimulációs kísérleteket végezzenek. Az ns-3 használatának okai közé tartozik például, hogy olyan kutatásokat végezzenek, amelyeket nehéz vagy lehetetlen megvalósítani egy valós rendszerben, lehetőség nyílik a rendszer viselkedésének tanulmányozására szigorúan ellenőrzött, reprodukálható környezetben, valamint a hálózatok működésének megismerésére.
A felhasználók észre fogják venni, hogy az ns-3-ban elérhető modellek a Internet protokollok és hálózatok modellezésére összpontosítanak, de az ns-3 nem korlátozódik csupán az internetes rendszerekre; egyes felhasználók az ns-3-at internet-technológián kívüli rendszerek modellezésére is használják.
Számos hálózati modellező eszköz létezik. Az alábbiakban néhány megkülönböztető jellemzőt mutatunk be az ns-3-ról más eszközökhöz képest.
- Az ns-3 könyvtárak gyűjteményeként lett kifejlesztve, amelyeket össze lehet kombinálni egymással, valamint más külső szoftver könyvtárakkal. Míg egyes modellező platformok egységes, integrált környezetet kínálnak, amely egy grafikus felhasználói felületet használ, amely irányítja a munkát, az ns-3 modulárisabb ebben a tekintetben. Az ns-3-hoz több külső animátor, adat- és vizualizációs elemző eszköz is használható. Mindazonáltal, a felhasználóknak parancssori munkára és C++ és/vagy Python fejlesztői eszközökkel való munkára kell számítaniuk.
- Az ns-3-t elsősorban Linux vagy macOS rendszereken használják, bár támogatást nyújtanak BSD rendszerekhez is, valamint olyan Windows platformokhoz, amelyek képesek Linux kódot fordítani, mint például a Windows Subsystem for Linux vagy a Cygwin. A Windows-ra készített Visual Studio jelenleg nem támogatott, de a fejlesztők dolgoznak ezen lehetőség megvalósításán. A Windows felhasználók virtuális Linux gépet is használhatnak.
- Az ns-3 nem egy hivatalosan támogatott termék bármely vállalat által. Az ns-3 támogatása a lehető legnagyobb mértékben a ns-3 felhasználói fórumon valósul meg (ns-3-users@googlegroups.com).
1.2 Az ns-2 felhasználóknak
A ns-2-vel (a népszerű eszközzel, amely megelőzte az ns-3-at) ismerősök számára a ns-3-ra való átállás során a legszembetűnőbb külső változás a szkriptnyelv megváltozása. Az ns-2-ben a programok OTcl nyelven íródtak, és a szimulációs eredményeket a nam hálózati animátor segítségével lehet vizualizálni. Az ns-2-ben lehetetlen kizárólag C++-ból indítani a szimulációt (azaz mint main() program, bármilyen OTcl nélkül). Továbbá, az ns-2 egyes komponensei C++-ban, míg mások OTcl-n íródtak. Az ns-3 esetében a szimulátor teljes mértékben C++-ban van írva, opcionális Python kötődésekkel. Ezért a szimulációs szkriptek írhatók C++-ban és Pythonban is. Új animátorok és vizualizáló eszközök állnak rendelkezésre, és ezek továbbra is fejlődnek. Mivel az ns-3 pcap csomagtrace fájlokat generál, más eszközök is felhasználhatók a trace-ek elemzésére. Ebben a kézikönyvben először a C++-ban megvalósított szkriptekre és az eredmények értelmezésére koncentrálunk a trace fájlok elemzésén keresztül.
De vannak hasonlóságok is (például mindkét eszköz C++-on alapul, az ns-2 néhány kódja át lett portálva az ns-3-ba). A vázlat során megpróbáljuk bemutatni az ns-2 és ns-3 közötti különbségeket.
Azt a kérdést, amelyet gyakran hallunk: "Továbbra is használjam az ns-2-t, vagy áttérjek az ns-3-ra?" A szerző véleménye szerint, ha a felhasználó valamilyen módon nincs rákényszerítve az ns-2-re (a meglévő személyes kényelem és az ns-2 ismeretek alapján, vagy egy olyan konkrét szimulációs modell alapján, amely csak az ns-2-ben érhető el), az ns-3-mal produktívabbá válik a következő okok miatt:
- Az ns-3 aktívan támogatott, aktív és reagáló felhasználói levelezőlistával, míg az ns-2-t csak enyhén támogatják, és több mint tíz éve nem tapasztalt jelentős változást az alap kód fájljában.
- Az ns-3 olyan funkciókat kínál, amelyek az ns-2-ben nem elérhetők, például a kód végrehajtási környezetet (ami lehetővé teszi a felhasználók számára, hogy valós végrehajtási kódot futtassanak a szimulátorban).
- Az ns-3 alacsonyabb alap absztrahálási szintet biztosít az ns-2-höz képest, lehetővé téve számára, hogy jobban megfeleljen annak, ahogyan a valós rendszerek kölcsönhatásba lépnek. Az ns-2-ben felfedezett néhány korlátozást (például a többféle interfész helyes támogatása egy csomóponton) javították az ns-3-ban.
Hosszú történetének köszönhetően az ns-2 sokkal változatosabb támogatott modulokkal rendelkezik, mint az ns-3. Ennek ellenére az ns-3 részletesebb modellekkel bír számos népszerű kutatási területen (beleértve a bonyolult LTE és WiFi modelleket is), és a megvalósítási kód támogatása széleskörű, nagy pontosságú modellekre terjed ki. A felhasználók meglepődhetnek, amikor megtudják, hogy a Linux teljes hálózati veremét be lehet burkolni egy ns-3 csomópontba a közvetlen kódvégrehajtási keretrendszer (DCE) használatával. Az ns-2-ből származó modellek néha átportolhatók az ns-3-ra, különösen, ha C++-ban valósították meg őket.
Ha kétségeid vannak, érdemes megnézned mindkét szimulátort (és más szimulátorokat is), különösen a kutatásodhoz elérhető modelleket, de tartsd szem előtt, hogy az eredményed jobb lehet olyan eszköz használatával, amely jelenleg aktívan fejlődik és támogatott (ns-3).
1.3 Részvétel a projektben
Az ns-3 egy tudományos és oktatási szimulátor a kutatói közösség számára. Támogatni fogja a közösség aktuális hozzájárulásait új modellek fejlesztésében, a meglévők hibakeresésében vagy támogatásában és az eredmények megosztásában. Van némi politika, amely reményeink szerint ösztönözni fogja az embereket, hogy hozzájáruljanak az ns-3-hoz, ahogyan azt az ns-2 esetében tették.
- Elérhető nyílt forráskód licenc a GNU GPLv2 licenc kompatibilitása alapján.
- wiki.
- Oldal , hasonlóan a népszerű ns-2 oldalhoz.
- A GitLab.com használata, beleértve a hibák nyomkövető rendszerét:
Megértjük, hogy ha ezt a dokumentumot olvasod, lehet, hogy ezen a ponton nem tervezed, hogy hozzájárulsz hozzá. De szeretnénk, ha tudnád, hogy a hozzájárulás a projekt szellemében történik, és értékeljük a véleményedet akár az ns-3-mal kapcsolatos korai tapasztalataidról (például: "ez a szakasz a kézikönyvben nem volt érthető ..."), az elavult dokumentációról vagy a kód kommentálásáról, stb. Az előnyös módja a javítások beküldésének, hogy készíts egy ágat (fork) az javításaiddal és hozz létre egy ötvözési kérést, vagy hozz létre egy bejegyzést a nyomkövetőn és add hozzá a javítást.
1.4 A kézikönyv szervezése
Ez a kézikönyv azt feltételezi, hogy az új felhasználók kezdetben például ezen az úton haladhatnak:
- Próbálj meg letölteni és összeállítani egy másolatot;
- Próbálj meg futtatni néhány példaprogramot;
- Nézd meg a szimuláció eredményét, és próbáld meg a saját igényeidhez igazítani.
Végül próbáltuk a megszokott lépéseket követve megszervezni a tartalmat.
2. fejezet
Információforrások
2.1 Hálózat
Több fontos forrás létezik, amelyet minden ns-3 felhasználónak ismernie kell. A fő weboldal a következő címen található:
és hozzáférést biztosít az ns-3 rendszer alapvető információihoz. Részletes dokumentáció elérhető a fő weboldalon a következő címen: .
Ugyanazon az oldalon találhatóak azok a dokumentumok is, amelyek a rendszer architektúrájára vonatkoznak.
Van egy wikioldal is, amely kiegészíti az ns-3 fő weboldalát, és amelyet itt találsz: .
Ott választ találhatsz a gyakran feltett kérdésekre a felhasználók és fejlesztők számára, valamint hibaelhárítási útmutatók, külső kódok, dokumentumok stb.
A forráskód megtalálható és megtekinthető a GitLab.com-on:
.
Ott található a ns-3-dev aktuális fejlesztési fája. A korábbi verziók és a kernelfejlesztők kísérleti repója szintén megtalálható a Mercurialon az előző projektoldalon a következő címen:
.
2.2 Git
A bonyolult szoftverrendszereknek szükségük van valamilyen módra az alapvető kód és dokumentáció szervezésére és módosítására. Sokféleképpen lehet ezt elérni, és talán hallottál néhány, a legalapvetőbb rendszerekről, amelyeket általában használnak erre. Nemrégiben az ns-3 projekt a Mercurialt használta forráskód-kezelő rendszerként, de 2018 decemberében áttértünk a Git használatára. Noha a dokumentum elolvasásához nem szükséges sokat tudnod a Git-ről, javasoljuk, hogy ismerkedj meg vele, és használd az alapvető kód eléréséhez. A GitLab.com forrásokat biztosít az alapvető készségek elsajátításához a következő címen: .
2.3 WAF
Miután letöltötte a forráskódot a számítógépére, a működő program előállításához le kell fordítania azt. A forráskód kezeléséhez hasonlóan számos eszköz áll rendelkezésre ehhez a feladathoz. Valószínűleg a legismertebb ezek közül a make. Bár ez az eszköz a legelterjedtebb, meg kell jegyezni, hogy a legnagyobb, rugalmasan konfigurálható rendszerekben a legnehezebb használni. Ez vezetett számos alternatíva kifejlesztéséhez. Nemrégiben ilyen rendszereket fejlesztettek ki Python nyelv használatával.
Az ns-3 projektben a Waf építési rendszert használják. Ez egy Python alapú, új generációs építési rendszer. Az ns-3 meglévő rendszerének építéséhez nem szükséges ismernie a Pythont.
Azok számára, akik a Waf használatának részletei iránt érdeklődnek, egy könyv érhető el itt:
és a legfrissebb kód:
.
2.4 Fejlesztési környezet
Ahogy már említettük, az ns-3-ban a szkriptek C++ vagy Python nyelven futnak. Az ns-3 API nagy része elérhető Pythonban, de a modellek bármelyik esetben C++ nyelven íródtak. Ez a kézikönyv azt feltételezi, hogy ismeri az objektum-orientált programozást C++ nyelven. A témák bemutatása során időt szentelünk a legfejlettebb fogalmak és esetleg ismeretlen sajátosságok áttekintésére, mint például az idiómák és a tervezési minták. Nem szeretnénk, ha ez a kézikönyv C++ tanulmánytémává válna, ezért alapvető nyelvismeretet várunk el. Számos információforrás elérhető C++-ról az interneten vagy nyomtatott formában.
Ha még új a C++-ban, akkor mielőtt folytatná, ismerkedjen meg a nyelv alapjaival egy kézikönyv vagy oktató weboldal segítségével, amely a tanításra vagy kész receptekre szakosodott. Például az alábbi: .
Linuxon az ns-3 rendszer több elemet használ a GNU projekt eszközkészletéből. Az eszközkészlet egy programozási eszközök halmaza, amely elérhető az adott szoftver környezetben. A GNU eszközök gyors áttekintéséhez lásd: .
Az ns-3 szimulátor gcc-t, GNU binutils-t és gdb-t használ. Ugyanakkor a projekt építéséhez nem használunk sem make, sem autotools eszközöket a GNU-ból. Ezekhez a funkciókhoz Waf-ot használunk.
A macOS-en az Xcode eszközkészlete található. Az ns-3 felhasználóknak Mac rendszeren ajánlott telepíteni az Xcode-ot és az Apple App Store-ból a parancssori eszközök csomagját, valamint a további információkért látogassák meg az ns-3 telepítési wiki oldalát: ().
Általában az ns-3 szerzője Linux vagy Unix-szerű környezetben dolgozik. Azok számára, akik Windows alatt dolgoznak, léteznek olyan környezetek, amelyek különböző mértékben utánozzák a Linux környezetét. Az ilyen felhasználók számára a ns-3 projekt a múltban (de nem a jelenben) támogatta a Cygwin környezetben való fejlesztést. További részletekért a Cygwin és ns-3 letöltéséről látogassák meg az ns-3 wiki oldalát:
.
A MinGW jelenleg hivatalosan nem támogatott. A Cygwin alternatívájaként létezik virtuális környezet telepítése, például a VMware server, ahol Linuxot telepíthet.
2.5 Socket programozás
A jelen útmutatóban használt példákban az alapszintű Berkeley Socket API funkcióit fogjuk használni. Ha kezdő vagy a socketek világában, azt javasoljuk, hogy ismerkedj meg az API-val és néhány gyakori felhasználási esettel. A TCP/IP socketek programozásának jó áttekintéseként ajánljuk: "TCP/IP Sockets in C", Donahoo és Calvert.
Egy kapcsolódó weboldal található, amely a könyv példáinak forrását tartalmazza, amelyet a következő címen találhat:
.
Ha megérted a könyv első négy fejezetét (vagy azok számára, akik nem rendelkeznek a könyv példányával, az echo ügyfelek és szerverek, amelyek a fenti linken található weboldalon láthatók), ez elegendő lesz ahhoz, hogy megértsd az útmutatót. Van egy hasonló könyv
"Multicast Sockets, Multicast Sockets", Makofske és Almeroth.
Ez a könyv anyagot tartalmaz, amelyre szükséged lehet, ha a példák elosztott példáit tanulmányozod.
Folytatás:
Forrás: habr.com
