Artykuł ten otwiera serię publikacji z tłumaczeniem podręcznika "" dotyczącego symulatora sieci ns-3.

Dokument ten jest tłumaczeniem oryginalnego dokumentu w języku angielskim, który napisano w do i znajduje się w katalogu doc/tutorial kodu źródłowego ns-3.
1 Wstęp
1.1 O ns-3
1.2 Dla użytkowników ns-2
1.3 Udział w projekcie
1.4 Organizacja podręcznika
2 Źródła informacji
2.1 Sieć
2.2 Git
2.3 WAF
2.4 Środowisko programistyczne
2.5 Programowanie gniazd
Podstawowa dokumentacja projektu ns-3 jest dostępna w pięciu formatach:
- Dokumentacja API symulatora: ns-3 .
- Podręcznik, przewodnik i biblioteka modeli dla i .
- ns-3.
Rozdział 1
Wstęp
Symulator ns-3 to symulator sieci oparty na zdarzeniach dyskretnych, zaprojektowany głównie do badań i zastosowań edukacyjnych. Projekt rozwijający ns-3 rozpoczął się w 2006 roku i jest projektem typu open source.
Celem tego przewodnika jest wprowadzenie ns-3 nowym użytkownikom w sposób systematyczny i uporządkowany. Czasami nowicjuszowi trudno jest uzyskać potrzebne informacje i przekształcić je w działające modelowanie. W tym przewodniku zrealizujemy kilka przykładów modelowania, jednocześnie przedstawiając i wyjaśniając kluczowe pojęcia i cechy.
W miarę postępu przedstawimy pełną dokumentację ns-3 i udzielimy odnośników do kodu źródłowego dla tych, którzy są zainteresowani głębszym zrozumieniem działania systemu.
Na początku warto zaznaczyć kilka kluczowych punktów:
- ns-3 ma otwarty kod źródłowy, projekt dąży do utrzymania otwartego środowiska, w którym badacze mogą przyczynić się i podzielić swoimi osiągnięciami programistycznymi.
- ns-3 nie jest wstecznie zgodnym rozszerzeniem ns-2, to nowy symulator. Oba symulatory są napisane w C++, ale ns-3 to nowy symulator, który nie obsługuje interfejsów API ns-2.
1.1 O ns-3
Symulator ns-3 został stworzony, aby zapewnić otwartą, rozszerzalną platformę do modelowania sieci, badań sieciowych i edukacji. W skrócie, ns-3 dostarcza modele tego, jak działają sieci pakietowe i daje użytkownikowi silnik symulacyjny do przeprowadzania eksperymentów symulacyjnych. Powody korzystania z ns-3 mogą obejmować sytuacje, w których trzeba przeprowadzić badania, które są trudne lub niemożliwe do wykonania w rzeczywistym systemie, a także możliwość badania zachowania systemu w ściśle kontrolowanym i reprodukowalnym środowisku oraz zrozumienie, jak działają sieci.
Użytkownicy zauważą, że zestaw modeli dostarczany w ns-3 jest skoncentrowany na modelowaniu protokołów internetowych i sieci, ale ns-3 nie ogranicza się tylko do systemów internetowych; niektórzy użytkownicy korzystają z ns-3 do modelowania systemów niezwiązanych z technologiami internetowymi.
Istnieje wiele narzędzi do modelowania sieci. Poniżej przedstawiono kilka charakterystycznych cech ns-3 w porównaniu do innych narzędzi.
- ns-3 został zaprojektowany jako zbiór bibliotek, które można łączyć razem, a także z innymi zewnętrznymi bibliotekami oprogramowania. Podczas gdy niektóre platformy modelujące oferują użytkownikom jednolite zintegrowane środowisko z graficznym interfejsem użytkownika zarządzającym całym przebiegiem pracy, ns-3 jest w tym zakresie bardziej modułowy. Z ns-3 mogą być używane różne zewnętrzne animatory, narzędzia analizy danych i wizualizacji. Niemniej jednak użytkownicy muszą się przygotować na pracę w wierszu poleceń oraz z narzędziami programistycznymi C++ i/lub Python.
- ns-3 jest głównie używany w systemach Linux lub macOS, chociaż istnieje wsparcie dla systemów BSD oraz platform Windows, które mogą kompilować kod dla Linuxa, takich jak Windows Subsystem for Linux lub Cygwin. Wersja natywna dla Windows, Visual Studio, nie jest obecnie wspierana, chociaż programiści pracują nad wdrożeniem tej funkcjonalności. Użytkownicy Windows mogą również korzystać z maszyny wirtualnej z Linuxem.
- ns-3 nie jest oficjalnie wspieranym produktem żadnej firmy. Wsparcie dla ns-3 jest realizowane z maksymalnym zaangażowaniem na forum użytkowników ns-3 (ns-3-users@googlegroups.com).
1.2 Dla użytkowników ns-2
Dla osób, które znają ns-2 (popularne narzędzie, które poprzedzało ns-3), najważniejszą zewnętrzną zmianą przy przejściu na ns-3 jest zmiana języka skryptowego. Programy w ns-2 są napisane w OTcl, a wyniki symulacji można wizualizować za pomocą animatora sieci nam. W ns-2 nie można uruchomić symulacji wyłącznie z C++ (to znaczy jako program main() bez jakiegokolwiek OTcl). Ponadto niektóre komponenty ns-2 są napisane w C++, a inne w OTcl. W ns-3 symulator jest napisany w całości w C++ z opcjonalnymi powiązaniami Python. Dlatego skrypty symulacyjne mogą być pisane zarówno w C++, jak i w Pythonie. Dostępne są nowe animatory i wizualizatory, które są nadal rozwijane. Ponieważ ns-3 generuje pliki śledzenia pakietów pcap, można używać również innych narzędzi do analizy tras. W tym przewodniku najpierw skupimy się na skryptach zaimplementowanych w C++ i interpretacji wyników poprzez analizę plików śledzenia.
Ale istnieją też podobieństwa (na przykład oba narzędzia opierają się na obiektach C++, część kodu ns-2 została przeniesiona do ns-3). W miarę przedstawiania postaramy się pokazać różnice między ns-2 a ns-3.
Pytanie, które często słyszymy: "Czy nadal powinienem używać ns-2, czy przejść na ns-3?" Według autora, jeśli użytkownik w jakiś sposób nie jest przywiązany do ns-2 (na podstawie istniejącego osobistego komfortu i wiedzy o ns-2, lub na podstawie konkretnego modelu symulacyjnego, który jest dostępny tylko w ns-2), to z ns-3 będzie bardziej produktywny z następujących powodów:
- ns-3 jest aktywnie wspierany przez aktywną, responsywną listę dyskusyjną użytkowników, podczas gdy ns-2 jest wspierany jedynie lekko i od ponad dziesięciu lat nie widział znaczących zmian w swoim głównym drzewie kodu.
- ns-3 oferuje funkcje niedostępne w ns-2, takie jak środowisko uruchamiania kodu realizacji (pozwalające użytkownikom uruchamiać w symulatorze rzeczywisty kod realizacji).
- ns-3 zapewnia niższy podstawowy poziom abstrakcji w porównaniu do ns-2, co pozwala mu lepiej odpowiadać na to, jak rzeczywiste systemy wchodzą w interakcje. Niektóre ograniczenia odkryte w ns-2 (na przykład właściwe wsparcie dla wielu typów interfejsów w węźle) zostały naprawione w ns-3.
Dzięki swojej długiej historii, ns-2 ma bardziej zróżnicowany zestaw obsługiwanych modułów niż ns-3. Niemniej jednak, ns-3 ma bardziej szczegółowe modele w kilku popularnych obszarach badań (w tym skomplikowane modele LTE i WiFi), a jego wsparcie dla kodów implementacji umożliwia bardzo szeroki zakres modeli o wysokiej precyzji. Użytkownicy mogą być zaskoczeni, dowiadując się, że cały stos sieciowy Linux może być zainkapułowany w węzeł ns-3 przy użyciu frameworka przejrzystego wykonania kodu (DCE). Modele z ns-2 czasami można przenieść do ns-3, szczególnie jeśli zostały zaimplementowane w C++.
Jeśli masz wątpliwości, dobrą rekomendacją byłoby zapoznanie się z oboma symulatorami (a także innymi symulatorami), szczególnie z modelami dostępnymi dla twoich badań, ale pamiętaj, że twój wynik może być lepszy przy użyciu narzędzia, które obecnie jest aktywnie rozwijane i wspierane (ns-3).
1.3 Udział w projekcie
ns-3 to naukowo-edukacyjny symulator dla społeczności badawczej. Będzie opierał się na bieżących wkładach społeczności w rozwój nowych modeli, debugowanie lub wsparcie istniejących oraz wymianę wyników. Istnieją pewne zasady, które mamy nadzieję zachęcą ludzi do wniesienia wkładu w ns-3, jak to robią dla ns-2:
- Licencja z otwartym kodem źródłowym, zgodna z licencją GNU GPLv2.
- wiki.
- Strona , podobna do popularnej strony dla ns-2.
- Wykorzystanie GitLab.com, w tym systemu śledzenia błędów:
Rozumiemy, że jeśli nawet czytasz ten dokument, być może na tym etapie nie planujesz wnieść w niego swojego wkładu. Ale chcemy, abyś wiedział, że wniesienie wkładu jest zgodne z duchem projektu, a twoje opinie, nawet o twoich wczesnych doświadczeniach z ns-3 (na przykład "ta część podręcznika była niejasna..."), zgłoszenie przestarzałej dokumentacji lub komentarza w kodzie itp. będą dla nas cenne. Preferowany sposób przesyłania poprawek to zrobienie fork'a na ze swoimi poprawkami i utworzenie żądania łączenia, lub utworzenie zgłoszenia w naszym trackerze i dodanie łaty.
1.4 Organizacja podręcznika
To podręcznik zakłada, że nowi użytkownicy mogą na początku iść, na przykład, taką ścieżką:
- Spróbować pobrać i skompilować kopię;
- Spróbować uruchomić kilka przykładów programów;
- Zobacz wynik symulacji i spróbuj dostosować go.
Ostatecznie staraliśmy się zorganizować prezentację w zgodzie z tymi krokami.
Rozdział 2
Źródła informacji
2.1 Sieć
Istnieje kilka ważnych zasobów, o których każdy użytkownik ns-3 powinien wiedzieć. Główna strona internetowa znajduje się pod adresem:
i zapewnia dostęp do podstawowych informacji o systemie ns-3. Szczegółowa dokumentacja jest dostępna poprzez główną stronę internetową pod adresem: .
Na tej samej stronie internetowej można również znaleźć dokumenty dotyczące architektury systemu.
Istnieje strona wiki, która uzupełnia główną stronę internetową ns-3, którą znajdziesz pod adresem: .
Znajdziesz tam odpowiedzi na często zadawane pytania dla użytkowników i programistów, a także poradniki dotyczące rozwiązywania problemów, kod zewnętrzny, dokumenty itd.
Kod źródłowy można znaleźć i przeglądać na GitLab.com:
.
Tam również w repozytorium o nazwie ns-3-dev znajduje się aktualne drzewo rozwoju. Poprzednie wersje oraz eksperymentalne repozytoria deweloperów jądra również są dostępne pod Mercurial na starej stronie projektu pod adresem:
.
2.2 Git
Złożonym systemom programowym potrzebny jest jakiś sposób zarządzania organizacją i zmianą podstawowego kodu oraz dokumentacji. Istnieje wiele sposobów, aby to osiągnąć, a być może słyszałeś o niektórych z systemów, które zwykle się do tego stosuje. Do niedawna projekt ns-3 używał Mercurial jako systemu kontroli wersji, ale w grudniu 2018 roku przeszliśmy na korzystanie z Gita. Mimo że do przeczytania tego przewodnika nie musisz znać wielu rzeczy na temat Gita, zalecamy zapoznanie się z nim i używanie go do uzyskania dostępu do kodu źródłowego. GitLab.com oferuje zasoby do opanowania podstawowych umiejętności pod adresem: .
2.3 WAF
Po pobraniu kodu źródłowego na Twój komputer, aby uzyskać gotowy do pracy program, będziesz musiał go skompilować. Podobnie jak w przypadku zarządzania kodem źródłowym, dostępnych jest wiele narzędzi do wykonania tej funkcji. Prawdopodobnie najbardziej znanym z tych narzędzi jest make. Choć jest to najbardziej znane narzędzie, warto zauważyć, że okazuje się ono najtrudniejsze w użyciu w bardzo dużych i elastycznie konfigurowalnych systemach. To stało się przyczyną opracowania wielu alternatyw. Ostatnio zaprojektowano takie systemy z użyciem języka Python.
W projekcie ns-3 używany jest system budowania Waf. Jest to nowej generacji system budowania oparty na Pythonie. Aby zbudować istniejący system ns-3, nie musisz znać Pythona.
Dla tych, którzy są zainteresowani szczegółami użycia Waf, dostępna jest książka pod adresem:
i bieżący kod:
.
2.4 Środowisko programistyczne
Jak już wspomniano, skrypty w ns-3 są wykonywane w C++ lub Pythonie. Większość API ns-3 jest dostępna w Pythonie, ale modele są w każdym razie napisane w C++. To poradnik zakłada, że znasz programowanie obiektowe w C++. W miarę rozwoju omówimy niektóre z bardziej zaawansowanych koncepcji oraz być może nieznanych funkcji języka, takich jak idiomy i wzorce projektowe. Nie chcemy, aby ten przewodnik stał się podręcznikiem do C++, dlatego oczekujemy podstawowej znajomości języka. Istnieje wiele źródeł informacji o C++ dostępnych w Internecie lub w druku.
Jeśli jesteś nowicjuszem w C++, zanim przejdziesz dalej, opanuj podstawy języka, korzystając z podręcznika lub strony internetowej poświęconej nauce lub gotowym przepisom. Na przykład, takimi jak: .
Na Linuksie system ns-3 korzysta z kilku komponentów z narzędzi projektu GNU. Narzędzia to zestaw narzędzi programistycznych dostępnych w tym środowisku programistycznym. Aby szybko zapoznać się z tym, co wchodzi w skład narzędzi GNU, zobacz. .
Symulator ns-3 używa gcc, GNU binutils i gdb. Jednocześnie nie używamy do budowy projektu ani make, ani autotools z narzędzi GNU. Do tych funkcji używamy Waf.
W macOS używany jest zestaw narzędzi Xcode. Użytkownikom ns-3 na Macu zaleca się zainstalowanie Xcode oraz pakietów narzędzi wiersza poleceń z Apple App Store, a także, w celu uzyskania dodatkowych informacji, odwiedzenie strony wiki dotyczącej instalacji ns-3: ().
Zazwyczaj autor ns-3 pracuje w systemie Linux lub podobnym do Uniksa. Dla tych, którzy pracują w systemie Windows, istnieją środowiska, które w różnym stopniu emulują środowisko Linux. W przeszłości (ale nie obecnie) projekt ns-3 wspierał rozwój w środowisku Cygwin dla takich użytkowników. Szczegóły dotyczące pobierania i dodatkowe informacje o Cygwin i ns-3 można znaleźć na stronie wiki ns-3:
.
MinGW obecnie nie jest oficjalnie wspierane. Inną alternatywą dla Cygwin jest zainstalowanie wirtualnego środowiska, takiego jak VMware server, w którym można zainstalować Linux.
2.5 Programowanie gniazd
W przykładach użytych w tym przewodniku będziemy korzystać z podstawowych możliwości API interfejsu gniazd Berkeley (Berkeley Sockets). Jeśli jesteś nowy w gniazdach, zalecamy zapoznanie się z API oraz niektórymi typowymi przypadkami ich użycia. Jako dobry przegląd programowania gniazd TCP/IP rekomendujemy: "TCP/IP Sockets in C", Donahoo i Calvert.
Istnieje powiązana strona internetowa, która zawiera źródło przykładów z książki, które można znaleźć pod adresem:
.
Jeśli rozumiesz pierwsze cztery rozdziały książki (lub dla tych, którzy nie mają dostępu do kopii książki, klientów i serwerów echa pokazanych na stronie internetowej pod linkiem powyżej), to wystarczy, aby zrozumieć podręcznik. Istnieje podobna książka
"Multicast Sockets, Multicast Sockets", Makofske i Almeroth.
Ona obejmuje materiał, który możesz potrzebować, jeśli będziesz studiować w dystrybucji przykłady multicastowe.
Ciąg dalszy:
Źródło: habr.com
