Projeto de Desenvolvimento em OpenFlow



Documentos relacionados
L A B O RATÓRIO DE REDES

Sistema Operacional Unidade 12 Comandos de Rede e Acesso Remoto

Online Help StruxureWare Data Center Expert

Google Drive. Passos. Configurando o Google Drive

LICENCIAMENTO V14 USANDO REPRISE LICENSE MANAGER

TUTORIAL VMWARE WORKSTATION 8. Aprenda a instalar e configurar corretamente uma máquina virtual utilizando VMware Workstation com este tutorial

1 Instalando o VirtualBox no Windows

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

MANUAL DE INSTALAÇÃO 1) ORACLE VIRTUALBOX ; 2) MICROSOFT WINDOWS ; 3) SUMÁRIOS GENEPLUS.

Lógica de Programação

Tutorial: Instalando Linux Educacional em uma maquina virtual

1- Requisitos mínimos. 2- Instalando o Acesso Full. 3- Iniciando o Acesso Full pela primeira vez

UNIVERSIDADE FEDERAL DE GOIÁS CERCOMP (CENTRO DE RECURSOS COMPUTACIONAIS) TUTORIAL DE USO DO WEBMAIL - UFG

INDICE 1. INTRODUÇÃO CONFIGURAÇÃO MÍNIMA INSTALAÇÃO INTERLIGAÇÃO DO SISTEMA ALGUNS RECURSOS SERVIDOR BAM...

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

Controle de congestionamento em TCP

STK (Start Kit DARUMA) Driver Genérico Somente Texto para a impressora DR700 ETHERNET

Procedimentos para Reinstalação do Sisloc

2 de maio de Remote Scan

Certifique-se de que você possui todas as informações necessárias e equipamento em mãos antes de iniciar a instalação.

Manual de Instalação Linux Comunicações - Servidor. Centro de Computação Científica e Software Livre - C3SL

cio Roteamento Linux

Manual Instalação Pedido Eletrônico

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

Motorola Phone Tools. Início Rápido

Wireshark Lab: TCP. Versão KUROSE, J.F & ROSS, K. W. Todos os direitos reservados 2011 BATISTA, O. M. N. Tradução e adaptação para Wireshark.

MINISTÉRIO DA EDUCAÇÃO

Configuração do Servidor DHCP no Windows Server 2003

Curso de extensão em Administração de sistemas GNU/Linux: redes e serviços

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

EN3611 Segurança de Redes Prof. João Henrique Kleinschmidt Prática Wireshark Sniffer de rede

STK (Start Kit DARUMA) Utilizando conversor Serial/Ethernet com Mini-Impressora DR600/DR700.

Lazarus pelo SVN Linux/Windows

Sistema de Instalação e Criação da Estrutura do Banco de Dados MANUAL DO INSTALADOR. Julho/2007. Ministério da saúde

Manual Captura S_Line

Configurando DDNS no Stand Alone

Configurando um Grupo Doméstico e Compartilhando arquivos no Windows 7

Instruções de instalação e remoção para os drivers de impressora PostScript e PCL do Windows Versão 8

Manual de Instalação. Windows XP. Desenvolvedores: Patrick Duarte, Rodrigo dos Santos. Setembro de 2014.

MANUAL DO ANIMAIL Terti Software

Google Drive: Acesse e organize seus arquivos

Laboratório - Exploração do FTP

MANUAL DE INSTALAÇÃO LUZ DO SABER

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

LABORATÓRIO WIRESHARK: DNS

Tutorial Instalação Dual Boot Ubuntu e Windows XP Virtualização com VirtualBox

1. Introdução. 2. Conteúdo da embalagem

Guia do usuário do PrintMe Mobile 3.0

1 Realizando testes de conexão

ROTEIRO: IMPLANTANDO O SISTEMA OPERACIONAL LINUX. Introdução: FERRAMENTAS. Abaixo segue relação de aplicativos utilizados para realizar este roteiro:

Atualizaça o do Maker

Instalando o Debian em modo texto

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

Roteiro 3: Sistemas Linux arquivos e diretórios

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Procedimentos para Configuração de Redirecionamento de Portas

TUTORIAL DE INSTALAÇÃO DO PFSENSE E UMA REDE INTERNA NO VIRTUALBOX

É o UniNorte facilitando a vida de nossos docentes e discentes.

BACKUP ONLINE PASSOS PARA CONFIGURAÇÃO INICIAL DO PRODUTO

UM PBX GENUINAMENTE BRASILEIRO

Como instalar os recursos adicionais para convidados e acesso aos aplicativos

Manual de Instalação do Agente Citsmart

DarkStat para BrazilFW

Sumário INTRODUÇÃO Acesso ao Ambiente do Aluno Ferramentas e Configurações Ver Perfil Modificar Perfil...

USB Creator. USBCreator. 1. Requerimentos. Página Imutável Informação Anexos Mais Acções. Ubuntu Brazil Entrar Help

Laboratório - Visualização das tabelas de roteamento do host

Objetivos: i) Verificar o impacto de loops em redes locais ii) Configurar o protocolo STP para remover loops da rede

1. Capturando pacotes a partir da execução do traceroute

TeamViewer 9 Manual Wake-on-LAN

Aloque 1024 MB de RAM para a VM. Crie um novo disco virtual. Figura 03. Figura 04.

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Capítulo 2. Laboratório 2.1. Introdução ao Packet Tracer, Roteadores, Switches e Inicialização

Introdução a Informática - 1º semestre AULA 02 Prof. André Moraes

Instalando o WordPress em localhost

Índice. Manual Backup Online. 03 Capítulo 1: Visão Geral

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Operador de Computador. Informática Básica

Administração do Windows Server 2003

Configurando o DDNS Management System

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Organização do Curso. Instalação e Configuração. Módulo II. Pós Graduação em Projeto e Gerencia de Redes de Computadores

TUTORIAL DE INSTALAÇÃO DA MÁQUINA VIRTUAL VIRTUALBOX COM INSTALAÇÃO DA VERSÃO DO SISTEMA OPERACIONAL UBUNTU

Como instalar o sistema operacional pfsense no Citrix Xen Server

Guia de Instalação de Software

INSTALAÇÃO PRINTERTUX Tutorial

Procedimentos para configuração em modo Router Dynamic IP

UM PBX GENUINAMENTE BRASILEIRO MANUAL DE INSTALAÇÃO COM IMAGEM ISO

MANUAL DE UTILIZAÇÃO

Configurando o Roteador Prof. Isaías Lima. Carregar o arquivo de texto para configurar outro roteador usando o HyperTerminal.

mobile PhoneTools Guia do Usuário

ROTEIRO PARA INSTALAÇÃO DO BITVISE, CONFIGURAÇÃO DE CHAVES SSH, DEFINIÇÃO DAS PORTAS PARA OS TÚNEIS SSH E CONFIGURAÇÃO DO THUNDERBIRD

Passo 1: Abra seu navegador e digite Passo 2: Na tela que surgir, clique em Get Started.

IP significa Internet Protocol. A Internet é uma rede, e assim como ocorre em qualquer tipo de rede, os seus nós (computadores, impressoras, etc.

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

Procedimento para instalação do OMNE-Smartweb em Raio-X

Passo a Passo da instalação da VPN

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS DE ACESSO REMOTO (TELNET E TERMINAL SERVICES) Professor Carlos Muniz

Transcrição:

Projeto de Desenvolvimento em OpenFlow Prof. Cesar Marcondes 1 o Semestre 2011 1 Introdução Tutorial de OpenFlow March 19, 2011. OpenFlow é uma interface aberta para controlar remotamente tabelas de encaminhamento dos switches de rede, roteadores e pontos de acesso. Atuando sob primitivas de baixo nível, os pesquisadores podem construir novas redes com propriedades de alto nível. Por exemplo, OpenFlow permite ter segurança em redes que por default não tem segurança, realizar a troca de ponto de acesso sem fio de maneira suave (handoff), redes escaláveis em data centers, mobilidade de hosts, redes mais eficientes em termos energéticos e novas redes de longa distância - só para citar alguns exemplos. Este tutorial é a sua oportunidade de ganhar experiência com mão na massa em plataformas e ferramentas de depuração úteis para o desenvolvimento de aplicações de controle de rede em OpenFlow. 2 Como o Processo do Openflow Funciona? Em um roteador ou switch clássico, o encaminhamento de pacotes rápido (data path) e as decisões de roteamento de alto nível (control path) ocorrem no mesmo dispositivo. Um Switch OpenFlow separa estas duas funções. A função de data path ainda reside no switch, enquanto que as decisões de roteamento de alto nível são movidas para um Controlador, normalmente localizado em um servidor. Os Switches OpenFlow e o Controlador se comunicam através do protocolo OpenFlow, que define mensagens como: packet-received, send-packet-out, modify-forwarding-table, e get-stats.. O OpenFlow nos permite controlar os fluxos - escolhendo as rotas que seus pacotes vão seguir e o processamento que eles devem receber. Desta forma, o OpenFlow torna possível experimentar com novos protocolos, novos modelos de segurança, e/ou novos esquemas de endereçamento. O data path de um Switch OpenFlow consiste no que é chamado Flow Table, e as ações associadas com cada entrada de fluxo. 1

3 Entradas na Tabela de Fluxo Cada entrada de fluxo (flow-entry) na Tabela de Fluxos do Switch tem uma ação simples associada a ela. Existem três ações básicas: Encaminhar os pacotes deste fluxo para uma determinada porta (ou portas). Isso permite que os pacotes sejam roteados através da rede. Na maioria dos switches essa ação espera ser efetuada a taxa de linha (na velocidade do hardware). Encapsula e transmite pacotes deste fluxo para um controlador. Os pacotes são enviados usando um Canal Seguro (Secure Channel), onde ele é encapsulado e enviado a um controlador. Normalmente, isso é utilizado para o primeiro pacote de um novo fluxo, de modo que um controlador possa decidir se o fluxo deverá ser adicionado à tabela de fluxo. Ou, em alguns cenários, ele pode ser usado para redirecionar todos os pacotes para um controlador para realizar algum processamento. Descartar pacotes deste fluxo. Isso pode ser usado por motivos de segurança, para conter ataques de negação de serviço (DoS), ou para reduzir a transmissão de mensagens espúrias de descoberta enviadas a partir de hosts. Cada entrada na tabela de fluxo possui três campos: 1. Uma regra que define o fluxo, isto é, como os pacotes são classificados como parte do fluxo. A regra consiste principalmente em fazer o match dos campos de cabeçalho do pacote. 2. A ação, que define como os pacotes devem ser processados e 2

3. Estatísticas, que mantêm registrado o número de pacotes e bytes para cada fluxo, e o tempo decorrido desde o último pacote que fez match com o fluxo (para ajudar com a remoção de fluxos inativos). O cabeçalho de fluxos é uma tupla de 10 itens conforme mostrado abaixo. Cada campo de cabeçalho pode ser definido como um curinga para permitir a agregação de fluxos. Alguns exemplos de entradas da tabela de fluxo e ações são mostradas abaixo. Em um dos exemplos, um fluxo TCP (HTTP com porta 80) pode ser especificado através de todos os dez campos (o exemplo do meio), enquanto que um switch L2 pode inserir fluxos que incluem apenas o campo de dst MAC. 3.1 Como o OpenFlow Processa os Pacotes? Para processar os pacotes no OpenFlow, a maneira mais simples é forçar todos os pacotes de um fluxo (ou cabeçalhos de pacotes na tupla-10) passar pelo Con- 3

trolador. Para fazer isso, um Controlador não precisa adicionar novas entradas de fluxos no Switch OpenFlow - ele só deixa o switch redirecionar por default todos os pacotes para o controlador. Isto tem a vantagem da flexibilidade em detrimento do desempenho. Isso pode proporcionar uma maneira útil para testar a funcionalidade de um novo protocolo, mas é pouco provável que seja de muito interesse de implantação em uma grande rede. Alternativamente, podemos definir uma entrada da tabela de fluxo no switch, assim que o controlador decidir sobre a ação correspondente (baseado no protocolo que vamos implementar). Quando pacotes subsequentes chegarem ao Switch, ele serão rapidamente processados (na velocidade física da linha) pela Tabela de Fluxos. 3.2 O Que é o Controlador OpenFlow? Um Controlador adiciona e ou remove entradas da tabela de fluxos em nome da aplicação. Por exemplo, um controlador estático pode ser uma aplicação simples rodando em um PC para estaticamente estabelecer fluxos que interliguem um conjunto de computadores de teste durante um experimento. Outro caso que podemos imaginar seriam controladores mais sofisticados que podem dinamicamente adicionar / remover fluxos enquanto a experiência progride. 4 Visão Geral do Tutorial Neste tutorial, você vai transformar um controlador de hub que será fornecido em um switch de auto-aprendizado baseado em controlador, em seguida em um switch com auto-aprendizado baseado em fluxos, e finalmente estender a partir de uma rede com um único switch para uma rede de múltiplos hosts e múltiplos switches. Você também poderá encontrar aqui orientações para novas extensões. Ao longo do caminho, você vai aprender o conjunto completo de ferramentas de debugging OpenFlow. Você também poderá fazer: Ver as tabelas de fluxos com dpctl Dissecar as mensagens OpenFlow com o Wireshark Simular uma rede multi-switch, multi-host com a Mininet 4

Realizar a tarefa de benchmark do controlador usando o cbench Após o tutorial, você pode aplicar o que aprendeu com redes físicas baseados em switches de software, NetFPGAs, ou switches em hardware comerciais. Para que possa começar rapidamente, forneceremos uma máquina virtual préconfigurada com todo o software necessário. 5 Pré-requisitos Você vai precisar de um computador com pelo menos 1 GB (de preferência 2GB +) de RAM e pelo menos 5GB de espaço livre no disco rígido (preferencialmente). Um processador mais rápido pode acelerar o tempo de boot da máquina virtual, e uma tela maior pode ajudar a gerenciar múltiplas janelas de terminal. Estas instruções consideram Linux, OS X e Windows. Linux e OS X são os sistemas preferidos - pois há menos componentes a instalar. Você precisa ter acesso administrativo (como root) a máquina, para instalar software nela. As instruções desse tutorial não exigem nenhum conhecimento prévio de Open- Flow!!! Travado em algum problema? Encontrou um bug? Perguntas? Email [OpenFlowdiscuss - at - lists.stanford.edu] se você estiver preso em algum problema, se você encontrou um bug, ou se quiser enviar algum feedback. Se relatar um bug, tente incluir o máximo de detalhes sobre o setup assim que possível, incluindo o seu Sistema Operacional, software de virtualização, tamanho de memória, e os passos que geram o bug. 6 Instalando o Software Necessário É preciso fazer o download destes arquivos individualmente. Nos arquivos incluem software de virtualização, um terminal capaz de conectar via SSH, um servidor X, e a imagem da Máquina Virtual. A imagem desse tutorial é distribuída como uma imagem comprimida de VirtualBox (vdi). VirtualBox permite que você execute uma máquina virtual dentro de uma máquina física, e é gratuito e está disponível para Windows, Mac e Linux. Você pode exportar a imagem do VirtualBox para o formato vmdk e usá-la com o software VMWare. As instruções a seguir pressupõem o uso do VirtualBox. 5

6.1 Download de Arquivos É preciso baixar os arquivos correspondentes ao seu sistema operacional, além da máquina virtual contendo o tutorial. Comece agora mesmo fazendo o download da imagem da Máquina Virtual do tutorial a partir do Moodle. Isso pode levar algum tempo - pois o tamanho do arquivo da imagem é da ordem de 1GB. Em seguida, realizar o download das outras ferramentas: OS Type OS Version Virtualization X Server Terminal Software Windows 7 Virtualbox Xming Putty Windows XP Virtualbox Xming Putty Mac OS 10.5 Virtualbox X11 Terminal.app Leopard Linux Ubuntu Virtualbox Servidor X já gnome terminal 10.04 instalado +SSH Você precisa ter cada item das colunas (servidor X, software de virtualização, e um terminal SSH) instalados em sua plataforma, além da imagem da Máquina Virtual (cs244-vm.zip). 6.2 Configurando a Máquina Virtual Descompacte a Imagem de Disco da Máquina Virtual. Pois ele vem comprimido. Vamos precisar descompactar primeiro. Aviso: Esta etapa pode levar um certo tempo - o arquivo vdi descompactado tem cerca de 3GB. Usuários de Windows: descompactem a imagem a partir do Windows Explorer. Usuários Linux (e usuários OS X que preferem linha de comando) a partir de um terminal, descompacte a imagem da máquina virtual assim: $ unzip cs244-vm.zip 7 Iniciando a Máquina Virtual É preciso configurar uma nova máquina virtual (MV) no Virtualbox. Abrir o VirtualBox. Selecione New Pressione o botão Continue para o prompt seguinte. Coloque um nome na sua MV openflow, escolher Sistema Operacional Linux, versão Ubuntu. Clique em Continue. Aloque 512MB de memória e clique em Continue 6

Nesse ponto o Virtualbox deve pedir se deseja criar um novo disco rígido, ou usar um já existente. Selecione Use existing hard disk. Clique no ícone para selecionar o disco rígido. Media Manager Window. Isto irá abrir o Virtual Pressione Add e localize o arquivo cs244.vdi extraído nas etapas anteriores. Clique em Select e, em seguida Continue. Sua instalação da MV está completa. Pressione Done. Você precisa de mais uma passo antes de terminar a configuração da MV. Selecione a sua VM no virtualbox e vá até a aba Settings. Vá para Network- >Adapter 2. Selecione a caixa Enable adapter, e coloque a opção host-only network. Isto fará com que você consiga acessar facilmente a sua máquina virtual a partir da máquina host (sua máquina física). Nesse ponto, voce deve estar pronto para iniciar a sua MV. Pressione Run ou de um duplo-clique na MV a partir da janela do VirtualBox. Ao realizar o boot, entre com o username e password, que são ambos openflow. Observe que o usuário openflow é um sudoer (capaz de executar operações administrativas no Linux). 7.1 Escolher o Editor preferido Nano, Vim, Emacs, o Gedit já vem instalados na MV OpenFlow. Uma breve introdução para cada um dos editores segue: Nano: Você pode modificar um arquivo imediatamente. E quando terminar, pressione ctrl-x, então diga Yes no prompt para salvar e sair. Vim: modificar um arquivo, digite i para entrar no modo de Inserção, em seguida, use as setas do teclado para navegar e editar. Quando terminar, pressione a tecla esc, e então digite :wq, então pressione Enter para salvar e sair. Emacs: você pode modificar um arquivo imediatamente. Ao terminar, pressione ctrl-x, ctrl-s, e então pressione ctrl-x, ctrl-c para sair. Gedit: o editor de texto gráfico, nenhum instrução é necessária. Eclipse: O Eclipse não vem instalado. Eclipse e suas dependências vão exigir cerca de 500MB de espaço extra na imagem da MV, por isso não é incluído. Se você tiver instalado o Eclipse no host, e utilizar o recurso Remote Systems Explorer pode ser uma maneira conveniente de acessar e modificar arquivos de texto na MV, com outras várias vantagens do Eclipse, como destaque para highlight da sintaxe. Se você tiver outro editor de texto preferido, sinta-se livre para instalar: $ sudo apt-get install editor 7

7.2 Notas sobre o Prompt de Comando Neste tutorial, os comandos são mostrados juntamente com um prompt de comando para indicar o subsistema que se destinam. Por exemplo, $ ls indica que o comando ls deve ser digitado em um prompt de comando do sistema Unix (Linux ou OS X) o que significa um prompt $, se você é um usuário normal ou # se você for root, do Linux. Outros prompts usados neste tutorial incluiem mininet> onde são digitados comandos de console para o Mininet e C:> para comandos que são feitos via prompt de comandos do Windows (cmd.exe). 7.3 Configurando o Acesso a Rede A MV do tutorial não tem um ambiente gráfico de trabalho (KDE, Gnome) para reduzir seu tamanho. Entretanto, todos os exercícios poderão ser feitos por meio de redirecionamento X dos displays gráficos dos programas através do servidor X, que está rodando no sistema operacional hospedeiro (ex. Xming no caso do Windows). Para iniciar o encaminhamento do servidor X (X forwarding), primeiramente é preciso descobrir o endereço IP da MV. 7.3.1 VirtualBox A MV possui duas interfaces de rede. Ele usa uma interface para acessar a Internet, e a outra é para comunicar diretamente com a máquina hospedeira. Ambas as interfaces são configuradas com o DHCP, portanto ao inicializar elas já devem ter um endereço IP associado a elas. Nenhuma configuração adicional será necessária. 7.4 Acessando a MV via SSH Nesta etapa, você poderá verificar se pode conectar do seu computador host (o seu laptop físico, por exemplo) para a MV guest (Tutorial OpenFlow) via SSH. Em primeiro lugar, a partir do console da máquina virtual faça o LOGIN como o usuário openflow com senha openflow, e DEPOIS de logar, digite: $ ifconfig Você deverá ver três interfaces (eth0, eth1, lo), ambas eth0 e eth1 devem ter endereços IP atribuídos. Se este não for o caso, por algum problema, digite: $ sudo dhclient Tome nota do endereço IP atribuído a eth1; você vai precisar dele mais tarde. 8

O próximo passo é fazer o login via SSH, o que vai depender do seu sistema operacional. 7.4.1 Mac OS X e Linux Abra um terminal (Terminal.app no Mac, Gnome terminal no Ubuntu). A partir desse terminal, digite: $ ssh -Y openflow @ [Endereço IP do Guest] Substitua [Endereço IP do Guest] com o endereço IP que você acabou de anotar. Entre com a senha openflow. A opção -Y é para Habilitar um X11 forwarding com aspectos de segurança. E em seguida, teste se o encaminhamento do servidor X11 (X11 forwarding) está rodando na máquina local, com o comando: $ xterm e uma nova janela do terminal deve aparecer. Se você tiver sucesso, então está feita a configuração básica. Feche o xterm. Feche o xterm. Se você receber uma mensagem Display not set error, verifique a instalação do servidor X nas seções acima. 7.4.2 Windows Iniciar Xming com a opção X forwarding (clique no Xming para configurá-lo. Para ativar o X Forwarding, clique em PuTTY-> Connection->SSH->X11, e em seguida, clique em Forwarding-> Enable X11 Forwarding, conforme demonstrado na figura abaixo: 9

Após essa configuração (clicando em OK) nada de emocionante deve acontecer, mas você deve ver um ícone do lado direito da barra de ferramentas do Putty. Abra um terminal no Windows: Clique no botão do Windows Iniciar, depois Executar Digitar cmd. Mude para o diretório onde você salvou o putty. C:> cd diretorio E então executar: C:> putty.exe -X openflow @ [Endereço IP do Guest] Substitua [Endereço IP do Guest] com o endereço IP que você acabou de anotar. Uma nova janela se abrirá, digite a senha openflow. E agora, digite: $ xterm Uma janela com um terminal branco deve aparecer. está pronta a configuração básica. Feche o xterm. Se você tiver sucesso, 10

8 Aprendendo as Ferramentas de Desenvolvimento Nesta seção, você se familizará com o ambiente de desenvolvimento. Nesse processo, serão apresentadas as ferramentas, que mais tarde serão úteis para transformar o HUB fornecido para um self-learning SWITCH. Cobriremos tanto as ferramentas de debug gerais quanto as específicas de OpenFlow. Vamos definir os termos, começando com os tipos de terminal: terminal console do VirtualBox: conexão com o tutorial OpenFlow. Esse é o console criado quando você iniciou a MV. Não é possível copiar e colar a partir desse documento PDF para este terminal de console. Mas, não será muito necessário uma vez que você conseguir configurar a rede. terminal SSH: permite conectar-se ao Tutorial OpenFlow. Ele é criado a partir do putty no Windows ou SSH no Mac OS X/Linux, conforme descrito na seção anterior. É possível copiar e colar a partir desse terminal. terminal xterm: conecta-se a um host virtual da rede virtual. Criado na seção seguinte, quando você inicia a rede virtual. Ele é identificado por um rótulo no topo da janela contendo o nome do host. A MV do Tutorial OpenFlow inclui uma série de utilitários de rede, préinstalados, sejam gerais ou específicos de OpenFlow (OF). Seguem algumas descrições curtas dessas: Controlador OpenFlow: situa-se acima da interface Openflow. A distribuição de referência do OpenFlow inclui um controlador que age como um self-learning Switch Ethernet em combinação com um switch Open- Flow. Você vai executá-lo e olhar as mensagens sendo enviadas. Então, na próxima seção, você irá escrever o seu próprio controlador usando ou NOX ou Beacon (que são plataformas de programação para voce escrever suas próprias aplicações controladoras). Switch OpenFlow: situa-se abaixo da interface OpenFlow. A distribuição de referência OpenFlow inclui uma opção de switch em software em user-space. Open vswitch é uma outra opção de switch em software, mas baseado no kernel, além disso existe um número de opções disponíveis a partir de hardware Broadcom (como a versão Indigo de Stanford), HP, NEC e outros. dpctl: utilitário de linha de comando que envia mensagens rápidas do protocolo OpenFlow, útil para visualizar porta do switch e estatísticas de fluxo, além de manualmente inserir entradas de fluxo. Wireshark: utilitário gráfico geral para a visualização de pacotes (não é específico de OF). A distribuição de referência OpenFlow inclui um Wireshark dissector, que disseca e analisa as mensagens OpenFlow enviado pela porta padrão do OpenFlow (6633), de forma convenientemente legível. 11

iperf: utilitário geral de linha de comando para testar a velocidade de uma única conexão TCP. Mininet: plataforma de emulação de rede. Mininet cria uma rede virtual OpenFlow - com controlador, switches, hosts e links - em uma única máquina real ou máquina virtual. Existe uma página de Mininet na Web. cbench: utilitário que testa a taxa de instalação de fluxos (flow setup rate) em controladores OpenFlow. Desse ponto em diante, certifique-se de que está digitando o comando correto! Por exemplo, digitar manualmente sudo dpctl show nl:0 pode parecer correto, mas pode causar um erro; pois nl é a abreviação de NetLink e não n junto com um 1. 8.1 Iniciando a Rede A rede que usaremos para o primeiro exercício inclui três hosts e um switch (e, eventualmente, um controlador OpenFlow, mas vamos chegar nesse mais tarde): Para criar esta rede na VM, no terminal SSH, digite: $ sudo mn topo single,3 mac switch ovsk controller remote uma topologia contendo 3 hosts e um único switch (do tipo openvswitch), configurar os endereços MAC de cada host igual ao seu IP, e apontar para um controlador remoto cujo o padrão é o localhost. Aqui estão os passos que o Mininet acabou de fazer: 12

Criou 3 hosts virtuais, cada uma contendo um endereço IP separado. Criou um único switch em software OpenFlow no kernel com 3 portas. Conectou cada host virtual ao switch com um cabo ethernet virtual. Definiu o endereço MAC de cada host sendo parecido com o seu IP. Configurou o switch OpenFlow para se conectar a um controlador remoto. 8.2 Breve Introdução ao Mininet Como você estará trabalhando com o Mininet para todo esse tutorial, vale a pena aprender alguns comandos específicos de Mininet ($ sudo mn -c): Para ver a lista de nós disponíveis, no console do Mininet, digite: mininet> nodes Para ver a lista de comandos disponíveis, no console do Mininet, digite: mininet> help Para executar um único comando em um nó virtual, é só prefixar o comando com o nome do nó. Por exemplo, para verificar o endereço IP de um host virtual, no console do Mininet, digite: mininet> h2 ifconfig Uma alternativa a esse comando acima - e que é melhor para executar comandos interativos e assistir a saída de debugging - é gerar um xterm para cada host virtual (seja um ou mais hosts virtuais) e depois digitar os comandos diretamente nos xterm equivalentes. Para isso, digite no console do Mininet: mininet> xterm h2 h3 Se Mininet não estiver funcionando corretamente (ou deixou de funcionar e precisa ser reiniciado), primeiro use o comando exit ou control-d e tente limpar todo o estado residual ou processos por meio do comando: $ sudo mn -c o que faz o Mininet executar novamente. O Mininet tem uma infinidade de outros comandos e opções de inicialização que podem ajudar na depuração. Porém esse pequena introdução é suficiente para este tutorial. Se você estiver curioso sobre outras opções, procure o manual do Mininet na Web. 13

8.3 Exemplo de Uso do Comando dpctl dpctl é um utilitário que vem com a distribuição de referência OpenFlow e permite visibilidade e controle sobre uma tabela de fluxos de um único switch. Ele é especialmente útil para debugging, por permite exibir o estado dos fluxo e os contadores de fluxo. A maioria dos switches OpenFlow começa com uma porta de escuta passiva (em sua configuração atual essa é a porta 6634), na qual é possível interagir com o switch, sem ter que adicionar código de debugging no controlador. Crie uma segunda janela SSH se você ainda não tiver uma, e execute: $ dpctl show tcp:127.0.0.1:6634 O comando show conecta ao switch e descarrega o estado de suas portas e capacidades. Aqui está um comando ainda mais útil: $ dpctl dump-flows tcp:127.0.0.1:6634 Como ainda não iniciamos nenhum controlador, a sua tabela de fluxos (flowtable) deve estar vazia. 8.4 Teste de Ping Agora, volte ao console Mininet e tente fazer ping entre h2 e h3. digite no console do Mininet: Portanto, mininet> h2 ping -c3 h3 Note que o nome do host h3 é automaticamente substituído quando são executados comandos no console do Mininet aparecendo o seu endereço IP (10.0.0.3). E aí? Você conseguiu obter alguma resposta do ping? Por quê? Por que não? Como você viu antes, a tabela de fluxos do switch está vazia. Além disso, não há nenhum controlador ligado ao switch e, portanto, o switch Openflow não sabe o que fazer com o tráfego de entrada, levando a falha do comando ping. Vamos usar o dpctl para manualmente instalar os fluxos necessários. no seu terminal SSH: Então $ dpctl add-flow tcp:127.0.0.1:6634 in port=1,actions=output:2 $ dpctl add-flow tcp:127.0.0.1:6634 in port=2,actions=output:1 Isto irá transmitir pacotes vindos na porta 1 para a porta 2 e vice-versa. É 14

possível verificar essa configuração, analisando a tabela de fluxos. $ dpctl dump-flows tcp:127.0.0.1:6634 Execute novamente o comando ping a partir do console do Mininet. mininet> h2 ping -c3 h3 Dessa vez você obteve as respostas? Verifique a tabela de fluxos novamente e agora observe as estatísticas para cada fluxo de entrada. É isso que você esperava ver baseado no tráfego ping? OBS: se você não observar qualquer respostas de ping chegando, talvez seja o caso de que as entradas de fluxos terminaram antes de você começar a executar o teste de ping. Quando você digita um dump dpctl-flows você poderá observar uma opção para cada entrada chamada idle timeout, cujo padrão é 60. Isso significa que que o fluxo irá expirar após 60 secs SE NÃO HOUVER nenhum tráfego de entrada. Tente executar novamente o comando respeitando esse limite, ou instale uma entrada de fluxo com um tempo de timeout maior. $ dpctl add-flow tcp:127.0.0.1:6634 in port=1,idle timeout=120,actions=output:2 8.5 Iniciando o Wireshark A imagem da MV inclui o Wireshark com OpenFlow dissector pré-instalado. O Wireshark é extremamente útil para assistir as mensagens do protocolo Open- Flow, bem como no debugging em geral. Inicie um novo terminal SSH e se conecte a MV usando X forwarding, se você estiver usando Mac OS X ou Linux é só digitar: $ ssh -X openflow @ [Endereço IP do Guest] Se você estiver usando putty.exe, digite: C:> putty.exe -X openflow @ [Endereço IP do Guest] Agora abra o Wireshark: $ sudo wireshark & Você provavelmente vai receber uma mensagem de aviso que está usando o wireshark como superusuário (root). Pressione OK. Clique em Capture->Interfaces na barra de menu. Clique no botão Start ao 15

lado de lo, que é a interface de loopback. Você vai começar a ver alguns pacotes passando. Agora, crie um filtro para o tráfego de controle do OpenFlow, através da digitação of na Filter box perto do topo: of Pressione o botão Apply para aplicar o filtro para todo o tráfego que estiver passando. 8.6 Iniciando o Controlador e Observando as Mensagens de Inicialização no Wireshark Agora que você esta com o Wireshark na escuta do tráfego, iniciar o Controlador de referência OpenFlow. Digitando no seu terminal SSH: $ controller ptcp: Isso vai iniciar um Controlador simples que atua como um switch de autoaprendizado sem instalar quaisquer entradas na tabela de fluxos. Você vai ver um monte de mensagens exibidas no Wireshark, a partir da troca de mensagens Hello. Como exemplo, no Wireshark busque a mensagem Features Reply. Clique no triângulo da linha escrita OpenFlow Protocol na seção central que permite expandir os campos de mensagem. Clique no triângulo contendo Switch Features para mostrar as capacidades de datapath - sinta-se a vontade para explorar os campos. A tabela a seguir inclui estas mensagens trocadas: Mensagem Tipo Descrição Hello Controller->Switch em seguida ao handshake TCP, o controlador envia o seu número de versão para o switch. Hello Switch->Controller o switch responde dizendo o seu número de versão. Features RequestController->Switch o controlador pede para ver quais portas estão disponíveis. Set Config Controller->Switch neste caso, o controlador pede ao switch para enviar fluxos que expirarem. Features Reply Switch->Controller o switch responde com uma lista de portas, velocidades de portas, e tabelas e ações suportadas. Port Status Switch->Controller permite ao switch informar ao controlador sobre mudanças em velocidades das portas e conectividade. Ignore essa mensagem por agora, é um recurso instável. Como todas as mensagens são enviadas ao localhost quando estamos usando o Mininet, determinar o remetente de uma mensagem pode ser confuso, espe- 16

cialmente quando estamos emulando um monte de switches. No entanto, isso não será um problema, uma vez que o controlador está no porta padrão Open- Flow (6633), enquanto que cada switch na resposta usa uma porta diferente de nível de usuário. 8.7 Vendo as Mensagens OpenFlow geradas pelo Ping Agora, nós veremos as mensagens geradas em resposta aos pacotes ICMP. Antes de atualizar o seu filtro do Wireshark para ignorar as mensagens OF echorequest/reply (que são utilizadas para manter a conexão entre o switch e controlador viva): Digite o seguinte no seu filtro do Wireshark, e em seguida pressione Apply: of && (of.type!= 3) && (of.type!= 2) Na con- Execute um ping para ver as mensagens OpenFlow sendo usadas. sole do Mininet execute: mininet> h2 ping -c1 h3 Na janela Wireshark, você observará uma série de novos tipos de mensagens: Mensagem Tipo Descrição Packet-In Switch->Controller um pacote foi recebido e ele não fez match com nenhuma entrada na tabela de fluxos do switch, o que causa ao pacote ser enviado ao controlador. Packet-Out Controller->Switch o controlador envia um pacote através de uma ou mais portas do switch. Flow-Mod Controller->Switch instrui o switch a adicionar um fluxo em particular na sua tabela de fluxos. Flow-ExpiredSwitch->Controller ocorreu um time out de um fluxo após um período de inatividade. Primeiramente, você verá uma requisição ARP que não terá match na tabela de fluxo, essa irá gerar uma mensagem broadcast Packet-Out. Em seguida, a resposta ARP volta; com ambos os endereços MAC dos hosts agora conhecidos pelo Controlador, ele então pode empurrar uma entrada de fluxo para o switch através da mensagem Flow-Mod. O switch então, empurra entradas de fluxos para os pacotes ICMP. Requisições ping subsequentes vão direto pelo datapath, e não geram mais mensagens extras; com as entradas de fluxos conectado H2 e H3 já descarregados no switch, não há mais envolvimento do controlador. Re-execute o comando ping novamente a partir do console do Mininet (basta pressionar a tecla para cima, pois o console do Mininet tem um buffer de histórico): 17

mininet> h2 ping -c1 h3 Se o ping levar a mesma quantidade de tempo de novo, execute o ping mais uma vez (a idéia é ver o ganho em tempo por causa do datapath estabelecido). Este é um exemplo do uso em modo reativo do OpenFlow, quando os fluxos são descarregados do controlador para baixo em resposta a pacotes individuais. Outra alternativa, os fluxos podem ser descarregados para baixo, antes dos pacotes aparecerem, este é um modo pró-ativo, para evitar o tempo de ida e volta ao controlador e os atrasos de inserção de fluxo. 8.8 Fazendo o Benchmark do Controlador com o iperf iperf é uma ferramenta de linha de comando para verificação de velocidade de transferencia entre dois computadores. Aqui, você fará o benchmark do Controlador de referência, mais tarde, você vai comparar o Controlador hub fornecido, e sua implementação de um switch baseado em fluxos. Para fazer o experimento, no console do Mininet execute: mininet> iperf Este comando do Mininet executa um servidor iperf TCP em um virtual host, e em seguida, executa um cliente iperf em um segundo host virtual. Uma vez conectados, eles geram uma rajada de pacotes entre si e comunicam os resultados. Agora vamos comparar o resultado com o switch em user-space. No console do Mininet digite para sair e depois inicie o mesmo Mininet com a opção de switch em user-space: mininet> exit $ sudo mn topo single,3 mac controller remote switch user Execute mais um teste usando iperf com o controlador de referência: mininet> iperf Viu a diferença? Com o switch em user-space, os pacotes precisam cruzar o user-space para o kernel-space e vice-versa em cada hop, ao invés de permanecer no espaço do kernel aos pacotes atravessarem o switch. O switch de user-space é mais fácil de modificar (não temos nenhum kernel oops para lidar), mas ele é mais lento para simulação. Saia do Mininet: mininet> exit 18