Dieser Artikel eröffnet eine Reihe von Publikationen mit der Übersetzung des Lehrbuchs "" zum ns-3 Netzwerk-Simulator.

Dieses Dokument ist eine Übersetzung des ursprünglichen Dokuments in Englisch, das in für verfasst ist und im Verzeichnis doc/tutorial des Quellcodes von ns-3 gespeichert ist.
1 Einleitung
1.1 Über ns-3
1.2 Für ns-2 Nutzer
1.3 Mitwirkung am Projekt
1.4 Organisation des Handbuchs
2 Informationsquellen
2.1 Netzwerk
2.2 Git
2.3 WAF
2.4 Entwicklungsumgebung
2.5 Socket-Programmierung
Die primäre Dokumentation für das ns-3 Projekt ist in fünf Formaten verfügbar:
- API-Dokumentation des Simulators: ns-3 .
- Tutorial, Handbuch und Modellbibliothek für und .
- ns-3.
Kapitel 1
Vorwort
Der ns-3 Simulator ist ein ereignisbasierter Netzwerk-Simulator, der hauptsächlich für Forschungs- und Bildungszwecke gedacht ist. Das Projekt, das ns-3 entwickelt, wurde 2006 gestartet und ist ein Open-Source-Projekt.
Ziel dieses Handbuchs ist es, ns-3 neuen Nutzern auf systematische und strukturierte Weise vorzustellen. Manchmal kann es für Neulinge schwierig sein, die benötigten Informationen zu erhalten und diese in funktionierendes Modellieren umzusetzen. In diesem Handbuch setzen wir mehrere Modellierungsbeispiele um, während wir die Schlüsselbegriffe und Merkmale darstellen und erläutern.
Im Laufe der Darstellung werden wir die vollständige Dokumentation zu ns-3 bereitstellen und Links zum Quellcode für diejenigen geben, die an einem vertieften Verständnis des Systems interessiert sind.
Zu Beginn sollten einige wichtige Punkte erwähnt werden:
- ns-3 hat Open-Source-Code, das Projekt strebt eine offene Umgebung an, in der Forscher ihren Beitrag leisten und ihre Softwareentwicklungen teilen können.
- ns-3 ist kein abwärtskompatibles Erweiterung von ns-2, es ist ein neuer Simulator. Beide Simulatoren sind in C++ geschrieben, aber ns-3 ist ein neuer Simulator, der keine Schnittstellen von ns-2 unterstützt.
1.1 Über ns-3
Der ns-3-Simulator wurde entwickelt, um eine offene, erweiterbare Plattform für die Modellierung von Netzwerken, Netzwerkforschung und Bildung bereitzustellen. Kurz gesagt, ns-3 bietet Modelle dafür, wie Netzwerke für die paketvermittelte Datenübertragung implementiert und betrieben werden, und gibt dem Benutzer einen Simulationsmotor, um Simulationsversuche durchzuführen. Gründe für die Verwendung von ns-3 können Situationen sein, in denen eine Untersuchung erforderlich ist, die schwer oder unmöglich auf einem realen System durchzuführen ist, die Möglichkeit, das Verhalten eines Systems in einer streng kontrollierten, reproduzierbaren Umgebung zu studieren, sowie Informationen darüber zu erhalten, wie Netzwerke funktionieren.
Benutzer werden feststellen, dass der in ns-3 bereitgestellte Modellsatz auf die Modellierung der Funktionsweise von Internetprotokollen und -netzwerken fokussiert ist, aber ns-3 ist nicht nur auf Internetsysteme beschränkt; einige Benutzer verwenden ns-3 zur Modellierung von Systemen, die nicht auf Internettechnologien basieren.
Es gibt viele Netzwerkmodellierungswerkzeuge. Im Folgenden sind einige der herausragenden Merkmale von ns-3 im Vergleich zu anderen Werkzeugen aufgeführt.
- ns-3 wurde als eine Sammlung von Bibliotheken entwickelt, die miteinander sowie mit anderen externen Softwarebibliotheken kombiniert werden können. Während einige Modellierungsplattformen den Benutzern eine integrierte Umgebung mit einer grafischen Benutzeroberfläche bieten, die alle Operationen steuert, ist ns-3 in dieser Hinsicht modularer. Mit ns-3 können mehrere externe Animator, Datenanalysetools und Visualisierungstools verwendet werden. Dennoch erwartet die Benutzer die Arbeit in der Kommandozeile und mit C++- und\/oder Python-Entwicklungstools.
- ns-3 wird hauptsächlich auf Linux- oder macOS-Systemen verwendet, obwohl es Unterstützung für BSD-Systeme sowie für Windows-Plattformen gibt, die in der Lage sind, Code für Linux zu kompilieren, wie z. B. das Windows Subsystem für Linux oder Cygwin. Die native Windows-Version von Visual Studio wird derzeit nicht unterstützt, obwohl der Entwickler an dieser Möglichkeit arbeitet. Windows-Benutzer können auch eine virtuelle Maschine mit Linux verwenden.
- ns-3 ist kein offiziell unterstütztes Produkt eines Unternehmens. Die Unterstützung von ns-3 erfolgt mit maximaler Effizienz im Forum der ns-3-Benutzer (ns-3-users@googlegroups.com).
1.2 Für ns-2 Nutzer
Für diejenigen, die mit ns-2 (einem beliebten Tool, das ns-3 vorangegangen ist) vertraut sind, besteht die auffälligste äußere Änderung beim Umstieg auf ns-3 im Wechsel der Skriptsprache. Programme in ns-2 sind in OTcl geschrieben, und die Simulationsergebnisse können mit dem Netzwerk-Animator nam visualisiert werden. In ns-2 ist es unmöglich, eine Simulation ausschließlich aus C++ (d. h. als main()-Programm ohne OTcl) zu starten. Darüber hinaus sind einige Komponenten von ns-2 in C++ und andere in OTcl geschrieben. In ns-3 ist der Simulator vollständig in C++ geschrieben, mit optionalen Bindungen an Python. Daher können die Simulationsscripte sowohl in C++ als auch in Python verfasst werden. Neue Animator- und Visualisierungstools sind verfügbar und werden weiterentwickelt. Da ns-3 pcap-Paket-Trace-Dateien generiert, können auch andere Tools zur Analyse der Traces verwendet werden. In diesem Handbuch werden wir uns zuerst auf Szenarien konzentrieren, die in C++ realisiert sind, und die Ergebnisse über die Analyse von Trace-Dateien interpretieren.
Es gibt jedoch auch Ähnlichkeiten (zum Beispiel sind beide Tools auf C++-Objekten basiert, ein Teil des Codes von ns-2 wurde nach ns-3 portiert). Im Verlauf des Exposés werden wir versuchen, die Unterschiede zwischen ns-2 und ns-3 aufzuzeigen.
Eine häufig gestellte Frage lautet: "Sollte ich weiterhin ns-2 verwenden oder zu ns-3 wechseln?" Nach Meinung des Verfassers wird der Benutzer, sofern er aus irgendwelchen Gründen nicht an ns-2 gebunden ist (sei es aufgrund des bestehenden persönlichen Komforts und Wissens über ns-2 oder aufgrund eines bestimmten Simulationsmodells, das nur in ns-2 verfügbar ist), mit ns-3 produktiver sein aus folgenden Gründen:
- ns-3 wird aktiv unterstützt, mit einer aktiven und reaktionsschnellen Benutzer-Mailingliste, während ns-2 nur leicht Unterstützung findet und seit über zehn Jahren keine nennenswerten Änderungen an seinem Hauptcodebaum gesehen hat.
- ns-3 bietet Funktionen, die in ns-2 nicht verfügbar sind, wie zum Beispiel die Ausführungsumgebung für Implementierungscode (die es den Benutzern ermöglicht, echten Implementierungscode im Simulator auszuführen).
- ns-3 bietet ein niedrigeres Grundabstraktionsniveau im Vergleich zu ns-2, was es ihm ermöglicht, besser mit der Art und Weise übereinzustimmen, wie reale Systeme interagieren. Einige Einschränkungen, die in ns-2 festgestellt wurden (z. B. die ordnungsgemäße Unterstützung mehrerer Schnittstellentypen auf einem Knoten), wurden in ns-3 behoben.
Dank seiner langen Geschichte verfügt ns-2 über eine vielfältigere Sammlung unterstützter Module als ns-3. Dennoch bietet ns-3 detailliertere Modelle in mehreren beliebten Forschungsbereichen (einschließlich komplexer LTE- und WiFi-Modelle), und seine Unterstützung für die Implementierung von Code ermöglicht eine sehr breite Palette von hochpräzisen Modellen. Benutzer könnten überrascht sein zu erfahren, dass der gesamte Netzwerkstack von Linux in einem ns-3-Knoten mit dem Framework für die direkte Codeausführung (DCE) kapselbar ist. Modelle aus ns-2 können manchmal nach ns-3 portiert werden, insbesondere wenn sie in C++ implementiert wurden.
Wenn Sie unsicher sind, wäre es eine gute Empfehlung, sich beide Simulatoren (sowie andere Simulatoren) anzusehen, insbesondere die für Ihre Forschung verfügbaren Modelle. Bedenken Sie jedoch, dass Ihr Ergebnis möglicherweise besser ist, wenn Sie ein Werkzeug verwenden, das derzeit aktiv entwickelt und unterstützt wird (ns-3).
1.3 Mitwirkung am Projekt
ns-3 ist ein wissenschaftlicher Bildungsimulator für die Forschungs-Community. Er wird auf den aktuellen Beiträgen der Community bei der Entwicklung neuer Modelle, der Fehlersuche oder der Unterstützung bestehender Modelle und beim Austausch von Ergebnissen basieren. Es gibt einige Richtlinien, die hoffentlich die Menschen dazu ermutigen, zu ns-3 beizutragen, so wie sie es bei ns-2 tun:
- Lizenzierung unter einer Open-Source-Lizenz, die mit der GNU GPLv2 kompatibel ist.
- wiki.
- Seite , ähnlich der beliebten Seite für ns-2.
- Verwendung von GitLab.com, einschließlich des Fehlerverfolgungssystems:
Wir verstehen, dass Sie möglicherweise nicht vorhaben, zu diesem Dokument beizutragen, auch wenn Sie es lesen. Aber wir möchten, dass Sie wissen, dass Beitragen im Geiste des Projekts liegt und dass Ihr Feedback, selbst über Ihre frühen Erfahrungen mit ns-3 (z.B. "dieser Abschnitt des Handbuchs war unklar ..."), Berichte über veraltete Dokumentationen oder Kommentare im Code usw. für uns wertvoll sind. Der bevorzugte Weg, um Korrekturen einzureichen, besteht darin, einen Fork auf mit Ihren Korrekturen zu erstellen und einen Merge-Request zu erstellen oder einen Antrag in unserem Tracker zu stellen und einen Patch hinzuzufügen.
1.4 Organisation des Handbuchs
Dieses Handbuch geht davon aus, dass neue Benutzer zunächst möglicherweise einem solchen Weg folgen:
- Versuchen Sie, eine Kopie herunterzuladen und zu erstellen;
- Versuchen Sie, einige Beispielprogramme auszuführen;
- Schauen Sie sich das Ergebnis der Simulation an und versuchen Sie, es anzupassen.
Letztendlich haben wir versucht, die Darstellung gemäß diesen Schritten zu organisieren.
Kapitel 2
Informationsquellen
2.1 Netzwerk
Es gibt mehrere wichtige Ressourcen, die jeder ns-3-Benutzer kennen sollte. Die Hauptwebsite befindet sich unter:
und bietet Zugang zu grundlegenden Informationen über das ns-3-System. Eine ausführliche Dokumentation ist über die Hauptwebsite verfügbar unter: .
Auf derselben Webseite finden Sie auch Dokumente, die sich auf die Architektur des Systems beziehen.
Es gibt eine Wiki-Seite, die die Hauptwebsite von ns-3 ergänzt, die Sie unter folgendem Link finden: .
Dort finden Sie Antworten auf häufig gestellte Fragen für Benutzer und Entwickler sowie Fehlerbehebungsleitfäden, Drittanbieter-Code, Dokumente usw.
Den Quellcode finden und ansehen können Sie auf GitLab.com:
.
Dort befindet sich im Repository mit dem Namen ns-3-dev der aktuelle Entwicklungsbaum. Frühere Releases und experimentelle Repositories der Kernel-Entwickler finden Sie ebenfalls unter Mercurial auf der alten Projekthomepage unter:
.
2.2 Git
Komplexe Softwaresysteme benötigen eine Möglichkeit, die Organisation und Änderung des Basiscodes und der Dokumentation zu verwalten. Es gibt viele Wege, dies zu erreichen, und Sie haben möglicherweise von einigen der Systeme gehört, die normalerweise dafür verwendet werden. Bis vor kurzem hat das ns-3-Projekt Mercurial als Versionskontrollsystem verwendet, aber im Dezember 2018 haben wir auf Git umgeschaltet. Obwohl Sie für das Lesen dieses Leitfadens nicht viel über Git wissen müssen, empfehlen wir Ihnen, sich damit vertraut zu machen und es zu verwenden, um auf den Quellcode zuzugreifen. GitLab.com bietet Ressourcen, um grundlegende Fertigkeiten zu erlernen unter: .
2.3 WAF
Nachdem Sie den Quellcode auf Ihren Computer heruntergeladen haben, müssen Sie ihn kompilieren, um ein funktionsfähiges Programm zu erhalten. Wie im Fall der Verwaltung des Quellcodes stehen Ihnen viele Werkzeuge zur Verfügung, um diese Funktion auszuführen. Wahrscheinlich ist das bekannteste dieser Werkzeuge make. Es sollte jedoch angemerkt werden, dass es sich bei diesem Werkzeug um das komplexeste handelt, wenn es in einem sehr großen und flexibel konfigurierbaren System verwendet wird. Dies hat zur Entwicklung vieler Alternativen geführt. Kürzlich wurden solche Systeme unter Verwendung der Programmiersprache Python entwickelt.
Im Projekt ns-3 wird das Build-System Waf verwendet. Es handelt sich um eine neue Generation von Build-Systemen, die auf Python basieren. Für den Build des bestehenden ns-3-Systems müssen Sie Python nicht kennen.
Für diejenigen, die sich für Details zur Verwendung von Waf interessieren, gibt es ein Buch, das unter folgender Adresse verfügbar ist:
und der aktuelle Code:
.
2.4 Entwicklungsumgebung
Wie bereits erwähnt, werden die Skripte in ns-3 in C++ oder Python ausgeführt. Der größte Teil der ns-3-API ist in Python verfügbar, aber die Modelle sind in jedem Fall in C++ geschrieben. Dieses Handbuch setzt voraus, dass Sie mit objektorientierter Programmierung in C++ vertraut sind. Im Verlauf werden wir einige Zeit damit verbringen, die fortgeschrittensten Konzepte und möglicherweise unbekannte Merkmale der Sprache wie Idiome und Entwurfsmuster zu behandeln. Wir möchten nicht, dass dieses Handbuch zu einem Lehrbuch über C++ wird, daher erwarten wir ein grundlegendes Verständnis der Sprache. Es gibt viele Informationsquellen über C++, die online oder in gedruckter Form verfügbar sind.
Wenn Sie neu in C++ sind, sollten Sie sich zuerst die Grundlagen der Sprache aneignen, indem Sie auf ein Lehrbuch oder eine Website zurückgreifen, die sich mit Schulung oder praktischen Rezepten beschäftigt. Zum Beispiel mit diesem: .
Unter Linux verwendet das ns-3-System mehrere Komponenten aus dem GNU-Projekt-Toolset. Das Toolset ist eine Sammlung von Programmierwerkzeugen, die in dieser Softwareumgebung verfügbar sind. Für eine schnelle Übersicht über die enthaltenen GNU-Tools siehe: .
Der ns-3-Simulator verwendet gcc, GNU binutils und gdb. Gleichzeitig verwenden wir zum Build des Projekts weder make noch autotools aus den GNU-Tools. Für diese Funktionen verwenden wir Waf.
In macOS wird das Xcode-Toolkit verwendet. Benutzern von ns-3 auf Mac wird dringend empfohlen, Xcode und die Command Line Tools über den Apple App Store zu installieren. Weitere Informationen finden Sie auf der Installations-Wiki-Seite von ns-3: ().
In der Regel arbeitet der Autor von ns-3 in einer Linux- oder Unix-ähnlichen Umgebung. Für diejenigen, die unter Windows arbeiten, gibt es Umgebungen, die in unterschiedlichem Maße eine Linux-Umgebung simulieren. Für solche Benutzer hat das ns-3-Projekt in der Vergangenheit (aber nicht mehr) die Entwicklung in einer Cygwin-Umgebung unterstützt. Weitere Einzelheiten zum Herunterladen und weitere Informationen zu Cygwin und ns-3 finden Sie auf der ns-3-Wiki-Seite:
.
MinGW wird derzeit offiziell nicht unterstützt. Eine weitere Alternative zu Cygwin ist die Installation einer virtuellen Umgebung wie VMware Server, in der Sie Linux installieren können.
2.5 Socket-Programmierung
In den Beispielen, die in diesem Handbuch verwendet werden, werden wir die grundlegenden Funktionen der Berkeley Sockets API verwenden. Wenn Sie neu im Bereich der Sockets sind, empfehlen wir, sich mit der API und einigen gängigen Anwendungsfällen vertraut zu machen. Für einen guten Überblick über die TCP/IP-Socket-Programmierung empfehlen wir: "TCP/IP Sockets in C", Donahoo und Calvert.
Es gibt eine zugehörige Website, die die Beispiele aus dem Buch enthält, die Sie unter folgender Adresse finden können:
.
Wenn Sie die ersten vier Kapitel des Buches verstehen (oder wenn Sie keinen Zugang zu einer Kopie des Buches haben, die Echos von Clients und Servern zeigt, die auf der oben genannten Website verfügbar sind), wird das ausreichen, um das Tutorial zu verstehen. Es gibt ein ähnliches Buch:
"Multicast Sockets, Multicast Sockets", Makofske und Almeroth.
Es behandelt Material, das Sie möglicherweise benötigen, wenn Sie Beispiele für Multicast im Distributionstudium untersuchen.
Fortsetzung:
Quelle: habr.com
