Cet article ouvre une série de publications traduisant le manuel "" du simulateur de réseaux ns-3.

Ce document est la traduction du document original en anglais, qui a été écrit en pour et se trouve dans le répertoire doc/tutorial du code source de ns-3.
1 Préface
1.1 À propos de ns-3
1.2 Pour les utilisateurs de ns-2
1.3 Participation au projet
1.4 Organisation du guide
2 Sources d'information
2.1 Réseau
2.2 Git
2.3 WAF
2.4 Environnement de développement
2.5 Programmation des sockets
La documentation principale pour le projet ns-3 est disponible sous cinq formes :
- Documentation de l'API du simulateur : ns-3 .
- Manuel, guide et bibliothèque de modèles pour et .
- ns-3.
Chapitre 1
Préface
Le simulateur ns-3 est un simulateur de réseau basé sur des événements discrets, principalement destiné à la recherche et à des fins éducatives. Le projet développant ns-3 a été lancé en 2006 et est un projet open source.
L'objectif de ce guide est de présenter ns-3 aux nouveaux utilisateurs de manière systématique et structurée. Il peut parfois être difficile pour un novice d'obtenir les informations nécessaires et de les transformer en modélisation fonctionnelle. Dans ce guide, nous fournirons plusieurs exemples de modélisation, illustrant et expliquant les concepts clés et les caractéristiques au fur et à mesure.
Au fil de l'exposé, nous fournirons la documentation complète sur ns-3 et donnerons des liens vers le code source pour ceux qui souhaitent comprendre plus en profondeur le fonctionnement du système.
Il convient de souligner plusieurs points clés :
- ns-3 a un code source ouvert, et le projet s'efforce de maintenir un environnement ouvert dans lequel les chercheurs peuvent contribuer et partager leurs réalisations logicielles.
- ns-3 n'est pas une extension rétrocompatible de ns-2, c'est un nouveau simulateur. Les deux simulateurs sont écrits en C++, mais ns-3 est un nouveau simulateur qui ne prend pas en charge les interfaces API de ns-2.
1.1 À propos de ns-3
Le simulateur ns-3 a été développé pour offrir une plateforme ouverte et extensible pour la modélisation de réseaux, la recherche réseau et l'éducation. En résumé, ns-3 fournit des modèles de la façon dont fonctionnent et sont mises en œuvre les réseaux de transmission de paquets et donne à l'utilisateur un moteur de simulation pour effectuer des expériences de simulation. Les raisons d'utiliser ns-3 peuvent être des situations où il est nécessaire de mener une recherche qui est difficile ou impossible à effectuer sur un système réel, la possibilité d'étudier le comportement du système dans un environnement strictement contrôlé, reproductible et d'apprendre comment fonctionnent les réseaux.
Les utilisateurs remarqueront que l'ensemble de modèles fourni dans ns-3 est axé sur la modélisation du fonctionnement des protocoles Internet et des réseaux, mais ns-3 n'est pas limité aux systèmes Internet; certains utilisateurs utilisent ns-3 pour modéliser des systèmes qui ne reposent pas sur des technologies Internet.
Il existe de nombreux outils de modélisation de réseaux. Voici quelques caractéristiques distinctives de ns-3 par rapport à d'autres outils.
- ns-3 est conçu comme un ensemble de bibliothèques pouvant être combinées entre elles, ainsi qu'avec d'autres bibliothèques logicielles externes. Alors que certaines plateformes de modélisation offrent aux utilisateurs un environnement intégré unique avec une interface graphique contrôlant l'ensemble du travail, ns-3 est plus modulaire à cet égard. Avec ns-3, plusieurs animateurs externes, outils d'analyse de données et de visualisation peuvent être utilisés. Néanmoins, les utilisateurs doivent s'attendre à travailler dans la ligne de commande et à utiliser des outils de développement logiciel en C++ et/ou Python.
- ns-3 est principalement utilisé sur les systèmes Linux ou macOS, bien qu'il existe un support pour les systèmes BSD, ainsi que pour les plateformes Windows capables de compiler du code pour Linux, telles que Windows Subsystem for Linux ou Cygwin. La version native Windows Visual Studio n'est actuellement pas prise en charge, bien que le développeur travaille à la mise en œuvre de cette possibilité. Les utilisateurs de Windows peuvent également utiliser une machine virtuelle Linux.
- ns-3 n'est pas un produit officiellement pris en charge par une entreprise quelconque. Le soutien de ns-3 est fourni avec un maximum d'efficacité sur le forum des utilisateurs de ns-3 (ns-3-users@googlegroups.com).
1.2 Pour les utilisateurs de ns-2
Pour ceux qui connaissent ns-2 (un outil populaire qui a précédé ns-3), le changement le plus notable lors du passage à ns-3 est le changement de langage de script. Les programmes ns-2 sont écrits en OTcl, et les résultats de simulation peuvent être visualisés à l'aide de l'animateur de réseaux nam. Il n'est pas possible de lancer une simulation exclusivement à partir de C++ (c'est-à-dire comme programme main() sans aucune OTcl). De plus, certains composants de ns-2 sont écrits en C++ et d'autres en OTcl. Dans ns-3, le simulateur est entièrement écrit en C++ avec des liaisons Python facultatives. Par conséquent, les scripts de simulation peuvent être écrits en C++ ou en Python. De nouveaux animateurs et visualisateurs sont disponibles et continuent d'être développés. Comme ns-3 génère des fichiers de trace de paquets pcap, d'autres outils peuvent également être utilisés pour analyser les traces. Dans ce guide, nous nous concentrerons d'abord sur les scénarios réalisés en C++ et l'interprétation des résultats via l'analyse des fichiers de trace.
Mais il existe aussi des podobieństwa (par exemple, les deux outils sont basés sur des objets C++, une partie du code de ns-2 a été portée dans ns-3). Au fil de l'exposé, nous tenterons de illustrer les différences entre ns-2 et ns-3.
La question que nous entendons souvent : "Devrais-je continuer à utiliser ns-2 ou passer à ns-3 ?" Selon l'auteur, si l'utilisateur n'est d'aucune manière attaché à ns-2 (sur la base du confort personnel et de la connaissance existants de ns-2, ou sur la base d'un modèle de simulation spécifique disponible uniquement dans ns-2), alors il sera plus productif avec ns-3 pour les raisons suivantes :
- ns-3 est activement soutenu avec une liste de diffusion d'utilisateurs active et réactive, tandis que ns-2 est seulement légèrement maintenu et n'a pas connu de changements significatifs dans son arbre de code principal depuis plus de dix ans.
- ns-3 fournit des fonctionnalités non disponibles dans ns-2, telles qu'un environnement d'exécution du code d'implémentation (permettant aux utilisateurs d'exécuter du code réel dans le simulateur).
- ns-3 offre un niveau d'abstraction de base plus bas comparé à ns-2, ce qui lui permet de mieux correspondre à la façon dont les systèmes réels interagissent. Certaines limitations trouvées dans ns-2 (comme le soutien correct de plusieurs types d'interfaces sur un nœud) ont été corrigées dans ns-3.
Grâce à son histoire longue, ns-2 possède un ensemble de modules pris en charge plus varié que ns-3. Cependant, ns-3 offre des modèles plus détaillés dans plusieurs domaines de recherche populaires (y compris les modèles complexes LTE et WiFi), et son support de l'implémentation du code permet une large gamme de modèles de haute précision. Les utilisateurs peuvent être surpris d'apprendre que toute la pile réseau Linux peut être encapsulée dans un nœud ns-3 en utilisant le cadre d'exécution directe de code (DCE). Les modèles de ns-2 peuvent parfois être portés vers ns-3, surtout s'ils ont été implémentés en C++.
Si vous avez des doutes, il serait judicieux de jeter un œil aux deux simulateurs (ainsi qu'à d'autres simulateurs), en particulier aux modèles disponibles pour votre recherche, mais gardez à l'esprit que votre résultat pourrait être amélioré en utilisant l'outil qui est actuellement activement développé et supporté (ns-3).
1.3 Participation au projet
ns-3 est un simulateur scientifique et éducatif pour la communauté de recherche. Il repose sur les contributions actuelles de la communauté au développement de nouveaux modèles, au débogage ou à la maintenance des modèles existants et au partage des résultats. Il existe une certaine politique qui, espérons-le, encouragera les gens à contribuer à ns-3, comme ils le font pour ns-2 :
- Licence open source basée sur la compatibilité avec la licence GNU GPLv2.
- wiki.
- Page , similaire à la page populaire de ns-2.
- Utilisation de GitLab.com, y compris le système de suivi des bugs :
Nous comprenons que si vous lisez ce document, vous ne prévoyez peut-être pas à ce stade de contribuer. Mais nous voulons que vous sachiez que la contribution est dans l'esprit du projet et que vos retours seront précieux, même sur votre expérience précoce avec ns-3 (par exemple, "cette section du manuel n'était pas claire ..."), signaler de la documentation obsolète ou faire un commentaire sur le code, etc. Le moyen préféré d'envoyer des corrections est soit de faire une branche (fork) avec vos corrections et de créer une demande de fusion, soit de créer une demande sur notre traqueur et d'ajouter un patch. Ce guide suppose que les nouveaux utilisateurs peuvent initialement suivre, par exemple, ce chemin :
1.4 Organisation du guide
Essayer de télécharger et de compiler une copie ;
- Essayer d'exécuter quelques exemples de programmes ;
- Essayez de lancer plusieurs exemples de programmes;
- Voir le résultat de la simulation et essayer de l'ajuster.
En fin de compte, nous avons essayé d'organiser l'exposé selon ces étapes.
Chapitre 2
Sources d'information
2.1 Réseau
Il existe plusieurs ressources importantes que tout utilisateur de ns-3 devrait connaître. Le site web principal est situé à l'adresse :
et fournit un accès aux informations de base sur le système ns-3. La documentation détaillée est disponible via le site web principal à l'adresse : .
Sur cette même page web, vous pouvez également trouver des documents relatifs à l'architecture du système.
Il existe une page wiki qui complète le site web principal de ns-3, vous la trouverez à l'adresse : .
Vous y trouverez des réponses aux questions fréquentes pour les utilisateurs et les développeurs, ainsi que des guides de dépannage, du code tiers, des documents, etc.
Le code source peut être trouvé et consulté sur GitLab.com :
.
Là aussi, dans le dépôt nommé ns-3-dev se trouve l'arbre de développement actuel. Des versions précédentes et des dépôts expérimentaux des développeurs du noyau peuvent également être trouvés sous Mercurial sur l'ancien site du projet à l'adresse :
.
2.2 Git
Les systèmes logiciels complexes ont besoin d'un moyen de gérer l'organisation et les modifications du code de base et de la documentation. Il existe plusieurs façons d'y parvenir, et vous avez peut-être entendu parler de certains des systèmes généralement utilisés à cet effet. Jusqu'à récemment, le projet ns-3 utilisait Mercurial comme système de gestion de code source, mais en décembre 2018, nous avons changé pour utiliser Git. Bien que vous n'ayez pas besoin de beaucoup savoir sur Git pour lire ce guide, nous vous recommandons de vous familiariser avec celui-ci et de l'utiliser pour accéder au code source. GitLab.com fournit des ressources pour acquérir les compétences de base à l'adresse : .
2.3 WAF
Une fois que vous avez téléchargé le code source sur votre ordinateur, pour obtenir un programme prêt à l'emploi, vous devrez le compiler. Tout comme pour la gestion du code source, de nombreux outils sont disponibles pour cette fonction. L'un des outils les plus connus est make. Il convient de noter que cet outil, bien qu'étant le plus célèbre, s'avère le plus compliqué à utiliser dans un système très vaste et flexible. C'est la raison pour laquelle de nombreuses alternatives ont été développées. Récemment, des systèmes similaires ont été créés utilisant le langage Python.
Le projet ns-3 utilise le système de construction Waf. Il s'agit d'une nouvelle génération de systèmes de construction basés sur Python. Pour construire le système ns-3 existant, vous n'aurez pas besoin de connaître Python.
Pour ceux qui s'intéressent aux détails d'utilisation de Waf, il existe un livre disponible à l'adresse :
et le code actuel :
.
2.4 Environnement de développement
Comme mentionné précédemment, les scripts dans ns-3 sont exécutés en C++ ou en Python. La majeure partie de l'API ns-3 est accessible en Python, mais les modèles sont de toute façon écrits en C++. Ce guide suppose que vous êtes familier avec la programmation orientée objet en C++. Au fur et à mesure du développement, nous prendrons un moment pour examiner les concepts les plus avancés et peut-être des aspects du langage qui vous sont inconnus, tels que les idiomes et les modèles de conception. Nous ne voulons pas que ce guide se transforme en manuel de C++, donc nous nous attendons à une connaissance de base de la langue. Il existe de nombreuses sources d'information sur C++ disponibles en ligne ou sur papier.
Si vous êtes novice en C++, alors avant de continuer, maîtrisez les bases du langage en utilisant un manuel ou un site Web consacré à l'apprentissage ou à des recettes prêtes à l'emploi. Par exemple, le suivant : .
Sous Linux, le système ns-3 utilise plusieurs composants des outils du projet GNU. Les outils sont un ensemble d'outils de programmation disponibles dans cet environnement logiciel. Pour un aperçu rapide de ce qui est inclus dans les outils GNU, voir. .
Le simulateur ns-3 utilise gcc, GNU binutils et gdb. En même temps, nous n'utilisons ni make ni autotools des outils GNU pour la construction du projet. Pour ces fonctions, nous utilisons Waf.
Sur macOS, un ensemble d'outils Xcode est utilisé. Les utilisateurs de ns-3 sur Mac sont fortement encouragés à installer Xcode et les paquets d'outils en ligne de commande depuis l'Apple App Store, et pour plus d'informations, veuillez consulter la page wiki d'installation de ns-3 : ().
Généralement, l'auteur de ns-3 travaille dans un environnement Linux ou Unix-like. Pour ceux qui travaillent sous Windows, il existe des environnements qui imitent dans une certaine mesure l'environnement Linux. Pour ces utilisateurs, le projet ns-3 a précédemment (mais ne prend plus en charge actuellement) soutenu le développement dans un environnement Cygwin. Pour des détails sur le téléchargement et plus d'informations sur Cygwin et ns-3, veuillez consulter la page wiki de ns-3 :
.
MinGW n'est actuellement pas officiellement pris en charge. Une autre alternative à Cygwin est d'installer un environnement virtuel, tel que VMware server, pour y installer Linux.
2.5 Programmation des sockets
Dans les exemples utilisés dans ce guide, nous allons utiliser les fonctionnalités de base de l'API des sockets de Berkeley. Si vous êtes nouveau dans le domaine des sockets, nous vous conseillons de vous familiariser avec l'API et quelques cas d'utilisation courants. Pour un bon aperçu de la programmation des sockets TCP/IP, nous vous recommandons : "TCP/IP Sockets in C", Donahoo et Calvert.
Il existe un site web associé qui contient la source d'exemples du livre, que vous pouvez trouver à l'adresse :
.
Si vous comprenez les quatre premiers chapitres du livre (ou pour ceux qui n'ont pas accès à une copie du livre, les clients et serveurs écho montrés sur le site web via le lien ci-dessus), cela sera suffisant pour comprendre le tutoriel. Il existe un livre similaire
"Multicast Sockets, Multicast Sockets", Makofske et Almeroth.
Il couvre le matériel dont vous pourriez avoir besoin si vous envisagez d'étudier dans le cadre du distributeur des exemples de diffusion multidiffusion.
Suite :
Source : habr.com
