Dieser Artikel eröffnet eine Reihe von Veröffentlichungen mit der Übersetzung des Lehrbuchs "" für den Netzwerksimulator ns-3.

Dieses Dokument ist eine Übersetzung des Originaldokuments in Englisch, das in für geschrieben wurde und sich im Verzeichnis doc/tutorial des Quellcodes von ns-3 befindet.
1 Einleitung
1.1 Über ns-3
1.2 Für Benutzer von ns-2
1.3 Teilnahme 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 Projekt ns-3 ist in fünf Formen verfügbar:
- API-Dokumentation des Simulators: ns-3 .
- Lehrbuch, Anleitung und Modellsammlung für und .
- ns-3.
Kapitel 1
Vorwort
Der ns-3 Simulator ist ein ereignisgesteuerter Netzwerk-Simulator, der hauptsächlich für Forschungs- und Bildungszwecke entwickelt wurde. Das n-3 Projekt wurde 2006 gestartet und ist ein Open-Source-Projekt.
Ziel dieses Leitfadens ist es, ns-3 neuen Nutzern in einem systematischen, strukturierten Format vorzustellen. Manchmal ist es für einen Neuling schwierig, die erforderlichen Informationen zu erhalten und in ein funktionierendes Modell zu übertragen. In diesem Leitfaden präsentieren wir mehrere Modellierungsbeispiele, während wir die Schlüsselkonzepte und -merkmale erläutern und erklären.
Im Verlauf des Textes werden wir die vollständige Dokumentation zu ns-3 bereitstellen und Links zum Quellcode anbieten für diejenigen, die an einem tiefergehenden Verständnis des Systems interessiert sind.
Zu Beginn sollten einige Schlüsselpunkte hervorgehoben werden:
- ns-3 hat einen offenen Quellcode, das Projekt strebt an, eine offene Umgebung zu unterstützen, in der Forscher Beiträge leisten und ihre Entwicklungen teilen können.
- ns-3 ist kein abwärtskompatibles Erweiterung von ns-2, es handelt sich um einen neuen Simulator. Beide Simulatoren sind in C++ geschrieben, aber ns-3 ist ein neuer Simulator, der die API-Schnittstellen von ns-2 nicht 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 Ausbildung bereitzustellen. Kurz gesagt, ns-3 bietet Modelle dafür, wie paketvermittelnde Netzwerke implementiert und betrieben werden, und bietet dem Benutzer eine Simulationsmaschine, um Experimente durchzuführen. Gründe für die Verwendung von ns-3 können Situationen sein, in denen eine Forschung erforderlich ist, die schwierig oder unmöglich auf einem echten System durchzuführen ist, die Möglichkeit, das Verhalten eines Systems in einer streng kontrollierten, reproduzierbaren Umgebung zu untersuchen, sowie das Verständnis dafür, wie Netzwerke funktionieren.
Benutzer werden feststellen, dass der in ns-3 bereitgestellte Modellatz auf die Modellierung von Internet-Protokollen und Netzwerken fokussiert ist, aber ns-3 ist nicht auf Internet-Systeme beschränkt. Einige Benutzer verwenden ns-3 auch zur Modellierung von Systemen, die nicht auf Internet-Technologien basieren.
Es gibt viele Netzwerkmodellierungswerkzeuge. Im Folgenden sind einige charakteristische Merkmale von ns-3 im Vergleich zu anderen Werkzeugen aufgeführt.
- ns-3 wurde als Sammlung von Bibliotheken entwickelt, die miteinander sowie mit anderen externen Softwarebibliotheken kombiniert werden können. Während einige Simulationsplattformen den Nutzern eine integrierte Umgebung mit einer grafischen Benutzeroberfläche bieten, die die gesamte Arbeit steuert, ist ns-3 in dieser Hinsicht modularer. Mit ns-3 können mehrere externe Animator-Tools sowie Datenanalyse- und Visualisierungstools verwendet werden. Dennoch müssen die Nutzer in der Kommandozeile arbeiten und mit den Entwicklungswerkzeugen C++ und/oder Python umgehen.
- ns-3 wird hauptsächlich in 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 das Windows Subsystem für Linux oder Cygwin. Die für Windows native Visual Studio wird derzeit nicht unterstützt, obwohl der Entwickler an der Implementierung dieser Funktion arbeitet. Windows-Nutzer können auch eine Linux-VM verwenden.
- ns-3 ist ein nicht offiziell unterstütztes Produkt eines Unternehmens. Die Unterstützung für ns-3 erfolgt mit maximaler Hingabe im ns-3-Benutzerforum (ns-3-users@googlegroups.com).
1.2 Für Benutzer von ns-2
Für diejenigen, die mit ns-2 (einem beliebten Vorgänger-Tool von ns-3) vertraut sind, besteht die auffälligste Änderung beim Übergang zu ns-3 in der Wechsel des Skriptsprachen. Programme in ns-2 sind in OTcl geschrieben, und die Simulationsresultate können mit dem Nam-Netzwerk-Animator visualisiert werden. In ns-2 ist es nicht möglich, eine Simulation ausschließlich aus C++ auszuführen (also als main() Programm ohne jegliches OTcl). 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 Python-Bindungen. Daher können Simulationsszenarien sowohl in C++ als auch in Python geschrieben werden. Es stehen neue Animator- und Visualisierungswerkzeuge zur Verfügung, die weiterhin entwickelt werden. Da ns-3 Paket-Trace-Dateien im pcap-Format generiert, können auch andere Tools zur Analyse der Traces verwendet werden. In diesem Handbuch konzentrieren wir uns zunächst auf Szenarien, die in C++ implementiert sind, und auf die Interpretation der Ergebnisse durch die Analyse von Trace-Dateien.
Es gibt jedoch auch Gemeinsamkeiten (zum Beispiel basieren beide Werkzeuge auf C++-Objekten, ein Teil des Codes von ns-2 wurde in ns-3 portiert). Im Folgenden werden wir versuchen, die Unterschiede zwischen ns-2 und ns-3 aufzuzeigen.
Eine häufige Frage, die wir hören: "Sollte ich weiterhin ns-2 verwenden oder auf ns-3 umsteigen?" Meiner Meinung nach wird der Benutzer, sofern er nicht aus irgendeinem persönlichen Komfort oder Wissen an ns-2 gebunden ist, sondern auf der Basis eines spezifischen 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 hilfreichen Benutzer-Mailingliste, während ns-2 nur geringfügig unterstützt wird und seit über zehn Jahren keine wesentlichen Änderungen in seinem Hauptcodebaum gesehen hat.
- ns-3 bietet Funktionen, die in ns-2 nicht verfügbar sind, wie die Laufzeitumgebung der Implementierung, die es Benutzern erlaubt, echten Implementierungscode im Simulator auszuführen.
- ns-3 bietet eine niedrigere grundlegende Abstraktionsebene im Vergleich zu ns-2, was es ihm ermöglicht, besser darzustellen, wie reale Systeme interagieren. Einige Beschrä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 populären Forschungsbereichen (einschließlich komplexer Modelle für LTE und WiFi), und seine Code-Implementierungsunterstützung erlaubt eine sehr breite Palette hochwertiger Modelle. Benutzer könnten überrascht sein zu erfahren, dass der gesamte Netzwerk-Stack von Linux in einen ns-3-Knoten mit Hilfe des Direct Code Execution Frameworks (DCE) integriert werden kann. Modelle aus ns-2 können manchmal in ns-3 portiert werden, insbesondere wenn sie in C++ implementiert wurden.
Wenn Sie unsicher sind, wäre es ratsam, beide Simulatoren (sowie andere Simulatoren) anzusehen, insbesondere die Modelle, die für Ihre Forschung verfügbar sind. Bedenken Sie jedoch, dass Ihr Ergebnis besser sein könnte, wenn Sie ein Tool verwenden, das derzeit aktiv entwickelt und unterstützt wird (ns-3).
1.3 Teilnahme am Projekt
ns-3 ist ein wissenschaftlicher Bildungs-Simulator für die Forschungsgemeinschaft. Er basiert auf den aktuellen Beiträgen der Gemeinschaft bei der Entwicklung neuer Modelle, der Fehlersuche oder der Unterstützung bestehender Modelle sowie beim Austausch von Ergebnissen. Es gibt eine gewisse Politik, die hoffentlich die Menschen dazu ermutigt, zu ns-3 beizutragen, so wie sie es auch für ns-2 tun:
- Lizenzierung mit offener Quelle auf Grundlage der Kompatibilität mit der GNU GPLv2 Lizenz.
- wiki.
- Seite , ähnlich wie die beliebte Seite für ns-2.
- Verwendung von GitLab.com, einschließlich des Fehlersystems:
Wir verstehen, dass Sie, selbst wenn Sie dieses Dokument lesen, möglicherweise nicht planen, zu diesem Zeitpunkt einen Beitrag zu leisten. Aber wir möchten, dass Sie wissen, dass es im Geiste des Projekts liegt, Beiträge zu leisten, und dass uns Ihr Feedback, auch zu Ihren ersten Erfahrungen mit ns-3, von Wert sein wird (zum Beispiel: "Dieser Abschnitt des Handbuchs war unklar ...", Meldungen über veraltete Dokumentation oder Kommentare im Code usw.). Der bevorzugte Weg, Änderungen zu senden, besteht entweder darin, einen Fork mit Ihren Änderungen zu erstellen und einen Merge-Request zu erstellen oder eine Anfrage in unserem Tracker zu erstellen und einen Patch hinzuzufügen. Ein Merge-Request zu erstellen.
1.4 Organisation des Handbuchs
Dieses Handbuch geht davon aus, dass neue Benutzer anfangs einen solchen Pfad beschreiten können:
- Versuchen, eine Kopie herunterzuladen und zu erstellen;
- Versuchen, einige Beispielprogramme auszuführen;
- Ergebnisse der Simulation zu betrachten und zu versuchen, sie 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 Benutzer von ns-3 kennen sollte. Die Hauptwebsite befindet sich unter:
und bietet Zugang zu grundlegenden Informationen über das ns-3-System. Detaillierte Dokumentationen sind über die Hauptwebsite verfügbar unter: .
Auf dieser Webseite finden Sie ebenfalls Dokumente, die sich auf die Architektur des Systems beziehen.
Es gibt eine Wiki-Seite, die die Hauptwebsite von ns-3 ergänzt, die Sie finden können unter: .
Dort finden Sie Antworten auf häufig gestellte Fragen für Benutzer und Entwickler sowie Leitfäden zur Fehlersuche, Drittanbieter-Code, Dokumente usw.
Der Quellcode kann auf GitLab.com gefunden und eingesehen werden:
.
Im selben Repository mit dem Namen ns-3-dev befindet sich der aktuelle Entwicklungsbaum. Frühere Versionen und experimentelle Repositories der Kernentwickler sind ebenfalls unter Mercurial auf der alten Projektseite zu finden unter:
.
2.2 Git
Komplexe Softwaresysteme benötigen einen Weg, um die Organisation und die Änderungen am Basiscode sowie an der Dokumentation zu verwalten. Es gibt viele Möglichkeiten, dies zu erreichen, und wahrscheinlich haben Sie von einigen der Systeme gehört, die dafür üblicherweise verwendet werden. Bis vor kurzem nutzte das Projekt ns-3 Mercurial als Versionskontrollsystem, aber im Dezember 2018 haben wir auf Git umgestellt. Obwohl Sie für das Lesen dieses Handbuchs nicht viel über Git wissen müssen, empfehlen wir, sich damit vertraut zu machen und es zu verwenden, um auf den Quellcode zuzugreifen. GitLab.com bietet Ressourcen, um grundlegende Fähigkeiten zu erlernen unter: .
2.3 WAF
Nachdem Sie den Quellcode auf Ihren Computer heruntergeladen haben, müssen Sie ihn kompilieren, um ein einsatzbereites Programm zu erhalten. Wie bei der Verwaltung des Quellcodes stehen auch für diese Funktion viele Werkzeuge zur Verfügung. Das bekannteste dieser Werkzeuge ist wahrscheinlich make. Obwohl dieses Werkzeug das bekannteste ist, sollte beachtet werden, dass es sich als das komplexeste herausstellt, wenn es in einem sehr großen und flexibel konfigurierbaren System verwendet wird. Dies war der Grund für die Entwicklung zahlreicher Alternativen. Kürzlich wurden solche Systeme unter Verwendung der Sprache Python entwickelt.
Im Projekt ns-3 wird das Bau System Waf verwendet. Es gehört zu der neuen Generation von Build-Systemen, die auf Python basieren. Für den Aufbau des bestehenden ns-3-Systems müssen Sie kein Python wissen.
Für diejenigen, die an Einzelheiten zur Verwendung von Waf interessiert sind, gibt es ein Buch, das verfügbar ist unter:
und der aktuelle Code:
.
2.4 Entwicklungsumgebung
Wie bereits erwähnt, werden Szenarien in ns-3 in C++ oder Python ausgeführt. Der Groß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. Während wir das Thema behandeln, werden wir etwas Zeit damit verbringen, fortgeschrittene Konzepte und möglicherweise unbekannte Merkmale der Sprache wie Idiome und Entwurfsmuster zu diskutieren. Wir möchten nicht, dass dieses Handbuch zu einem Lehrbuch über C++ wird, daher erwarten wir grundlegende Kenntnisse der Sprache. Es gibt viele Informationsquellen über C++, die online oder in gedruckter Form verfügbar sind.
Wenn Sie neu in C++ sind, lernen Sie vorher die Grundlagen der Sprache mithilfe eines Tutorials oder einer Website, die sich mit Schulungen oder fertigen Rezepten beschäftigt. Zum Beispiel: .
Unter Linux verwendet das ns-3-System mehrere Komponenten aus dem GNU-Projekt. Die Werkzeugsammlung ist eine Gruppe von Programmierwerkzeugen, die in dieser Softwareumgebung verfügbar sind. Für einen schnellen Überblick, was in den GNU-Tools enthalten ist, siehe. .
Der ns-3 Simulator verwendet gcc, GNU Binutils und gdb. Für den Build-Prozess des Projekts kommen dabei jedoch weder make noch autotools von GNU zum Einsatz. Hierfür nutzen wir Waf.
Unter macOS wird das Xcode-Toolset verwendet. ns-3-Benutzern auf Mac wird dringend empfohlen, Xcode und die Command Line Tools aus dem Apple App Store zu installieren. Weitere Informationen finden Sie auf der ns-3 Installationswiki-Seite: ().
Der Autor von ns-3 arbeitet normalerweise in einer Linux- oder Unix-ähnlichen Umgebung. Für Windows-Nutzer gibt es Umgebungen, die in unterschiedlichem Maße eine Linux-Umgebung simulieren. In der Vergangenheit unterstützte das ns-3-Projekt (aber nicht mehr aktuell) die Entwicklung in Cygwin. Für Details zur Installation und zusätzliche Informationen zu Cygwin und ns-3 besuchen Sie bitte die ns-3 Wiki-Seite:
.
MinGW wird derzeit offiziell nicht unterstützt. Eine andere Alternative zu Cygwin ist die Installation einer virtuellen Umgebung, wie z.B. VMware Server, um Linux zu installieren.
2.5 Socket-Programmierung
In den Beispielen, die in diesem Handbuch verwendet werden, nutzen wir die grundlegenden Funktionen der Berkeley-Sockets-API. Wenn Sie neu im Bereich Sockets sind, empfehlen wir Ihnen, sich mit der API und einigen gängigen Anwendungsszenarien vertraut zu machen. Für einen guten Überblick über die Programmierung von TCP/IP-Sockets empfehlen wir: "TCP/IP Sockets in C", Donahoo und Calvert.
Es gibt eine zugehörige Website, die die Beispielsourcenaus der Buch enthält, die Sie unter folgender Adresse finden können:
.
Wenn Sie die ersten vier Kapitel des Buches verstehen (oder für diejenigen, die keinen Zugriff auf ein Exemplar des Buches haben, die Echo-Clients und -Server, die auf der oben verlinkten Website gezeigt werden), wird dies ausreichen, um das Tutorial zu verstehen. Es gibt ein ähnliches Buch:
"Multicast Sockets, Multicast Sockets", Makofske und Almeroth.
Es behandelt Material, das Sie benötigen könnten, wenn Sie die Beispiele zur Multicast-Verteilung im Distributionsdokument studieren.
Fortsetzung:
Quelle: habr.com
