Guida al simulatore di rete ns-3. Capitoli 1, 2

Questo articolo dà inizio a una serie di pubblicazioni con la traduzione del manuale "ns-3 Tutorial Release ns-3.29" sul simulatore di reti ns-3.

Guida al simulatore di rete ns-3. Capitoli 1, 2

Questo documento è una traduzione del documento originale in inglese, scritto in reStructuredText per Sphinx e si trova nella directory doc/tutorial del codice sorgente ns-3.

1 Introduzione
1.1 Su ns-3
1.2 Per gli utenti di ns-2
1.3 Partecipazione al progetto
1.4 Organizzazione della guida
2 Fonti di informazione
2.1 Rete
2.2 Git
2.3 WAF
2.4 Ambiente di sviluppo
2.5 Programmazione dei socket
capitolo 3
capitolo 4
capitolo 5
capitolo 6
capitolo 7
capitoli 8, 9

Scarica la traduzione in un unico file pdf

La documentazione principale per il progetto ns-3 è disponibile in cinque forme:

Prefazione

Il simulatore ns-3 è un simulatore di rete basato su eventi discreti, progettato principalmente per la ricerca e l'uso in contesti educativi. Il progetto che sviluppa ns-3 è iniziato nel 2006 ed è un progetto open-source.

Lo scopo di questa guida è presentare ns-3 ai nuovi utenti in modo sistematico e strutturato. A volte i principianti trovano difficile ottenere le informazioni necessarie e trasformarle in una simulazione funzionante. In questa guida implementeremo diversi esempi di simulazione, mostrando e spiegando nel corso del percorso i concetti chiave e le caratteristiche.

Procedendo, presenteremo la documentazione completa su ns-3 e forniremo link al codice sorgente per coloro che sono interessati a una comprensione approfondita del funzionamento del sistema.

All'inizio vale la pena notare alcuni punti chiave:

  • ns-3 ha un codice sorgente aperto, il progetto mira a mantenere un ambiente aperto in cui i ricercatori possano contribuire e condividere i loro sviluppi software.
  • ns-3 non è un'estensione retrocompatibile di ns-2, è un nuovo simulatore. Entrambi i simulatori sono scritti in C++, ma ns-3 è un nuovo simulatore che non supporta le API di ns-2.

1.1 Su ns-3

Il simulatore ns-3 è stato progettato per fornire una piattaforma aperta e scalabile per la modellazione di reti, la ricerca di rete e l'istruzione. In breve, ns-3 offre modelli di come sono implementate e funzionano le reti a pacchetto e fornisce all'utente un motore di simulazione per eseguire esperimenti simulativi. Le ragioni per utilizzare ns-3 possono includere situazioni in cui è necessario condurre una ricerca che risulta difficile o impossibile da svolgere su un sistema reale, la possibilità di studiare il comportamento di un sistema in un ambiente controllato e riproducibile, e la comprensione di come funzionano le reti.

Gli utenti noteranno che il set di modelli fornito da ns-3 è focalizzato sulla modellazione del funzionamento dei protocolli Internet e delle reti, ma ns-3 non è limitato solo ai sistemi Internet; alcuni utenti utilizzano ns-3 per modellare sistemi non basati su tecnologie Internet.

Esistono molti strumenti di modellazione di reti. Di seguito sono riportate alcune caratteristiche distintive di ns-3 rispetto ad altri strumenti.

  • ns-3 è stato progettato come un insieme di librerie che possono essere combinate tra loro e con altre librerie software esterne. Mentre alcune piattaforme di simulazione offrono agli utenti un ambiente integrato con un'interfaccia grafica che gestisce l'intero lavoro, ns-3 è più modulare in questo senso. Con ns-3 possono essere utilizzati diversi animatori esterni, strumenti per l'analisi dei dati e la visualizzazione. Tuttavia, gli utenti devono aspettarsi di lavorare nella riga di comando e con strumenti di sviluppo software in C++ e/o Python.
  • ns-3 è principalmente utilizzato su sistemi Linux o macOS, anche se esiste supporto per sistemi BSD, così come per piattaforme Windows capaci di compilare codice per Linux, come Windows Subsystem for Linux o Cygwin. La versione nativa per Windows, Visual Studio, non è attualmente supportata, anche se gli sviluppatori stanno lavorando per implementare questa funzionalità. Gli utenti Windows possono anche utilizzare una macchina virtuale con Linux.
  • ns-3 non è un prodotto ufficialmente supportato da alcuna azienda. Il supporto per ns-3 è fornito con il massimo impegno sul forum degli utenti di ns-3 (ns-3-users@googlegroups.com).

1.2 Per gli utenti di ns-2

Per chi è familiare con ns-2 (lo strumento popolare che ha preceduto ns-3), il cambiamento più evidente passando a ns-3 è il cambio del linguaggio degli script. I programmi in ns-2 sono scritti in OTcl, e i risultati delle simulazioni possono essere visualizzati utilizzando l'animatore di rete nam. In ns-2 non è possibile avviare una simulazione esclusivamente da C++ (cioè come programma main() senza alcun OTcl). Inoltre, alcuni componenti di ns-2 sono scritti in C++, mentre altri in OTcl. In ns-3, il simulatore è scritto interamente in C++ con collegamenti Python opzionali. Pertanto, gli script di simulazione possono essere scritti sia in C++ che in Python. Sono disponibili nuovi animatori e visualizzatori e continuano a essere sviluppati. Poiché ns-3 genera file di tracciamento pacchetti pcap, anche altre utility possono essere utilizzate per analizzare le tracce. In questa guida, ci concentreremo prima sugli script implementati in C++ e sull'interpretazione dei risultati attraverso l'analisi dei file di tracciamento.

Tuttavia, ci sono anche somiglianze (ad esempio, entrambi gli strumenti si basano su oggetti C++, parte del codice di ns-2 è stata portata in ns-3). Man mano che procediamo, cercheremo di evidenziare le differenze tra ns-2 e ns-3.

Una domanda che sentiamo frequentemente è: "Devo continuare a usare ns-2 o passare a ns-3?" Secondo l'autore, se l'utente non è legato a ns-2 in alcun modo (basato sul comfort personale e sulla conoscenza di ns-2, oppure su un modello di simulazione specifico disponibile solo in ns-2), con ns-3 sarà più produttivo per i seguenti motivi:

  • ns-3 è attivamente supportato con una mailing list degli utenti attiva e reattiva, mentre ns-2 è supportato solo superficialmente e non ha visto cambiamenti significativi nel suo albero principale di codice da oltre dieci anni.
  • ns-3 offre funzionalità non disponibili in ns-2, come un ambiente di esecuzione del codice di implementazione (che consente agli utenti di eseguire codice reale nel simulatore).
  • ns-3 offre un livello di astrazione di base inferiore rispetto a ns-2, consentendo una migliore corrispondenza con il modo in cui interagiscono i sistemi reali. Alcune limitazioni riscontrate in ns-2 (come il supporto corretto per diversi tipi di interfacce su un nodo) sono state risolte in ns-3.

Grazie alla sua lunga storia, ns-2 dispone di un set di moduli supportati più diversificato rispetto a ns-3. Tuttavia, ns-3 presenta modelli più dettagliati in diversi ambiti di ricerca popolari (inclusi complessi modelli LTE e WiFi), e il suo supporto per il codice di implementazione consente una vasta gamma di modelli ad alta precisione. Gli utenti potrebbero rimanere sorpresi nel scoprire che l'intero stack di rete Linux può essere incapsulato in un nodo ns-3 utilizzando il framework di esecuzione diretta del codice (DCE). I modelli di ns-2 possono talvolta essere portati su ns-3, specialmente se implementati in C++.

Se hai dei dubbi, un buon consiglio sarebbe di dare un'occhiata a entrambi gli emulatori (e ad altri emulatori), in particolare ai modelli disponibili per la tua ricerca, ma tieni presente che il tuo risultato potrebbe essere migliore utilizzando uno strumento che attualmente è attivamente in fase di sviluppo e supporto (ns-3).

1.3 Partecipazione al progetto

ns-3 è un simulatore scientifico-educativo per la comunità di ricerca. Si basa sui contributi attuali della comunità nello sviluppo di nuovi modelli, nella risoluzione dei problemi o nel supporto di quelli esistenti e nella condivisione dei risultati. Esiste una certa politica che, speriamo, incoraggerà le persone a contribuire a ns-3, come già fanno per ns-2:

Comprendiamo che anche se stai leggendo questo documento, potresti non pianificare di contribuire a questo progetto in questa fase. Ma vogliamo che tu sappia che il contributo è nello spirito del progetto e il tuo feedback, anche sulla tua esperienza iniziale con ns-3 (ad esempio, "questa sezione del manuale non era chiara..."), la segnalazione della documentazione obsoleta o i commenti nel codice, ecc., saranno molto apprezzati. Il modo preferito per inviare correzioni è fare un fork del https://www.gitlab.com/nsnam con le tue correzioni e creare una pull request, oppure aprire un ticket nel nostro tracker e aggiungere un patch.

1.4 Organizzazione della guida

Questa guida presume che i nuovi utenti possano iniziare a muoversi, ad esempio, seguendo questo percorso:

  • Provare a scaricare e compilare una copia;
  • Provare a eseguire alcuni esempi di programmi;
  • Osservare i risultati della simulazione e provare a modificarli.
    In definitiva, abbiamo cercato di organizzare l'esposizione in base a questi passaggi.

Capitolo 2

Fonti di informazione

2.1 Rete

Ci sono diverse risorse importanti di cui ogni utente di ns-3 dovrebbe essere a conoscenza. Il sito web principale è disponibile all'indirizzo: https://www.nsnam.org
e fornisce accesso alle informazioni di base sul sistema ns-3. La documentazione dettagliata è disponibile sul sito web principale all'indirizzo: https://www.nsnam.org/documentation/.

Nella stessa pagina web puoi anche trovare documenti relativi all'architettura del sistema.

Esiste una pagina wiki che integra il sito web principale di ns-3, che puoi trovare all'indirizzo: https://www.nsnam.org/wiki/.

Lì troverai risposte alle domande più frequenti per utenti e sviluppatori, oltre a guide per la risoluzione dei problemi, codice di terze parti, documenti, ecc.
Il codice sorgente può essere trovato e visualizzato su GitLab.com:
https://gitlab.com/nsnam/.

Nel repository con il nome ns-3-dev si trova l'attuale albero di sviluppo. Le versioni passate e i repository sperimentali degli sviluppatori del nucleo possono essere trovati anche su Mercurial nel vecchio sito del progetto all'indirizzo:
http://code.nsnam.org.

2.2 Git

I sistemi software complessi necessitano di un modo per gestire l'organizzazione e le modifiche al codice sorgente e alla documentazione. Ci sono molti modi per raggiungere questo obiettivo, e potresti aver sentito parlare di alcuni dei sistemi comunemente utilizzati a tal fine. Fino a poco tempo fa, il progetto ns-3 utilizzava Mercurial come sistema di gestione del codice sorgente, ma a dicembre 2018 abbiamo effettuato il passaggio a Git. Anche se non è necessario conoscere molto di Git per leggere questo manuale, ti incoraggiamo a familiarizzare con esso e ad utilizzarlo per accedere al codice sorgente. GitLab.com offre risorse per acquisire le competenze di base all'indirizzo: https://git-scm.com/book/ru/v2.

2.3 WAF

Dopo aver scaricato il codice sorgente sul tuo computer, per ottenere un programma funzionante dovrai compilarlo. Come nel caso della gestione del codice sorgente, ci sono molti strumenti disponibili per eseguire questa funzione. Probabilmente, il più noto di questi strumenti è make. Sebbene questo strumento sia il più conosciuto, va notato che risulta essere il più complesso da utilizzare in un sistema molto grande e configurabile. Questo ha portato allo sviluppo di molte alternative. Recentemente, sono stati sviluppati sistemi utilizzando il linguaggio Python.

Nel progetto ns-3 viene utilizzato il sistema di build Waf. Si tratta di una nuova generazione di sistemi di build basati su Python. Per costruire il sistema esistente ns-3, non avrai bisogno di conoscere Python.

Per coloro che sono interessati ai dettagli sull'uso di Waf, è disponibile un libro all'indirizzo:
https://waf.io/book/
e il codice attuale:
https://gitlab.com/ita1024/waf/.

2.4 Ambiente di sviluppo

Come già accennato, gli script in ns-3 vengono eseguiti in C++ o Python. La maggior parte dell'API di ns-3 è disponibile in Python, ma i modelli sono comunque scritti in C++. Questo manuale presuppone che tu sia familiare con la programmazione orientata agli oggetti in C++. Nel corso dell'illustrazione, dedicheremo del tempo a rivedere i concetti più avanzati e forse alcune caratteristiche del linguaggio che potrebbero risultare sconosciute, come le idiomie e i modelli di design. Non vogliamo che questo manuale si trasformi in un tutorial su C++, quindi ci aspettiamo una conoscenza di base del linguaggio. Ci sono numerose risorse riguardo a C++ disponibili online o in stampa.

Se sei alle prime armi con C++, prima di continuare, apprendi le basi del linguaggio utilizzando un manuale o un sito web dedicato all'insegnamento o a ricette già pronte. Ad esempio, uno come questo: https://github.com/ashtanyuk/CPP-2018.

Su Linux, il sistema ns-3 utilizza diversi componenti dagli strumenti del progetto GNU. Gli strumenti sono un insieme di strumenti di programmazione disponibili in questo ambiente software. Per una rapida panoramica di ciò che viene incluso negli strumenti GNU, vedi. http://en.wikipedia.org/wiki/GNU_toolchain.

Il simulatore ns-3 utilizza gcc, GNU binutils e gdb. Tuttavia, non utilizziamo né make né autotools degli strumenti GNU per costruire il progetto. Per queste funzioni utilizziamo Waf.

Su macOS viene utilizzato il set di strumenti Xcode. Agli utenti di ns-3 su Mac viene vivamente consigliato di installare Xcode e i pacchetti degli strumenti da linea di comando dall'Apple App Store, e per ulteriori informazioni, visitare la pagina wiki di installazione di ns-3: (https://www.nsnam.org/wiki/Installation).

In genere, l'autore di ns-3 lavora in ambienti Linux o Unix-like. Per coloro che lavorano su Windows, ci sono ambienti che simulano in vari gradi l'ambiente Linux. Per tali utenti, il progetto ns-3 in passato (ma non attualmente) supportava lo sviluppo in un ambiente Cygwin. Per dettagli sul download e informazioni aggiuntive su Cygwin e ns-3, visitare la pagina wiki di ns-3:
http://www.cygwin.com/.

MinGW non è attualmente ufficialmente supportato. Un'altra alternativa a Cygwin è l'installazione di un ambiente virtuale, come VMware server, dove installare Linux.

2.5 Programmazione dei socket

Negli esempi utilizzati in questa guida, ci concentreremo sulle funzionalità di base dell'API dei socket di Berkeley (Berkeley Sockets). Se sei alle prime armi con i socket, ti consigliamo di familiarizzare con l'API e con alcuni casi d'uso comuni. Per una buona panoramica sulla programmazione dei socket TCP/IP, ti suggeriamo di consultare: "TCP/IP Sockets in C", Donahoo e Calvert.

Esiste un sito web correlato che contiene la fonte degli esempi del libro, che puoi trovare all'indirizzo:
http://cs.baylor.edu/~donahoo/practical/CSockets/.

Se comprendi i primi quattro capitoli del libro (o per coloro che non hanno accesso a una copia del libro, i client e i server echo mostrati sul sito web nel link sopra), questo sarà sufficiente per comprendere il tutorial. Esiste un libro simile
"Multicast Sockets, Multicast Sockets", Makofske e Almeroth.

Tratta argomenti che potrebbero esserti utili se desideri studiare nel pacchetto esempi di multicast.

Continuazione: capitolo 3

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster