Você está na página 1de 14

Redes De nidas por Software

Aula 7: Mininet e Wireshark – comandos básicos

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;

Descrever utilidades do uso do Wireshark.

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.

Em cada caso, você deve digitar apenas o comando à direita do prompt.

Assumimos que o seu sistema básico é a Mininet VM, ou uma instalação


nativa do Ubuntu com todas as ferramentas OpenFlow e Mininet instaladas,
conforme recomendado na unidade anterior.

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).

No terminal da VM você deverá digitar: $ sudo ifcon g.

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.

 Figura 7.1 – Saída do comando ifconfig.

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.

Este endereço IP deve ser utilizado na ferramenta de acesso remoto.


 Figura 7.2 – Acesso remoto à VM através do mobaxterm.

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.

Ou seja, devemos acessar a VM no ip 192.168.56.101 com o usuário


mininet. Lembre-se que, se este endereço IP for diferente para você, basta
entrar com o IP relacionado à saída do ifcon g, como mostrado
anteriormente).

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.

 Figura 7.3 – CLI para iniciar o Mininet [www.mininet.org].

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.

Assim, pelo terminal do mobaxterm, faremos: $ sudo mn

 Figura 7.4 – Iniciando o Mininet com topologia mínima.

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].

Assim, teremos quatro compontes:

• 2 hosts (h1 e h2).


• 1 comutador (s1).
• 1 controlador básico (c0).

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.

No ambiente do Mininet (mininet>), você pode excutar os comandos CLI:

Para listar os comandos de ajuda: mininet> help.

 Figura 7.6 – Saída do comando help do Mininet.

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.

Para mostrar os enlaces (links) existentes: mininet> net.

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

 Clique no botão acima.

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.

 Figura 7.8 – Teste de conectividade entre h1 e h2.

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.

 Por que isso ocorre?

 Clique no botão acima.

Por que isso ocorre?

Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online


Parte 2
Você não precisa estar no CLI do Mininet para executar seus comandos. O Mininet também pode ser usado de forma
autocontida.
Execute o comando abaixo (note que estamos fora da CLI mininet>):
$ sudo mn --test pingpair.

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.

Alterando o tamanho e tipo da topologia


Na topologia mínima, temos um único comutador conectado a dois hosts. Mas você pode alterar isso para uma topologia
diferente com o parâmetro “—topo” e passar informações para a criação dessa nova topologia.

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.

Na linha Adding links podemos ver a conexão dos switches.


 Figura 7.13 – Exemplo de topologia do tipo linear no Mininet [Mahler 2013].

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

$ sudo mn --custom ~/mininet/custom/topo-2sw-2host.py --topo mytopo --test pingall


Parâmetros do link
O Mininet permite que você de na os parâmetros do link, e estes podem ser atribuídos automaticamente a partir da linha de
comando:

$ sudo mn --link tc, bw=10,delay=10ms


>mininet> iperf
...
mininet> h1 ping -c10 h2

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

Compare isso à saída de depuração completa com o parâmetro “-v”:

$ sudo mn -v debug
...
mininet> exit

Muitos detalhes extras serão impressos.


Mininet benchmark
Para registrar a hora de con gurar e derrubar uma topologia, use o teste "none": $ sudo mn --test none.

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

 Exemplos da API do Python

 Clique no botão acima.

Exemplos da API do Python


O diretório de examples (~/mininet/examples) do Mininet inclui exemplos de como usar a API do Mininet em Python,
bem como códigos potencialmente úteis que não foram integrados à base do código principal.

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

Entraremos em mais detalhes da API do Python com o Mininet na próxima unidade.

Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online


Conclusão
Estudamos aqui alguns comandos básicos do Mininet que é uma ferramenta importante para aprendizado e pesquisa.

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.

Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online

Atividade
1. Sobre o Wireshark é correto a rmar que:

a) Trata-se de uma ferramenta de análise de equipamentos.


b) Trata-se de uma ferramenta de rede para análise de tráfego.
c) Trata-se de um emulador de pacotes.
d) Trata-se de um software para gerar e pacotes.
e) Pode ser utilizado apenas em SO Linux.

2. Quando iniciamos o Mininet com a topologia mínima temos:

a) Um switch, um host e um controlador.


b) Dois hosts e um switch.
c) Um switch e dois hosts, onde um deles age como o controlador.
d) Um switch, dois hosts e um controlador.
e) Apenas um switch e um controlador.

3.Com qual comando iniciamos o Mininet?

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?

a) O tempo de ping é o praticamente o mesmo, logo não se aplica tal afirmação.


b) Pois estamos em um ambiente SDN e não podemos prever o seu comportamento.
c) Pois estamos em um ambiente emulado que pode incluir estas discrepâncias.
d) Pois estamos em um ambiente SDN que ainda não tem informações na tabela de fluxo, assim, quando o primeiro pacote do ping
chega, o switch, deve consultar o controlador para saber como proceder.
e) Trata-se de um erro do Mininet.

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

6. São exemplos de comandos apresentados pelo help do Mininet:

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

Assista ao vídeo Introduction to Mininet.

Você também pode gostar