Este artigo inicia uma série de publicações traduzindo o manual "" sobre o simulador de redes ns-3.

Este documento é uma tradução do documento original em inglês, que foi escrito em para e está armazenado no diretório doc/tutorial do código-fonte do ns-3.
1 Prefácio
1.1 Sobre o ns-3
1.2 Para usuários do ns-2
1.3 Participação no projeto
1.4 Organização do guia
2 Fontes de informação
2.1 Rede
2.2 Git
2.3 WAF
2.4 Ambiente de desenvolvimento
2.5 Programação de sockets
A documentação primária para o projeto ns-3 está disponível em cinco formatos:
- Documentação da API do simulador: ns-3 .
- Tutorial, guia e biblioteca de modelos para e .
- ns-3.
Capítulo 1
Prefácio
O simulador ns-3 é um simulador de rede de eventos discretos, destinado principalmente à pesquisa e uso educacional. O projeto que desenvolve o ns-3 começou em 2006 e é um projeto de código aberto.
O objetivo deste guia é apresentar o ns-3 a novos usuários de forma sistemática e estruturada. Às vezes, é difícil para um iniciante obter as informações necessárias e transformá-las em modelagem funcional. Neste guia, implementaremos vários exemplos de modelagem, explicando e mostrando os conceitos e características-chave ao longo do caminho.
À medida que progredimos, apresentaremos a documentação completa do ns-3 e forneceremos links para o código-fonte para aqueles que estão interessados em entender mais profundamente o funcionamento do sistema.
No início, é importante destacar alguns pontos-chave:
- O ns-3 possui código aberto e o projeto busca manter um ambiente aberto, onde pesquisadores possam contribuir e compartilhar suas implementações.
- O ns-3 não é uma extensão retrocompatível do ns-2; é um novo simulador. Ambos os simuladores são escritos em C++, mas o ns-3 é um novo simulador que não suporta as interfaces da API do ns-2.
1.1 Sobre o ns-3
O simulador ns-3 foi desenvolvido para oferecer uma plataforma aberta e expansível para modelagem de redes, pesquisa de redes e educação. Em resumo, o ns-3 fornece modelos de como as redes de pacotes são implementadas e funcionam, e dá ao usuário um mecanismo de simulação para realizar experimentos de simulação. As razões para usar o ns-3 podem incluir situações em que é necessário conduzir uma pesquisa que é difícil ou impossível de realizar em um sistema real, a capacidade de estudar o comportamento do sistema em um ambiente rigorosamente controlado, replicável, além de entender como as redes funcionam.
Os usuários perceberão que o conjunto de modelos fornecido no ns-3 é focado na modelagem do funcionamento de protocolos da Internet e redes, mas o ns-3 não está limitado apenas a sistemas de internet, alguns usuários utilizam o ns-3 para modelar sistemas que não são baseados em tecnologias da Internet.
Existem muitas ferramentas de modelagem de redes. Abaixo estão algumas características distintivas do ns-3 em comparação com outras ferramentas.
- O ns-3 foi projetado como um conjunto de bibliotecas que podem ser integradas entre si, bem como com outras bibliotecas de software externas. Enquanto algumas plataformas de modelagem oferecem aos usuários um ambiente de integração único com uma interface gráfica que controla todo o trabalho, o ns-3 é mais modular nesse aspecto. Com o ns-3, pode-se utilizar vários animadores externos, ferramentas de análise de dados e visualização. No entanto, os usuários devem esperar trabalhar na linha de comando e com ferramentas de desenvolvimento de software C++ e/ou Python.
- O ns-3 é amplamente utilizado em sistemas Linux ou macOS, embora exista suporte para sistemas BSD, bem como para plataformas Windows capazes de compilar código para Linux, como o Windows Subsystem for Linux ou Cygwin. O Visual Studio nativo para Windows não é suportado no momento, embora os desenvolvedores estejam trabalhando para implementar essa funcionalidade. Usuários do Windows também podem utilizar uma máquina virtual com Linux.
- O ns-3 não é um produto oficialmente suportado por qualquer empresa. O suporte ao ns-3 é oferecido com máximo empenho no fórum de usuários do ns-3 (ns-3-users@googlegroups.com).
1.2 Para usuários do ns-2
Para aqueles que estão familiarizados com o ns-2 (uma ferramenta popular anterior ao ns-3), a mudança mais visível ao migrar para o ns-3 é a troca de linguagem de script. Os programas no ns-2 são escritos em OTcl, e os resultados da simulação podem ser visualizados usando o animador de redes nam. No ns-2, não é possível executar uma simulação exclusivamente em C++ (ou seja, como um programa main() sem qualquer OTcl). Além disso, alguns componentes do ns-2 são escritos em C++, enquanto outros são em OTcl. No ns-3, o simulador é completamente escrito em C++ com bindings opcionais em Python. Portanto, os scripts de simulação podem ser escritos tanto em C++ quanto em Python. Novos animadores e visualizadores estão disponíveis e continuam a ser desenvolvidos. Como o ns-3 gera arquivos de rastreamento de pacotes pcap, outras utilidades também podem ser usadas para analisar os rastros. Neste guia, vamos nos concentrar inicialmente em scripts implementados em C++ e na interpretação de resultados através da análise de arquivos de rastreamento.
Mas também existem semelhanças (por exemplo, ambas as ferramentas são baseadas em objetos C++, parte do código do ns-2 foi portado para o ns-3). Ao longo da exposição, tentaremos mostrar as diferenças entre ns-2 e ns-3.
Uma pergunta que ouvimos frequentemente é: "Devo continuar a usar o ns-2 ou migrar para o ns-3?" Na opinião do autor, se o usuário não estiver de forma alguma vinculado ao ns-2 (baseando-se no conforto pessoal existente e no conhecimento do ns-2, ou em um modelo de simulação específico que esteja disponível apenas no ns-2), ele será mais produtivo com o ns-3 pelos seguintes motivos:
- O ns-3 é ativamente mantido, com uma lista de discussão de usuários ativa e receptiva, enquanto o ns-2 é mantido apenas de forma esporádica e não viu mudanças significativas em sua árvore de código principal há mais de dez anos.
- O ns-3 oferece recursos que não estão disponíveis no ns-2, como um ambiente de execução de código de implementação (permitindo que os usuários executem código de implementação real dentro do simulador).
- O ns-3 proporciona um nível básico de abstração mais baixo em comparação ao ns-2, permitindo uma melhor correspondência ao modo como os sistemas reais interagem. Algumas limitações encontradas no ns-2 (como suporte adequado a múltiplos tipos de interfaces em um nó) foram corrigidas no ns-3.
Devido à sua longa história, o ns-2 possui um conjunto de módulos suportados mais diversificado do que o ns-3. No entanto, o ns-3 tem modelos mais detalhados em várias áreas populares de pesquisa (incluindo modelos complexos de LTE e WiFi), e seu suporte à implementação de código permite uma ampla gama de modelos de alta precisão. Os usuários podem se surpreender ao descobrir que toda a pilha de rede do Linux pode ser encapsulada em um nó ns-3 usando a estrutura de execução de código direto (DCE). Modelos do ns-2 podem às vezes ser portados para o ns-3, especialmente se foram implementados em C++.
Se você estiver em dúvida, uma boa recomendação seria olhar para ambos os simuladores (e também para outros simuladores), em particular para os modelos disponíveis para sua pesquisa, mas tenha em mente que seu resultado pode ser melhor ao usar uma ferramenta que atualmente está em desenvolvimento ativo e suporte (ns-3).
1.3 Participação no projeto
O ns-3 é um simulador educacional e científico para a comunidade de pesquisa. Ele se baseará nas contribuições atuais da comunidade no desenvolvimento de novos modelos, na depuração ou no suporte aos existentes e na troca de resultados. Existe uma certa política que, esperamos, incentivará as pessoas a contribuir com o ns-3, assim como fazem para o ns-2:
- Licenciamento de código aberto baseado na compatibilidade com a licença GNU GPLv2.
- wiki.
- Página , semelhante à famosa página do ns-2.
- Uso do GitLab.com, incluindo o sistema de rastreamento de erros:
Entendemos que, mesmo que você esteja lendo este documento, pode não estar planejando contribuir neste momento. Mas queremos que você saiba que contribuir está alinhado com o espírito do projeto e que valorizaremos seu feedback, mesmo sobre sua experiência inicial com o ns-3 (por exemplo, "esta seção do tutorial não estava clara..."), relatórios sobre documentação desatualizada ou comentários no código, etc. O método preferido para enviar correções é fazer um fork com suas correções e criar um pull request, ou criar um pedido em nosso rastreador e adicionar um patch. Este guia pressupõe que novos usuários podem, inicialmente, seguir um caminho como este:
1.4 Organização do guia
Tentar baixar e compilar uma cópia;
- Tentar executar alguns exemplos de programas;
- Tente executar várias amostras de programas;
- Ver o resultado da simulação e tentar ajustá-lo.
No final, tentamos organizar a apresentação de acordo com essas etapas.
Capítulo 2
Fontes de informação
2.1 Rede
Existem vários recursos importantes que todo usuário do ns-3 deve conhecer. O site principal está localizado em:
e fornece acesso a informações básicas sobre o sistema ns-3. A documentação detalhada está disponível por meio do site principal em: .
Nesta mesma página da web, você também pode encontrar documentos relacionados à arquitetura do sistema.
Há uma página na wiki que complementa o site principal do ns-3, que você encontrará em: .
Lá você encontrará respostas para perguntas frequentes de usuários e desenvolvedores, além de guias de solução de problemas, código de terceiros, documentos, etc.
O código fonte pode ser encontrado e visualizado no GitLab.com:
.
Lá também, no repositório chamado ns-3-dev encontra-se a árvore de desenvolvimento atual. Versões anteriores e repositórios experimentais dos desenvolvedores do núcleo também podem ser encontrados sob Mercurial no antigo site do projeto em:
.
2.2 Git
Sistemas de software complexos precisam de algum método para gerenciar a organização e a alteração do código fonte e da documentação. Existem muitas maneiras de alcançar isso, e você pode ter ouvido sobre alguns dos sistemas comumente usados para isso. Até recentemente, o projeto ns-3 utilizava Mercurial como seu sistema de controle de versão, mas em dezembro de 2018, mudamos para usar o Git. Embora você não precise saber muito sobre o Git para ler este manual, recomendamos que você se familiarize com ele e o use para acessar o código fonte. O GitLab.com oferece recursos para dominar as habilidades básicas em: .
2.3 WAF
Depois de baixar o código-fonte para o seu computador, para obter um programa pronto para uso, você precisará compilá-lo. Assim como na gestão de código-fonte, há muitas ferramentas disponíveis para executar essa função. Provavelmente, a mais conhecida dessas ferramentas é o make. Embora essa ferramenta seja a mais famosa, deve-se notar que ela se torna a mais complicada de usar em um sistema muito grande e flexivelmente configurável. Isso levou ao desenvolvimento de várias alternativas. Recentemente, sistemas foram desenvolvidos utilizando a linguagem Python.
No projeto ns-3, é utilizada a sistema de construção Waf. É uma geração nova de sistemas de construção baseados em Python. Para compilar o sistema existente ns-3, você não precisará conhecer Python.
Para aqueles que estão interessados nos detalhes de uso do Waf, existe um livro disponível em:
e o código atual:
.
2.4 Ambiente de desenvolvimento
Como mencionado acima, os scripts em ns-3 são executados em C++ ou Python. A maior parte da API do ns-3 está disponível em Python, mas os modelos são escritos em C++. Este guia presume que você está familiarizado com programação orientada a objetos em C++. À medida que avançamos, dedicaremos um tempo para revisar os conceitos mais avançados e, possivelmente, aspectos desconhecidos da linguagem, como idiomas e padrões de design. Não queremos que este guia se torne um manual de C++, portanto, esperamos um conhecimento básico da linguagem. Existem muitas fontes de informação sobre C++ disponíveis online ou em impressos.
Se você é iniciante em C++, antes de continuar, aprenda o básico da linguagem usando um manual ou um site dedicado a tutoriais ou receitas prontas. Por exemplo, como este: .
No Linux, o sistema ns-3 utiliza vários componentes da ferramenta do projeto GNU. A ferramenta é um conjunto de ferramentas de programação disponíveis nesse ambiente de software. Para uma visão rápida do que está incluído nas ferramentas GNU, veja. .
O simulador ns-3 utiliza gcc, GNU binutils e gdb. Entretanto, não usamos make nem autotools para compilar o projeto. Para essas funções, utilizamos o Waf.
No macOS, é utilizado um conjunto de ferramentas Xcode. Os usuários do ns-3 no Mac são fortemente recomendados a instalar o Xcode e os pacotes de ferramentas de linha de comando da Apple App Store, além disso, para obter mais informações, consulte a página da wiki sobre a instalação do ns-3: ().
Normalmente, o autor do ns-3 trabalha em um ambiente Linux ou Unix-like. Para aqueles que trabalham no Windows, existem ambientes que imitam o ambiente Linux em diferentes graus. Para esses usuários, o projeto ns-3 no passado (mas não atualmente) suportou o desenvolvimento no ambiente Cygwin. Para mais detalhes sobre download e informações adicionais sobre Cygwin e ns-3, consulte a página da wiki do ns-3:
.
Atualmente, o MinGW não é oficialmente suportado. Outra alternativa ao Cygwin é a instalação de um ambiente virtual, como o VMware server, onde você pode instalar o Linux.
2.5 Programação de sockets
Nos exemplos usados neste guia, utilizaremos as capacidades básicas da API de Sockets de Berkeley (Berkeley Sockets). Se você é novo em sockets, recomendamos que você se familiarize com a API e alguns casos de uso comuns. Como uma boa visão geral da programação de sockets TCP/IP, recomendamos usar: "TCP/IP Sockets in C", Donahoo e Calvert.
Existem um site relacionado que contém a fonte de exemplos do livro, que você pode encontrar em:
.
Se você entender os primeiros quatro capítulos do livro (ou para aqueles que não têm acesso a uma cópia do livro, os clientes e servidores de eco mostrados no site no link acima), isso será suficiente para entender o tutorial. Existe um livro semelhante
"Multicast Sockets, Multicast Sockets", Makofske e Almeroth.
Ele cobre o material que você pode precisar se quiser estudar os exemplos de multicast no pacote.
Continuação:
Fonte: habr.com
