Manuale per il simulatore di rete ns-3. Capitoli 1,2

Questo articolo avvia una serie di pubblicazioni con la traduzione del libro di testo "ns-3 Tutorial Release ns-3.29" sul simulatore di rete ns-3.

Manuale per il simulatore di rete ns-3. Capitoli 1,2

Questo documento è la traduzione di un documento originale in inglese, scritto in reStructuredText per Sphinx e si trova nella directory doc/tutorial del codice sorgente di 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 primaria per il progetto ns-3 è disponibile in cinque formati:

Introduzione

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

L'obiettivo di questa guida è presentare ns-3 ai nuovi utenti in modo sistematico e strutturato. A volte, i principianti possono avere difficoltà a ottenere le informazioni necessarie e a convertirle in una modellazione efficace. In questa guida, implementeremo diversi esempi di modellazione, illustrando e spiegando nel contempo i concetti chiave e le caratteristiche.

Man mano che procediamo, presenteremo la documentazione completa su ns-3 e forniremo collegamenti al codice sorgente per coloro che sono interessati a una comprensione più approfondita del funzionamento del sistema.

Iniziamo con alcuni punti chiave:

  • ns-3 ha codice sorgente aperto, il progetto cerca di mantenere un ambiente aperto in cui i ricercatori possono 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 sviluppato per fornire una piattaforma aperta e scalabile per la modellazione delle reti, la ricerca sulle reti e l'istruzione. In breve, ns-3 offre modelli di come sono implementate e funzionano le reti di trasferimento pacchetti e fornisce all'utente un motore di simulazione per eseguire esperimenti di simulazione. Le ragioni per utilizzare ns-3 possono includere situazioni in cui è necessario condurre una ricerca difficile o impossibile da effettuare su un sistema reale, la possibilità di studiare il comportamento del sistema in un ambiente rigorosamente controllato e riproducibile, oltre a conoscere il funzionamento delle reti.

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

Esistono molti strumenti per la simulazione delle reti. Di seguito sono riportate alcune caratteristiche distintive di ns-3 rispetto ad altri strumenti.

  • ns-3 è progettato come una serie di librerie che possono essere combinate tra loro e con altre librerie software esterne. Mentre alcune piattaforme di simulazione forniscono agli utenti un ambiente integrato unico 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 di analisi dei dati e visualizzazione. Tuttavia, gli utenti sono chiamati a lavorare da riga di comando e con strumenti di sviluppo software 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 in grado di compilare codice per Linux, come Windows Subsystem per Linux o Cygwin. Visual Studio nativo per Windows non è attualmente supportato, anche se il sviluppatore sta 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 nella massima misura possibile sul forum degli utenti di ns-3 (ns-3-users@googlegroups.com).

1.2 Per gli utenti di ns-2

Per chi conosce ns-2 (un popolare strumento preceduto da ns-3), il cambiamento più evidente passando a ns-3 è il cambio del linguaggio di scripting. I programmi in ns-2 sono scritti in OTcl e i risultati della simulazione possono essere visualizzati utilizzando l'animatore di rete nam. In ns-2 non è possibile eseguire una simulazione esclusivamente da C++ (cioè come programma main() senza alcun OTcl). Inoltre, alcuni componenti di ns-2 sono scritti in C++, mentre altri sono in OTcl. In ns-3, il simulatore è scritto interamente in C++ con binding 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 dei pacchetti pcap, altre utility possono essere utilizzate anche 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.

Ma ci sono anche somiglianze (ad esempio, entrambi gli strumenti si basano su oggetti C++, parte del codice di ns-2 è stato portato in ns-3). Mentre esponiamo, cercheremo di mostrare le differenze tra ns-2 e ns-3.

La domanda che sentiamo spesso è: "Dovrei continuare a usare ns-2 o passare a ns-3?" Secondo l'autore, se l'utente non è legato in qualche modo a ns-2 (sulla base del comfort e della conoscenza personale di ns-2, o sulla base di un modello di simulazione specifico che è disponibile solo in ns-2), allora con ns-3 sarà più produttivo per i seguenti motivi:

  • ns-3 è attivamente supportato con una lista di distribuzione utenti attiva e reattiva, mentre ns-2 è supportato solo leggermente e non ha visto cambiamenti significativi nel suo albero di codice principale per oltre dieci anni.
  • ns-3 offre funzionalità non disponibili in ns-2, come l'ambiente di esecuzione del codice di implementazione (che consente agli utenti di eseguire codice di implementazione reale nel simulatore).
  • ns-3 fornisce un livello base di astrazione più basso rispetto a ns-2, consentendo di adattarsi meglio al modo in cui i sistemi reali interagiscono. Alcune limitazioni riscontrate in ns-2 (ad esempio, il supporto corretto di più tipi di interfacce su un nodo) sono state corrette in ns-3.

Grazie alla sua lunga storia, ns-2 ha un insieme di moduli supportati più variegato rispetto a ns-3. Tuttavia, ns-3 ha modelli più dettagliati in vari ambiti di ricerca popolari (inclusi complessi modelli LTE e WiFi); il suo supporto alla codifica di implementazione consente un'ampia varietà di modelli di alta precisione. Gli utenti potrebbero rimanere sorpresi nell'apprendere che l'intero stack di rete Linux può essere incorporato in un nodo ns-3 utilizzando il framework di esecuzione diretta del codice (DCE). I modelli di ns-2 possono a volte essere portati in ns-3, specialmente se sono stati implementati in C++.

Se hai dei dubbi, sarebbe una buona idea dare un'occhiata a entrambi gli emulatori (così come ad altri emulatori), in particolare ai modelli disponibili per la tua ricerca; ricorda però che il tuo risultato potrebbe essere migliore utilizzando uno strumento che attualmente è attivamente sviluppato e supportato (ns-3).

1.3 Partecipazione al progetto

ns-3 è un simulatore scientifico e educativo per la comunità di ricerca. Si baserà sul contributo attuale della comunità nello sviluppo di nuovi modelli, debug o supporto di quelli esistenti e nella condivisione dei risultati. Ci sono alcune politiche che, si spera, incoraggeranno le persone a contribuire a ns-3 come fanno con ns-2:

Comprendiamo che, anche se stai leggendo questo documento, potresti non pianificare di contribuire in questa fase. Ma vogliamo che tu sappia che contribuire è in linea con lo spirito del progetto e che il tuo feedback sarà prezioso anche riguardo alla tua prima esperienza con ns-3 (ad esempio, "questo paragrafo del tutorial non era chiaro..."). Ti invitiamo a segnalare documentazione obsoleta o a lasciare commenti nel codice, ecc. Il modo preferito per inviare correzioni è fare un fork su https://www.gitlab.com/nsnam con le tue correzioni e creare una richiesta di merge, oppure aprire una segnalazione sul nostro tracker e aggiungere un patch.

1.4 Organizzazione della guida

Questa guida presume che i nuovi utenti possano inizialmente seguire un percorso come il seguente:

  • Provare a scaricare e compilare una copia;
  • Provare a eseguire alcuni esempi di programmi;
  • Guarda il risultato della simulazione e prova ad adattarlo.
    Alla fine, abbiamo cercato di organizzare l'esposizione secondo questi passaggi.

Capitolo 2

Fonti di informazione

2.1 Rete

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

Nella stessa pagina web puoi trovare anche 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 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/.

Lì nello repository chiamato ns-3-dev si trova l'attuale albero di sviluppo. Le versioni passate e i repository sperimentali degli sviluppatori del kernel possono essere trovati anche sotto Mercurial sul 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 la modifica del codice sorgente e della documentazione. Ci sono molti modi per farlo, e potresti aver sentito parlare di alcuni dei sistemi comunemente utilizzati per questo. Fino a poco tempo fa, il progetto ns-3 utilizzava Mercurial come sistema di gestione del codice sorgente, ma a dicembre 2018, siamo passati a utilizzare Git. Anche se per leggere questa guida non è necessario avere molta familiarità con Git, ti consigliamo di prenderne confidenza e di usarlo 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 computer, per ottenere un programma pronto per l'uso, sarà necessario compilarlo. Come nel caso della gestione del codice sorgente, ci sono molti strumenti disponibili per eseguire questa funzione. Probabilmente, lo strumento più noto di questi è make. Anche se questo strumento è il più conosciuto, va notato che risulta essere il più complesso da utilizzare in un sistema molto grande e flessibile. Questo ha portato allo sviluppo di molte alternative. Recentemente, sono stati sviluppati diversi sistemi utilizzando il linguaggio Python.

Nel progetto ns-3 viene utilizzato il sistema di build Waf. È una delle nuove generazioni di sistemi di build basati su Python. Per compilare il sistema esistente ns-3, non è necessario 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 corrente:
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 abbia familiarità con la programmazione orientata agli oggetti in C++. Man mano che procederemo, dedicheremo del tempo a rivedere i concetti più avanzati e, possibilmente, caratteristiche poco familiari del linguaggio come le idiomi e i modelli di design. Non vogliamo che questo manuale diventi un testo di C++, quindi ci aspettiamo una conoscenza di base del linguaggio. Ci sono molte fonti di informazioni su C++ disponibili online o in forma cartacea.

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

Su Linux, il sistema ns-3 utilizza diversi componenti degli strumenti del progetto GNU. Gli strumenti sono un insieme di strumenti di programmazione disponibili in questo ambiente software. Per una panoramica rapida degli strumenti GNU consulta. http://en.wikipedia.org/wiki/GNU_toolchain.

Il simulatore ns-3 utilizza gcc, GNU binutils e gdb. Allo stesso tempo, non utilizziamo per la compilazione del progetto né make né autotools degli strumenti GNU. Per queste funzioni utilizziamo Waf.

In macOS viene utilizzato il set di strumenti Xcode. Gli utenti ns-3 su Mac sono fortemente invitati a installare Xcode e i pacchetti degli strumenti della riga di comando dall'Apple App Store e, per ulteriori informazioni, visitare la pagina wiki sull'installazione di ns-3: (https://www.nsnam.org/wiki/Installation).

Di solito, l'autore di ns-3 lavora in un ambiente Linux o Unix-like. Per coloro che lavorano su Windows, ci sono ambienti che simulano in varia misura l'ambiente Linux. Per questi utenti, il progetto ns-3 in passato (ma non attualmente) ha supportato lo sviluppo nell'ambiente Cygwin. Per ulteriori dettagli sul download e informazioni aggiuntive su Cygwin e ns-3, visitare la pagina wiki di ns-3:
http://www.cygwin.com/.

MinGW attualmente non è 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, utilizzeremo le funzionalità di base dell'API dei socket Berkeley (Berkeley Sockets). Se sei un principiante in materia di socket, ti consigliamo di familiarizzare con l'API e con alcuni casi d'uso comuni. Come buona panoramica sulla programmazione di socket TCP/IP, raccomandiamo l'uso di: "TCP/IP Sockets in C", Donahoo e Calvert.

Esiste un sito web correlato che contiene una raccolta di esempi tratti dal 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 al link sopra), questo sarà sufficiente per comprendere il tutorial. C'è un libro simile
"Multicast Sockets, Multicast Sockets", Makofske e Almeroth.

Esso copre il materiale che potresti avere bisogno di studiare nel pacchetto di esempi di multicast.

Continua: 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