Escolar Documentos
Profissional Documentos
Cultura Documentos
Apresentação
Conforme vimos na aula passada, uma das opções disponíveis para testar, o funcionamento de uma rede é a
virtualização. Dentre as ferramentas de virtualização disponíveis temos o Mininet que emula o funcionamento de uma
rede, sendo útil para desenvolvimento, ensino e pesquisa. Com ele, podemos criar uma rede virtual, estudar o
funcionamento de componentes e protocolos.
Veremos, nesta aula, os componentes de uma topologia mínima entregue pelo Mininet, assim como seus principais
comandos e sua integração com outras ferramentas, como, por exemplo, o Wireshark ou tshark. O Wireshark é outra
ferramenta essencial quando desejamos encontrar a causa de algum erro (troubleshooting).
Nossa aula está dividida em partes dos comandos do Mininet, para facilitar o entendimento.
Objetivos
Listar os comandos básicos do Mininet;
Parte 1
Como estudamos, o Mininet cria, em pouco tempo, uma rede virtual que executa um kernel, switch e código de alguma
aplicação, em uma única máquina (VM ou nuvem).
Com ele, você pode interagir facilmente com sua rede usando seu CLI (Command Line Interface) ou API (Application
Programming Interface), personalizá-la, compartilhá-la com outras pessoas ou implantá-la em hardware real.
Além disso, ele é também uma ótima maneira de desenvolver, compartilhar e experimentar sistemas OpenFlow e SDN.
Neste passo a passo, veremos alguns comandos do Mininet, bem como seu uso típico em conjunto com a ferramenta
Wireshark, um analizador de pacotes.
Atenção
Antes de iniciarmos, apresentaremos algumas noções básicas. Primeiro, uma nota sobre a sintaxe de comandos que estão
relacionadas ao espaço de usuário, root (administrador) e ao Mininet:
• $ precede os comandos do Linux que devem ser digitados no prompt como usuário.
• mininet> precede comandos Mininet que devem ser digitados na CLI do Mininet.
• # precede os comandos do Linux que devem ser digitados em um prompt como root.
Além disso, para facilitar, você deve utilizar algum programa que possibilite acesso remoto à VM. No Linux, você pode usar o
ssh enquanto no Windows você pode utilizar o programa mobaxterm 1 .
Depois, devemos iniciar a VM pelo virtualbox (basta selecionar a VM no lado esquerdo e ir no botão Iniciar na parte superior), e
nos logarmos com: mininet/mininet (login/senha).
Na saída do comando, você verá o endereço IP da interface eth0. Este endereço você utilizará no mobaxterm ou ssh para
realizar o acesso remoto à VM.
Na Figura 7.1, temos a saída do comando ifcon g relacionado à interface eth0. Como podemos ver, temos, neste caso, o
endereço IP associado a ela: 192.168.56.101.
Na Figura 7.2, temos a tela depois de abrimos o mobaxterm e irmos em “Start local terminal”, no prompt. Após, devemos entrar
com o comando: ssh mininet@192.168.56.101.
A partir deste ponto, você pode optar em utilizar a VM via tela do Virtualbox ou remotamente. Sugerimos utilizar remotamente
devido à interface ser mais agradável.
Comentário
Neste passo a passo, seguiremos a documentação encontrada em Mininet em conjunto com os vídeos de David Mahler postados
no YouTube.
Interagindo com estações (hosts) e switches
Conforme indicado na Figura 7.3, para iniciarmos o Mininet, com uma topologia mínima, devemos utilizar o comando mn.
Atenção
Antes do mn, temos o comando sudo, um comando do Linux que permite a alguns usuários executarem um comando com
privilégio de root. Caso já estivéssemos como root (prompt #), rodaríamos apenas o mn para executarmos o Mininet.
Ao rodarmos o Mininet sem nenhum parâmetro, ele iniciará com a topologia chamada mínima, que inclui um comutador
OpenFlow conectado a dois hosts, além do controlador OpenFlow, conforme Figura 7.5.
Figura 7.5 – Topologia mínima gerada pelo Mininet [Mahler 2013].
Depois de executado, o comando mn estará operando na VM. Além disso, temos também os links entre (h1, s1) e (h2, s1).
Atenção
O controlador não necessariamente precisa estar contido na VM, ele pode ser externo à ela.
Para mostrar quais nodes (componentes) temos, usamos o comando abaixo. Neste caso, deverá listar: c0, h1, h2 e s1, que são
os componentes (nodes) que possuímos na nossa topologia.
Esse comando listará os enlaces dos nodes, além de informar qual interface está associada a quem.
Exemplo
Por exemplo, a linha h1 h1--eth0:s1--eth1 está indicando que a interface eth0 de h1 está conectada à interface eth1 de s1.
Mais informações
Mais informações
Teste de conectividade entre hosts
Para veri carmos a conectividade entre hosts, podemos usar o comando ping.
Por exemplo, para testarmos a conectividade entre h1 e h2: mininet> h1 ping -c 3 h2.
A parte do comando “-c 3” está indicando que o comando ping enviará 3 pacotes de h1 para h2.
Após a execução do comando, você verá algumas informações do ping, como o ip de h2 (10.0.0.2).
Teremos uma linha para cada pacote com suas informações relacionadas.
Dentre as informações em cada linha, temos uma que especi ca o tempo
(time) decorrido.
Se olharmos a Figura 7.8 e nos concentrarmos no tempo decorrido dos 3 pacotes, veremos que o tempo do primeiro pacote é
maior do que o tempo dos outros pacotes.
Esse comando cria uma topologia mínima, inicia o controlador OpenFlow, executa um teste de ping entre os pares e depois
destrói a topologia e o controlador.
Outro teste útil é iperf (este teste demora cerca de 10 segundos para completar): $ sudo mn --test iperf.
O iperf é uma ferramenta amplamente usada para medição e ajuste de desempenho de rede. Ele tem a funcionalidade de cliente e servidor e
pode criar fluxos de dados para medir a taxa de transferência entre as duas extremidades em uma ou ambas as direções.
Esse comando criou a mesma topologia mínima, executou um servidor iperf em um host, executou um cliente iperf no segundo
host e analisou a largura de banda obtida entre eles, ou seja, a taxa de transferência de dados entre os dois hosts.
Exemplo
Por exemplo, para veri car a conectividade (ping) de todos os pares com um comutador e três hosts, execute o teste: $ sudo mn -
-test pingall --topo single,3.
Pelas mensagens na tela, podemos ver que foram criados três hosts ligados a um switch. E, depois disso, realizado o teste de
conectividade entre eles.
Outro exemplo, com uma topologia linear (em que cada switch tem um host e todos os switches se conectam em linha):
$ sudo mn - test pingall --topo linear,4.
Topologias personalizadas também podem ser facilmente de nidas, usando uma API simples do Python.
Um exemplo é fornecido em: custom/topo-2sw-2host.py. Este exemplo conecta dois switches diretamente, com um único host
de cada switch.
Quando um arquivo Mininet personalizado é fornecido, ele pode adicionar novas topologias, tipos de switch e testes à linha de
comando.
Exemplo
Neste comando, criamos um link com banda de 10 Mbps e atraso (delay) de 10ms. E depois realizamos um ping de 10 pacotes
de h1 para h2.
Se o atraso de cada link é de 10ms, o tempo de ida e volta (RTT) deve ser de 40ms, pois o ICMP atravessa dois links (um para o
comutador, um para o destino) e a resposta ICMP passa por dois links.
Você pode constatar estes valores no tempo médio de ping dos 10 pacotes.
Também é possível personalizar cada link usando a API Python do Mininet, mas, por enquanto, continuemos com o passo a
passo.
Ajuste de verbosidade
O Mininet tem um nível de detalhamento padrão que imprime o que Mininet está fazendo durante a inicialização e
desmontagem.
Atenção
$ sudo mn -v debug
...
mininet> exit
Por padrão, os hosts são colocados em seu próprio namespace, enquanto os switches e o controlador estão no namespace
raiz.
Para colocar os switches em seu próprio namespace, passe a opção “—innamespace”, conforme abaixo: $ sudo mn --
innamespace --switch user.
Em vez de usar o loopback, os switches conversarão com o controlador por meio de uma conexão de controle em ponte
(bridge de controle) separada. Por si só, essa opção não é muito útil, mas fornece um exemplo de como isolar switches
diferentes
Comentário
Como observado no início, este passo a passo pressupõe que você esteja usando uma Mininet VM, que inclui tudo o
que você precisa, ou uma instalação nativa com todas as ferramentas associadas, incluindo o controlador de
referência, que faz parte da referência do OpenFlow.
Um exemplo que pode ser particularmente útil executa um daemon SSH em cada host: $ sudo
~/mininet/examples/sshd.py.
De outro terminal, você pode dar ssh em qualquer host e executar comandos interativos:
$ ssh 10.0.0.1
$ ping 10.0.0.2
...
$ quit
Além disso, vimos um exemplo de captura de pacotes OpenFlow com o uso do Wireshark. Outra ferramenta que pode ser
usada em ambiente real para solução de problemas de rede.
Atividade
1. Sobre o Wireshark é correto a rmar que:
a) $ mininet
b) $ sudo mininet
c) $ sudo mn
d) # mininet
e) # sudo mininet
4. Em uma topologia mínima que acaba de ser gerada pelo Mininet, temos tempos de ping diferentes para o primeiro pacote e
os demais. Por que isso ocorre apenas para o primeiro pacote?
5. Não é exemplo de topologia que podemos passar para o Mininet pelo comando –topo:
a) simple
b) minimal
c) linear
d) tree
e) torus
a) top, ls e arp
b) nodes, pingall, links, net
c) exit, quit, net e ls
d) ports, sh, xterm e arp
e) iperf, net, dump e dir.
Notas
mobaxterm 1
A instalação do mobaxterm é simples, por isso não será apresentada aqui. Basta ir a um site de buscas e pesquisar por
mobaxterm, depois baixá-lo e instá-lo.
Referências
MININET.ORG. Mininet - An Instant Virtual Network on your Laptop (or other PC). Disponível em: //mininet.org. Acesso em: 12
set. 2019.
Próxima aula
Estudos de casos utilizando o Mininet.
Explore mais