Académique Documents
Professionnel Documents
Culture Documents
Brasil
2017
Rodolfo Vieira Valentim
Brasil
2017
Agradecimentos
Autor desconhecido
Agradeço ao meu pai, pois as pausas para assistir aos jogos do Fluminense mantive-
ram minha sanidade mental durante os finais de semestre. Agradeço à minha mãe por ser
a melhor pessoa do mundo, mas talvez não a mais calma. Agradeço à minha irmã por ser
mais empolgada com minha profissão do que eu e, dessa forma, me deixar mais animado
com o meu futuro.
Obrigado Léo, Renan, Igor, Raissa, Janaina, Janaissa, Guigui, Labore, Lelp e Dabi.
Vocês são pessoas que estarão sempre no meu coração e seria impossível ter chegado
até aqui sem vocês. Obrigado, também, a Roberta (e aos seus bots que mandam e-mail
de madrugada) que foi uma tutora no melhor sentido da palavra. Agradeço ao pessoal
do NERDS por me ouvir reclamar várias vezes sobre várias coisas, mas quase nunca do
OpenStack.
Um agradecimento especial aos meus orientadores. Zambon, desculpa por tantas
páginas! Eu juro que foi sem querer. Obrigado por me emprestar uma parte do tempo e
por dar um norte ao meu trabalho. Cristina, muito obrigado pela paciência, pelo apoio
técnico, pelas horas escovando pacote de rede, pelas horas procurando arquivos de 800
GBs e, acima de tudo, por ter me dado uma luz quando eu tive dúvidas sobre o futuro. Te
desejo tudo de bom e menos reuniões!
Aos meus amigos mais antigos: Bruno, Letícia, Talles e Ianna. Obrigado pelas
conversas, churrascos e, principalmente, pela amizade que eu tenho a honra de ter. Agradeço,
também, à Natasha por ter me aguentado nesse período insano da minha vida. Quero que
saiba que eu admiro a sua força de vontade e resistência. Espero que possa estar ao seu
lado por muito mais tempo.
Finalmente, agradeço a Deus que todos os dias me dá forças para fazer o meu
melhor.
Resumo
A virtualização de funções de rede é uma tecnologia que tem se desenvolvido rapidamente e
tem mudado o cenário de comunicação de dados. Há o surgimento de diversas ferramentas
para gerência e orquestração de funções de rede virtualizadas. Orquestração de funções
de redes é a forma como se coordena os diversos recursos necessários para habilitar o uso
do paradigma NFV. Dentre as ferramentas de orquestração destacam-se: Tacker, Brocade
VNF Manager e OpenMANO. Entretanto, há pouco esforço empregado quando relacionado
à estrutura de redes centradas em servidores. Este projeto apresenta um orquestrador
que é capaz de coletar autonomamente informações de uma infraestrutura centrada em
servidores e disponibiliza meios de obtenção destes dados, tendo como foco, utilização
destes dados por um otimizador.
1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.1 Motivação e Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.3 Estrutura do Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 27
2.1 Funções de rede virtualizadas . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.1 Arquitetura de rede tradicional . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.2 Virtualização de funções de rede . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.3 Arquitetura NFV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.4 Detalhes do bloco funcional NFV MANO . . . . . . . . . . . . . . . . . . 30
2.2 Redes definidas por software . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 OpenFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.2 Controlador de Rede Ryu . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.3 Open vSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.3 KeyFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4 Iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.5 Link Layer Discovery Protocol . . . . . . . . . . . . . . . . . . . . . . 38
2.6 Computação em nuvem . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.1 OpenStack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.6.2 OpenStack Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.7 Redes centradas em servidores . . . . . . . . . . . . . . . . . . . . . . 42
3 VIRTPHY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1 Arquitetura do VirtPhy . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1.1 SFC usando SDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.2 Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.3 Escopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4 PROJETO DA ARQUITETURA . . . . . . . . . . . . . . . . . . . . 53
4.1 Etapa de Requisições . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.2 Etapa de Otimização . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.2.1 Gerência de Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2.1.1 Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2.1.2 Catálogo de funções de rede . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3 Etapa de Implementação . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3.1 Posicionamento de Funções de Rede Virtualizadas . . . . . . . . . . . . . . 58
4.3.2 Encadeamento de Funções de Rede Virtualizadas . . . . . . . . . . . . . . 60
5 IMPLEMENTAÇÃO DA ARQUITETURA . . . . . . . . . . . . . . . 65
5.1 Otimizador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2 Padrões de Comunicação entre Componentes . . . . . . . . . . . . . 65
5.2.1 Hospedeiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.2.2 Enlace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.2.3 Descritor de Funções de Rede . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2.4 Requisições de Serviços . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.5 Instâncias de Funções de Rede . . . . . . . . . . . . . . . . . . . . . . . . 69
5.2.6 Encadeamento de Funções de Rede . . . . . . . . . . . . . . . . . . . . . 70
5.3 Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4 Cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.4.1 Infraestrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.4.2 Criação de Funções de Rede . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.3 Cadastro de Requisições . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.4 Execução do posicionamento . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.4.5 Execução do encadeamento de funções de rede . . . . . . . . . . . . . . . 75
5.4.6 Reverter alterações na infraestrutura . . . . . . . . . . . . . . . . . . . . . 76
5.5 Infraestrutura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.6 Controlador SDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.6.1 Gerenciador de SFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.6.2 Gerenciador de Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.7 Agente Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.8 Gerenciador de Infraestrutura Virtualizada . . . . . . . . . . . . . . . 83
5.9 Orquestrador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.9.1 Recebimento de Requisições de Serviço . . . . . . . . . . . . . . . . . . . 84
5.9.2 Descoberta de Topologia . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.9.3 Posicionamento de VNFs . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.9.4 Encadeamento de VNFs . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6 CARACTERIZAÇÃO DE FUNCIONAMENTO . . . . . . . . . . . . 89
6.1 Script de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.2 Cenário 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.3 Cenário 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.4 Cenário 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.5 Cenário 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.6 Cenário 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7 CONCLUSÕES E TRABALHOS FUTUROS . . . . . . . . . . . . . 105
7.1 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.2 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
APÊNDICES 111
1 Introdução
1.2 Objetivos
O objetivo principal deste projeto é automatizar a orquestração de funções de
rede na arquitetura VirtPhy. O requisito principal é que esse processo de orquestração
seja autônomo e a sua tomada de decisões se baseie na comunicação com um módulo
de otimização com interfaces de entrada e saída bem definidas, de modo que diferentes
métodos de otimização possam ser aplicados de acordo com os requisitos de cada serviço
ou infraestrutura.
As duas principais tarefas da orquestração de funções de redes virtualizadas são o
posicionamento e o encaminhamento de VNFs. O posicionamento é a criação de instâncias
de funções de redes virtualizadas em um hospedeiro específico. O encadeamento é o
redirecionamento do fluxo passando por funções de redes virtualizadas em uma ordem
específica. Chama-se de Service Function Chaining (SFC).
De forma geral, será necessário: coletar as informações sobre a infraestrutura de
computação e redes, se comunicar com um processo de otimização que produz as decisões
de orquestração, e implementar os mecanismos que aplicam as decisões de orquestração
na infraestrutura. Assim, os objetivos específicos são:
2 Fundamentação Teórica
• Controle dos parâmetros operacionais das funções da rede através do controle granular
e monitoramento do estado da rede.
Neste ponto, é conveniente expor que o trabalho desenvolvido pela ETSI ISG NFV
não tem caráter regulador, mas tenta definir critérios mínimos para compatibilidade entre
implementações em NFV. O surgimento de novas tecnologias como computação na nuvem
e redes definidas por software, tem ajudado na evolução do paradigma NFV.
30 Capítulo 2. Fundamentação Teórica
Como pode ser visto na Figura 3 é previsto um banco de dados que armazena
informações relevantes para a orquestração. São estas (NFV, 2014):
• Orquestração de serviços;
VNFM
• Gerencia o ciclo de vida de VNFs
VIM
• Mantém repositório de hardware (armazenamento, computação e
rede);
Figura 4 – Transição de uma tecnologia de rede tradicional para uma utilizando SDN.
(CHAYAPATHI SYED F. HASSAN, 2016)
switches e o controlador SDN. Este controlador executa controle direto sobre os switches
no plano de dados usando uma API. O exemplo mais notável de tal API é o OpenFlow
(MCKEOWN et al., 2008).
2.2.1 OpenFlow
OpenFlow foi o primeiro protocolo de código aberto para comunicação entre
controladores SDN e equipamentos do plano de dados. OpenFlow fornece um protocolo
para alteração da tabela de fluxo, a qual define o encaminhamento da mensagem. Esta
tabela está presente em switches que estão habilitados para trabalhar com o protocolo.
De acordo com (MCKEOWN et al., 2008), um OpenFlow Switch consiste de pelo
menos três partes:
1. Uma tabela de fluxo (flow table) com uma ação associada à cada entrada na tabela.
Assim, é informado ao switch como processar cada fluxo;
Fonte: Redes Definidas por Software (SDN) UFRJ - Universidade Federal do Rio de Janeiro. Disponível
em: <gta.ufrj.br/ensino/eel879/trabalhos_vf_2015_2/SDN>
2.3 KeyFlow
OpenFlow é uma alternativa para flexibilizar o controle sobre o encaminhamento de
pacotes de rede. Entretanto, a forma como o encaminhamento é realizado, consultando um
controlador remoto, pode acarretar problemas de performance quando a implementação
precisa ser escalada. KeyFlow (MARTINELLO et al., 2014) é apresentado como uma
alternativa para a implementação de elementos que realizam encaminhamento de pacotes.
A ideia principal do KeyFlow é, em linhas gerais, usar RNS (Residual Number
System) (GARNER, 1959) que consiste em representar um número bem grande em
uma combinação de pequenos números obtidos pela operação de resto de divisão inteira
deste grande número por um conjunto de co-primos. Este número grande representa um
identificador de uma rota e os pequenos números são os identificadores das portas do
switch. Os co-primos são os identificadores dos próprios switches.
O KeyFlow permite a identificação explícita do caminho nas bordas e, simultanea-
mente, técnicas de encaminhamento sem dependência com o estado no núcleo da rede. Um
exemplo de execução é dado na Figura 8. Percebe-se que cada nó da rede é identificado por
36 Capítulo 2. Fundamentação Teórica
2.4 Iptables
Iptables é um utilitário para configuração do firewall do kernel do Linux. Foi
desenvolvido no contexto do projeto Netfilter (WELTE, 2000). Foi projetado para trabalhar
tanto com protocolo IPv4 e IPv6.
A ferramenta trabalha com os conceitos básicos de inspecionar, modificar, encami-
nhar, redirecionar ou descartar um pacote. A implementação do iptables é feita no nível
do kernel e funciona como uma série de tabelas, cada uma com uma função específica. As
tabelas são, basicamente, uma lista de regras (chain) que são seguidas ordenadamente e
são estas regras definem o destino do pacote. As tabelas disponíveis no iptables são:
• Filter: usada para definir se deixa o pacote continuar até o destino pretendido ou se
o pacote é descartado;
38 Capítulo 2. Fundamentação Teórica
• NAT: As regras nessa tabela definem como modificar tanto origem quanto o destino
do pacote de modo a modificar a forma como o pacote é roteado;
• Raw: seu protódito é de excluir qualquer rastro de sessão que possa haver no pacote,
para que possa ser analisado livre de estado;
A medida que um pacote vai percorrendo a pilha vai desencadeando alguns eventos.
Os eventos estão associados a tabelas e, desta forma, quando acontece um evento, uma
tabela é consultada e uma ação é tomada. Os eventos diponíveis são:
• PREROUTING: este evento acontece assim que o pacote entra na pilha, antes de
qualquer decisão de roteamento ser feita;
• INPUT: acontece assim que o pacote é roteado e se o destino dele for o sistema local;
• OUTPUT: acontece assim que qualquer fluxo de rede de saída é criado localmente;
Na Figura 10 encontra-se uma representação gráfica dos eventos que são desenca-
deados a medida que o pacote vai caminhando pela pilha:
Control Protocol) em IEEE 802.1. Um equipamento usando este protocolo publica suas
informações periodicamente usando todas as suas interfaces de rede.
Um quadros no protocolo LLDP tem o formato mostrado na Figura 11 e é do
tipo Ethernet. Este quadro é enviado para todas as interfaces de rede do equipamento em
intervalos fixos de tempo. O pacote Ethernet tem o campo EthernetType que é preenchido
com 0x88cc, sendo este um valor específico para o protocolo.
unidade. No excelente, porém breve, documento (MELL; GRANCE et al., 2011) são
listadas as características desejadas em uma infraestrutura de nuvem.
• Serviços sob demanda: um usuário deve ser capaz de alocar e liberar recursos ou
serviços sem que haja a intervenção direta de humanos;
• Amplo acesso pela rede: é importante que um ambiente de rede seja acessível
pela rede. Não necessariamente rede pública, como uma intranet por exemplo, mas é
importante que usuários tenham acesso ao ambiente;
2.6.1 OpenStack
O OpenStack é um sistema operacional em nuvem que controla grandes conjuntos de
recursos de computação, armazenamento e rede em todo um data center, todos gerenciados
através de um painel de controle que dá aos administradores o controle ao capacitar seus
usuários a fornecer recursos através de uma interface web (FOUNDATION, 2017b).
O software OpenStack roda sobre ambientes Linux (Ubuntu, OpenSUSE e CentOS)
e adota uma abordagem modular onde cada módulo possui funções bem definidas. Cada
módulo precisa ser instalado separadamente e se comunica com outros usando a especifica-
ção WSGI. WSGI (Web Server Gateway Interface) é uma especificação para comunicação
entre servidores web e aplicações.
Cada componente pode ser do tipo:
Figura 13 – Arquitetura usada pelo Openstack usando o Open vSwitch. Elaborada pelo
autor.
3 VirtPhy
4. SFC distribuído: outro fator que leva à redução das tabelas de fluxo é a distribuição
das regras de SFC em cada servidor, ao invés de sua centralização em apenas um
switch.
blocos previstos em uma arquitetura NFV. As principais funções dos blocos previstos na
arquitetura são listadas a seguir:
• VIM
– Gerência da interação entre as VNFs com o hardware, bem como sua virtualiza-
ção através do hypervisor. Hypervisor é o software responsável pela criação e
execução das máquinas virtuais;
– Gerência de redes virtuais;
– Configuração dos endereços das VNFs no momento da criação, de acordo com
o hospedeiro em que é instanciada.
• VNF Manager
3.1. Arquitetura do VirtPhy 47
– Responsável pela gerência de ciclo de vida das VNFIs (Virtual Network Function
Instance).
• Controlador SDN
• Banco de Dados
Utilizando-se desta solução, não é necessário que nem origem, nem destino e nem
as funções de rede envolvidas estejam cientes do processo de encaminhamento.
Por exemplo, para Figura 17-a, pode-se instalar no switch as seguintes regras da
Tabela 2 de forma a habilitar o encaminhamento. A função de rede utilizada é uma SFF
que encaminha um pacote para a mesma interface da qual recebeu.
Tabela 2 – Regras instaladas no switch da Figura 17-a. Fonte: (DOMINICINI et al., 2016)
Regra Classificador Ação
1 IP_Origem=IP1 Modifica MAC_Dest para VMAC1;
Encaminha para porta 2.
2 MAC_Dest=VMAC1 Modifica MAC_Dest para to MAC2;
Encaminha para porta 3.
A Figura 17-b, mostra a abordagem utilizando uma nuvem e utilizando regras para
encadeamento. O número de tabelas e regras aumenta em relação à primeira abordagem,
mas também aumenta a capacidade de alocação de VNFs. Entretanto, ao se utilizar uma
nuvem centrada em servidor em conjunto com SFC por regras (Figura 17-c) , percebe-se
3.2. Protótipo 49
que o número de tabelas diminui, mas o poder de alocação de recursos permanece o mesmo.
A natureza das regras instaladas é a mesma da utilizadas na Tabela 2.
3.2 Protótipo
A TRIIIAD (TRIple-Layered Intelligent and Integrated Architecture for Datacen-
ters), foca no acoplamento entre a orquestração da nuvem e o controle da rede. A TRIIIAD
é composta por três camadas horizontais e um plano vertical de controle, gerência e
orquestração (VASSOLER, 2015).
A implementação da TRIIAD é um data center de pequena escala. Utiliza uma
topologia centrada em servidor onde cada nó da rede está conectado a outros três nós
formando um cubo (Topologia Hypercube), conforme mostra a Figura 18. Uma visão geral
sobre o protótipo será dada nessa seção.
A princípio, a TRIIIAD foi projetada para utilização como um data center para
fornecer infraestrutura como serviço. Entretanto, ficaram claras as vantagens de se utilizar
a proposta em conjunto com o paradigma NFV (ver Seção 2.7). Desta forma, o protótipo
foi adaptado e expandido para implementação da arquitetura VirtPhy, conforme proposta
descrita em (VASSOLER; RIBEIRO, 2017).
A implementação foi construída sobre uma versão modificada do OpenStack Icehouse.
Para o OpenStack, cada nó físico na rede tem uma ou mais funções que são determinadas
pelos serviços instalados no servidor. Um nó pode ser um nó de rede, um nó de computação,
um nó controlador ou um nó de armazenamento.
O mecanismo original de encaminhamento no hipercubo é baseado em um Source
Routing Protocol, no qual um servidor usa uma única operação XOR sobre seus vizinhos
50 Capítulo 3. VirtPhy
para encontrar o próximo salto. Este esquema é simples, eficiente e livre de pesquisas em
tabelas de rota.
Cada vértice do cubo, mostrado na Figura 18, é um nó de computação que executam
um hypervisor (KVM, ESX, Hyper-V ou XenServer). O nó de computação lida com o
serviço de computação (nova) e um agente Open vSwitch (neutron)(KTENZER, 2015).
Conforme mostra a Figura 19, as arestas do cubo são enlaces. Cada nó tem cinco
interfaces de rede, sendo três delas conectadas a um outro nó, uma quarta interface conec-
tada ao controlador de rede e a quinta interface é conectada a uma Rede de Gerenciamento.
Em uma topologia tradicional centrada em rede, todos os nós de computação estariam
conectados na mesma hierarquia em uma rede de dados. Já no protótipo, a rede se dá
pela interconexão entre os nós formando uma topologia de cubo.
A rede de gerência é usada pelo próprio OpenStack para outras configurações
como acesso à Internet do hospedeiro, acesso SSH e comunicação entre os serviços. Já a
comunicação entre máquinas virtuais se dá pela rede de dados que foi alterada e passa a
ser necessária configuração adicional para que uma máquina virtual se comunique com
outras.
O protótipo utiliza o OpenStack utilizando Open vSwitch para habilitar o acesso à
rede. Portanto tem-se dois switches virtuais presentes em cada nó. Estes dois switches são
dois importantes pontos de tomada de decisão para a realização do SFC.
Conforme descrito em (DOMINICINI et al., 2016), as regras OpenFlow para
3.3. Escopo 51
3.3 Escopo
A implementação do orquestrador proposto por este trabalho é feita sobre a arqui-
tetura VirtPhy em protótipo já existente e funcional. Este trabalho foca na automatização
das ações de alguns dos elementos da arquitetura, conforme pode ser visto na Figura 20.
Os principais pontos são:
• Decisões de posicionamento;
52 Capítulo 3. VirtPhy
• Decisões de encadeamento;
4 Projeto da Arquitetura
Figura 21 – Fluxo de trabalho desde o recebimento de uma demanda de serviço até a sua
operação. Elaborado pelo autor.
O cliente é uma aplicação CLI que faz solicitações para o orquestrador. É útil para
facilitar o acesso às funcionalidades do orquestrador, pois abstrai alguns pontos relativos à
comunicação. A entrada e saída de dados do cliente é por meio do formato YAML que é
um formato mais compacto que o formato JSON utilizado para a comunicação entre os
componentes.
Toda a comunicação com o orquestrador pode se dar por requisições HTTP.
Entretanto, em um ambiente de testes o uso do cliente pode ser mais produtivo.
seguir seu caminho natural. Tráfego 2 deve passar pelo firewall antes de entrar em um
serviço de detecção de intrusão (intrusion detection system - IDS ). Já o tipo de Tráfego 3,
deve ser redirecionado para serviços de NAT e caching, nessa ordem.
Um serviço pode ser especificado pelas seguintes informações:
• porta de origem;
• porta de destino;
• ou qualquer outro elemento que possa ser detectado pelo responsável pelo direciona-
mento do tráfego.
Figura 23 – Exemplo de tipos de serviços que podem ser implementados com funções de
rede disponíveis no catálogo.
Figura 24 – Fluxo de dados no módulo otimizador. Verifica-se que são fornecidas requisições
e infraestrutura e como resultado é dado um posicionamento e encadeamentos
otimizados.
Deseja-se que o otimizador seja uma caixa-preta que possa ser substituída de acordo
com a necessidade. Entretanto, cada otimizador utiliza uma padrão diferente de entrada e
saída de dados decorrente de um contexto de escassez de padrões universalmente aceitos.
Essa falta de padrões de comunicação implica na incapacidade de se trocar o módulo
sem que isso represente mudanças significativas na implementação. Uma abordagem seria
estabelecer um padrão de entrada e saída de informações e prever a existência de um módulo
tradutor que englobaria o otimizador, conforme Figura 25. Desta forma, o administrador
da nuvem pode implementar qualquer solução de otimização bastando ter em vista que
precisa traduzir as entradas e saídas.
Uma vez estabelecida essa abordagem, é preciso um esforço para estabelecer padrões
de entrada e saída que possam ser traduzidos para um formato que o otimizador utilizado
é capaz de utilizar.
4.2. Etapa de Otimização 57
4.2.1.1 Topologia
• o nome e IP do hospedeiro.
• mapa de portas que informa qual NIC está conectada a qual hospedeiro vizinho;
Através do protocolo LLDP (ver Seção 2.5) é possível fazer uma inferência da
topologia. Entretanto, os dados obtidos pelo protocolo são guardados em uma tabela
armazenada localmente no servidor. Para se obter esta informações, basta redirecionar
pacotes do tipo LLDP para o controlador SDN. Esta regra é adicionada no switch virtual
do qual deseja-se obter informações topológicas. Desta forma, toda a informação sobre a
topologia do data center é centralizada no controlador SDN.
• e capacidade de processamento.
• escolher um hospedeiro;
Da otimização, precisa-se que se tenha dados completos sobre cada salto na topologia.
Para a Figura 28 o resultado esperado da otimização seria:
Tendo em vista todo o processo descrito, pode-se elaborar uma arquitetura para o
serviço de implementação do encadeamento de funções de rede conforme na Figura 30. Os
blocos chamados de Gerenciador de Topologia e Gerenciador de SFC são os controladores
associados aos switches virtuais br-eth e br-int, respectivamente.
O Orquestrador recebe uma solicitação de serviço, otimiza o encadeamento que
implementa o serviço e por meio do controlador SDN, faz o cadastro das regras de fluxo.
Os dados referentes as regras instaladas são armazenadas no banco de dados da aplicação.
Algumas das ações descritas são paralelas ao processo descrito na etapa de posicio-
namento e outras são depois do posicionamento. Não há nenhuma ação executada antes
da tarefa de posicionamento.
O Agente Remoto é um serviço distribuído que roda em todos os nós na rede que
executa tarefas que precisam ser executadas localmente. A arquitetura VirtPhy prevê um
elemento deste tipo e chama de monitor. A comunicação com este módulo precisa seguir
padrões bem estabelecidos.
4.3. Etapa de Implementação 63
Figura 29 – Caminho percorrido pelo pacote visto pelo ponto de vista dos elementos que
formam a topologia. Elaborada pelo autor
5 Implementação da Arquitetura
5.1 Otimizador
A implementação do Módulo Otimizador não é parte do escopo deste trabalho. O
esforço empreendido no desenvolvimento do Orquestrador é de forma a criar uma interface
que permita a utilização do Otimizador como se fosse uma caixa-preta. Por isso a existência
do módulo tradutor que atua na arquitetura fazendo a tradução da entrada e saída do
otimizador de forma o seja possível a tarefa de otimização.
A implementação feita para testes é um otimizador fictício que recebe requisições
de serviços e dados da infraestrutura, providos pelo orquestrador, e retorna dados do
posicionamento e encadeamento de VNFs desenvolvidos para melhor caracterização da
operação.
5.2.1 Hospedeiros
Hospedeiros (hosts) são informações acerca dos nós da topologia. São de interesse,
principalmente, do otimizador, que pode utilizar os dados para obter um hospedeiro
66 Capítulo 5. Implementação da Arquitetura
• URL: /wheke/api/v1.0/host
5.2.2 Enlace
Enlaces (links) são as conexões entre hospedeiros (hosts). São importantes para o
roteamento escolhido pelo otimizador, por exemplo. Há apenas o método de GET, uma
vez que a informação é dada pela infraestrutura instalada e pelo usuário. O Código 2
exemplifica como seria a representação de um enlace no formato utilizado pelo orquestrador.
• URL: /wheke/api/v1.0/link
• URL: /wheke/api/v1.0/vnfd
• URL: /wheke/api/v1.0/register
5.2. Padrões de Comunicação entre Componentes 69
• URL: /wheke/api/v1.0/vnfi
Tabela 7 – Campos de dados de uma instância de função de rede com tipos e descrições
Item Tipo Descrição
"instancia3" String Nome da VNFI
type String Tipo do Recurso
properties Seção de propriedades do recurso
host_id Inteiro Identificador da VM fonte de tráfego
node_instance Inteiro Identificador incremental da VNF desse tipo dentro de hospe-
deiro
type_id Inteiro NF tipo de acordo com o arquivo de infra-estrutura
• URL: /wheke/api/v1.0/sfc
1 {
2 " req0 " : {
3 " request_id " : 0 ,
4 " type " : " vnffg " ,
5 " properties " : {
6 " graph " : [
7 {
8 " node " : 0 ,
9 " vnfs " : [
10 {
11 " node_instance " : 4 ,
12 " vnf_type " : 4
13 },
14 {
15 " node_instance " : 0 ,
16 " vnf_type " : 2
17 }
18 ]
19 },
20 {
21 " node " : 2 ,
22 " vnfs " : []
23 },
24 {
25 " node " : 3 ,
26 " vnfs " : []
27 },
28 {
29 " node " : 1 ,
30 " vnfs " : [
31 {
32 " node_instance " : 7 ,
33 " vnf_type " : 3
34 }
35 ]
36 }
37 ]
38 }
39 }
40 }
5.4 Cliente
O cliente é uma ferramenta CLI que tem por objetivo facilitar a utilização da apli-
cação. Utilizando o cliente é possível fazer solicitação de dados em relação a infraestrutura,
assim como fazer o posicionamento e o encadeamento de tráfego.
A entrada e saída de dados é feita por meio de arquivos no formato YAML. Os
campos presentes são os mesmos já explicados na Seção 5.2
5.4. Cliente 73
Figura 31 – Diagrama UML das tabelas do banco de dados. Elaborada pelo autor
5.4.1 Infraestrutura
Para obtenção da infraestrutura execute o comando dado no Código 7.
1 python client . py infra --f " caminho / para / arquivo / de / saida . yaml "
19 # # Descritor de VNF
20 type_01 :
21 id : 1
22 type : vnfd
23 properties :
24 cpu : 4
25 nf_type : proxy
26 pr_capacity : 900
27 bandwidth : 10
Código 9 – Comando para criação de descritores de funções de rede pelo cliente CLI
O arquivo de entrada dever ser no formato YAML como mostrado no Código 10.
1 type_01 :
2 type : VNFD
3 properties :
4 nf_type : proxy
5 image : ubuntu_SFC
6 flavor : m1 . small
7 bandwidth : 10
8 cpu : 8
9 pr_capacity : 600
7 source_host : 0
8 destination_ip : 10.10.1.111
9 destination_port : 80
10 destination_host : 1
11 protocol : udp
12 bandwidth : 100
13 vnffg : [4 , 2 , 3]
O arquivo de entrada dever ser no formato YAML como mostrado no Código 16.
1 req0 :
2 request_id : 0
3 type : vnffg
4 properties :
5 vnffg : [4 , 2 , 3]
6 graph :
7 - node : 0
8 vnfs :
9 - node_instance : 4
10 vnf_type : 4
11 - node_instance : 0
76 Capítulo 5. Implementação da Arquitetura
12 vnf_type : 2
13 - node : 2
14 vnfs : []
15 - node : 3
16 vnfs : []
17 - node : 1
18 vnfs :
19 - node_instance : 7
20 vnf_type : 3
5.5 Infraestrutura
A infraestrutura utilizada durante a implementação foi explicada na Seção 3.2.
Conforme já foi dito, o protótipo utiliza uma versão modificada do OpenStack na versão
IceHouse. Cada vértice do cubo é um nó de computação que executam um KVM hypervisor.
O nó de computação lida com o serviço de computação (nova) e um agente Open vSwitch
(neutron).
O mecanismo de encaminhamento utilizado é o KeyFlow (ver Seção 2.3) que realiza
o encaminhamento baseado em um identificador presente no campo MAC de destino no
cabeçalho Ethernet.
• Gerenciador de SFC: que está conectado ao switch virtual br-int dos hospedeiros
e é responsável pela instalação das regras OpenFlow.
5.6. Controlador SDN 77
• ofctl_rest;
• rest_topology;
• br_int_controller.
• URL: http://192.168.1.235:8081/v1.0/topology/switches
1 [
2 {
3 " ports " : [
4 {
5 " hw_addr " : " 9 a : d2 : c0 :5 b :81:01 " ,
6 " name " : " int - br - eth " ,
7 " port_no " : " 00000002 " ,
8 " dpid " : " 000046 baa11ebd48 "
9 }
10 ],
11 " dpid " : " 000046 baa11ebd48 "
12 },
13 {
14 " ports " : [
15 {
16 " hw_addr " : " 96:81: ea :2 e : e5 : c1 " ,
17 " name " : " int - br - eth " ,
18 " port_no " : " 00000004 " ,
19 " dpid " : " 00000 eca0a523f4c "
20 }
21 ],
22 " dpid " : " 00000 eca0a523f4c "
23 }
24 ]
7
8 OFP_VERSIONS = [ ofproto_v1_0 . OFP_VERSION ]
9
10 def __init__ ( self , * args , ** kwargs ) :
11 super ( BrIntController , self ) . __init__ (* args , ** kwargs )
12 self . bridges = []
13
14 wsgi = kwargs [ ' wsgi ']
15 wsgi . register ( RestController , { b ri n t _ in s t an c e _n a m e : self })
16
17
18 class RestController ( ControllerBase ) :
19 def __init__ ( self , req , link , data , ** config ) :
20 super ( RestController , self ) . __init__ ( req , link , data , ** config )
21 self . brint_app = data [ b ri n t _i n s ta n c e_ n a m e ]
22
23 @route ( ' hcube ' , '/ hcube / hosts ' , methods =[ ' GET ' ])
24 def get_nodes ( self , req , ** kwargs ) :
25 return self . _switches ()
26
27 def _switches ( self ) :
28 dpid = None
29 switches = get_switch ( self . brint_app , dpid )
30 body = json . dumps ([{ ' dpid ': hex ( switch . dp . id ) [2:]. zfill (16) , ' ip
': switch . dp . socket . getpeername () [0]} for switch in switches ])
31 return Response ( content_type = ' application / json ' , body = body )
É criada uma rota na /hcube/hosts (Código 20 - linha 23) que ao ser requisitada
retorna o mapeamento IP-Hospedeiro. Um exemplo é dado no Código 21.
1 [
2 {
3 " ip " : " 192.168.1.243 " ,
4 " dpid " : " 000046 baa11ebd48 "
5 },
6 {
7 " ip " : " 192.168.1.244 " ,
8 " dpid " : " 00000 eca0a523f4c "
9 },
10 {
11 " ip " : " 192.168.1.241 " ,
12 " dpid " : " 0000 aeaf9cc07545 "
13 },
14 {
15 " ip " : " 192.168.1.242 " ,
80 Capítulo 5. Implementação da Arquitetura
• Nome do hospedeiro;
• Endereço IP do hospedeiro;
Para se obter os dados, basta fazer uma requisição à rota /hcube/hosts e o serviço
roda no controlador de SDN na porta 8080. O formato da requisição e um exemplo de
resultado é dada como abaixo:
• URL: http://192.168.1.235:8080/hcube/hosts
1 [
2 {
3 " ip " : " 192.168.1.244 " ,
4 " name " : " nfv -011 " ,
5 " keyflow " :13 ,
6 " dpid " : " 000014187730 fb50 "
7 },
8 {
9 " ip " : " 192.168.1.243 " ,
10 " name " : " nfv -010 " ,
11 " keyflow " :17 ,
12 " dpid " : " 000014187730 fb7c "
13 },
14 {
15 " ip " : " 192.168.1.242 " ,
16 " name " : " nfv -001 " ,
17 " keyflow " :11 ,
18 " dpid " : " 0000141877310 a14 "
19 },
20 {
21 " ip " : " 192.168.1.241 " ,
22 " name " : " nfv -000 " ,
23 " keyflow " :19 ,
24 " dpid " : " 0000141877310 e5f "
25 }
26 ]
• URL: <ip_hospedeiro>:8083
A interface com o agente é feita por requisições HTTP. O método GET retorna os
dados relativos e o formato é dados como exemplificado no Código 26.
• URL: <ip_hospedeiro>:8083
5.9 Orquestrador
O módulo do orquestrador presenta na arquitetura da Figura 22 é o responsável
pela inteligência da aplicação. O Orquestrador media a interação entre os demais módulos.
As principais tarefas executadas por este módulo são:
• nome da instância;
86 Capítulo 5. Implementação da Arquitetura
Com estes dados é gerada uma entrada no banco de dados do orquestrador e criada
a máquina virtual. O processo de criação é de responsabilidade da VIM. No contexto desta
aplicação a VIM utilizada foi o OpenStack.
A criação é realizada pela função launch_instance na linha 21 do Código 28. Esta
função é implementada usando a API Python do OpenStack. É um método bloqueante e
portanto a execução do programa só continua após sua conclusão.
1 def e xecute _plac ement ( data ) :
2 network = " provider "
3
4 for name in data :
5 value = data [ name ]
6 if value [ ' type '] == ' vnfi ':
7 host = Host . query . get ( value [ ' properties ' ][ ' host_id ' ])
8 vnfd = VNFD . query . get ( value [ ' properties ' ][ ' type_id ' ])
9
10 if host is None :
11 print ( " Host not found " )
12 continue
13
14 if vnfd is None :
15 print ( " VNFD not found " )
16 continue
17
18 vnfi = VNFI ( name = name , host_id = host . id , vnfd_id = vnfd . id ,
19 node_instance = value [ ' properties ' ][ ' node_instance ' ])
20
21 vnfi_ip = openstack . launch_instance ( image_name = vnfd . image ,
22 image_flavor = vnfd . flavor ,
23 instance_name = vnfi . name ,
24 avai labil ity_zo ne = host . av ailabi lity_z one )
25
26 port = openstack . get_port_details ( ip = vnfi_ip )
27
28 vnfi . ip = port [ " ipv4 " ]
29 vnfi . mac = port [ " mac " ]
30 vnfi . openflow_port = _ ge t _ op f _ v m_ d e ta i l s ( tap = port [ " tap " ])
31
32 firewall_handler ( host . host_ip , vnfi . ip )
5.9. Orquestrador 87
33
34 db . session . add ( vnfi )
35 db . session . commit ()
6 Caracterização de Funcionamento
vez que recebe o fluxo mais não o encaminha. O tráfego nas máquinas virtuais nos
saltos seguintes do SFC é esperado que seja nulo, por consequência do desligamento
da VNFI;
5. Caso haja mais funções de rede no SFC, é realizado o mesmo procedimento do Item
3, com a diferença que a VNFI desligada é a próxima no salto do SFC. O teste segue
esse procedimento até que todas as VNFIs do SFC sejam testadas.
Os gráficos gerados do experimento contém médias dos valores dos testes que
foram executados 3 vezes. O resultado esperado é que o tráfego na VM de destino cesse
por um número de vezes exatamente igual ao número de VNFI no SFC. Para facilitar a
visualização dos casos, em todos os cenários, a origem e do destino do tráfego encontram-se,
respectivamente, nos hospedeiros NFV-000 e NFV-001 (Figura 32).
6.2 Cenário 1
O Cenário 1 é descrito na Figura 32. Neste cenário, tem-se a necessidade de
implementar um serviço que seja do tipo SRC -> SFF2 -> SFF4 -> DST. Então, é enviada
uma requisição, como mostrado no Código 29, ao otimizador.
1 cenario -1 - ida :
2 type : request
3 properties :
4 source_ip : 10.0.101.17
5 source_port : 80
6 source_host : 3
7 destination_ip : 10.0.101.15
8 destination_port : 80
9 destination_host : 4
10 protocol : udp
11 bandwidth : 100
12 vnffg : [2 , 4]
9 vnfs :
10 - { node_instance : 0 , vnf_type : 1}
11 - node : 6
12 vnfs :
13 - { node_instance : 0 , vnf_type : 1}
14 - node : 4
15 vnfs : []
As regras então são geradas e instaladas nos switches virtuais. As regras instaladas
para este cenário são detalhadas no Apêndice B na Tabela 12.
Após o posicionamento ser completo e executado o cadastro das regras nos switches,
o script de teste é executado. O funcionamento do encadeamento, conforme descrito na
Seção 6.1, pode ser verificado no gráfico da Figura 34.
6.3 Cenário 2
O Cenário 2 foi elaborado de forma a mostrar a execução do SFC quando o tráfego
precisa passar por um hospedeiro sem subir a nível das VMs. O cenário é descrito na
Figura 35. Neste cenário, tem-se a necessidade de implementar um serviço que seja do tipo
SRC -> SFF2 -> DST. Então, é enviada uma requisição, como mostrado no Código 32,
ao otimizador.
6.3. Cenário 2 93
1 cenario -2 - ida :
2 type : request
3 properties :
4 source_ip : 10.0.101.17
5 source_port : 80
6 source_host : 3
7 destination_ip : 10.0.101.15
8 destination_port : 80
9 destination_host : 4
10 protocol : udp
11 bandwidth : 100
12 vnffg : [2]
O módulo otimizador escolhe os hospedeiros NFV-010 para SFF2, bem como define
a rota para a realização do SFC. O resultado da otimização é repassado ao orquestrador
por meio de HTTP POST. O posicionamento é descrito em Código 33 e a rota escolhida é
descrita em Código 34.
1 sff2 :
2 properties :
3 host_id : 5
4 node_instance : 0
5 type_id : 1
6 ip : 10.0.101.22
94 Capítulo 6. Caracterização de Funcionamento
7 type : vnfi
As regras então são geradas e instaladas nos switches virtuais. As regras instaladas
para este cenário são detalhadas no Apêndice B na Tabela 14.
Após o posicionamento ser completo e executado o cadastro das regras nos switches,
o script de teste é executado. O funcionamento do encadeamento, conforme descrito na
Seção 6.1, pode ser verificado no gráfico da Figura 37.
6.4 Cenário 3
O Cenário 3 foi elaborado para exemplificar o funcionamento da solução de SFC
quando existem duas máquinas virtuais que fazem parte do encadeamento no mesmo
hospedeiro, e uma destas é a origem do tráfego. Quando uma das máquinas virtuais do
salto é a origem do tráfego é um caso especial que deve ser tratado. O cenário é descrito na
Figura 38. Neste cenário, tem-se a necessidade de implementar um serviço que seja do tipo
SRC -> SFF1 -> DST. Então, é enviada uma requisição, como mostrado no Código 35,
ao otimizador.
1 cenario -3 - ida :
2 type : request
3 properties :
4 source_ip : 10.0.101.17
5 source_port : 80
6 source_host : 3
7 destination_ip : 10.0.101.15
8 destination_port : 80
9 destination_host : 4
10 protocol : udp
11 bandwidth : 100
12 vnffg : [1]
O módulo otimizador escolhe os hospedeiros NFV-000 para SFF1, bem como define
a rota para a realização do SFC. O resultado da otimização é repassado ao orquestrador
por meio de HTTP POST. O posicionamento é descrito em Código 36 e a rota escolhida é
descrita em Código 37.
1 sff1 :
2 properties :
3 host_id : 3
4 node_instance : 0
5 type_id : 1
6 ip : 10.0.101.21
7 type : vnfi
8
6.5 Cenário 4
O Cenário 4 foi criado para exemplificar o funcionamento da solução de SFC quando
existem duas máquinas virtuais que fazem parte do encadeamento no mesmo hospedeiro,
e uma destas é o destino do tráfego. O cenário é descrito na Figura 41. Neste cenário,
tem-se a necessidade de implementar um serviço que seja do tipo SRC -> SFF5 -> DST.
Então, é enviada uma requisição, como mostrado no Código 38, ao otimizador.
1 cenario -4 - ida :
2 type : request
3 properties :
6.5. Cenário 4 99
4 source_ip : 10.0.101.17
5 source_port : 80
6 source_host : 3
7 destination_ip : 10.0.101.15
8 destination_port : 80
9 destination_host : 4
10 protocol : udp
11 bandwidth : 100
12 vnffg : [5]
O módulo otimizador escolhe os hospedeiros NFV-001 para SFF5, bem como define
a rota para a realização do SFC. O resultado da otimização é repassado ao orquestrador
por meio de HTTP POST. O posicionamento é descrito em Código 39 e a rota escolhida é
descrita em Código 40.
1 sff5 :
2 properties :
3 host_id : 4
4 node_instance : 0
5 type_id : 1
6 ip : 10.0.101.25
7 type : vnfi
As regras então são geradas e instaladas nos switches virtuais. As regras instaladas
para este cenário são detalhadas no Apêndice B na Tabela 18.
Após o posicionamento ser completo e executado o cadastro das regras nos switches,
o script de teste é executado. O funcionamento do encadeamento, conforme descrito na
Seção 6.1, pode ser verificado no gráfico da Figura 43.
6.6. Cenário 5 101
6.6 Cenário 5
O Cenário 5 foi elaborado para exemplificar o funcionamento da solução de SFC
quando existem duas máquinas virtuais que fazem parte do encadeamento no mesmo
hospedeiro, e ambas são VNFIs. O cenário é descrito na Figura 44. Neste cenário, tem-se a
necessidade de implementar um serviço que seja do tipo SRC -> SFF2 -> SFF3 -> DST.
Então, é enviada uma requisição, como mostrado no Código 41, ao otimizador.
1 cenario -5 - ida :
2 type : request
3 properties :
4 source_ip : 10.0.101.17
5 source_port : 80
6 source_host : 3
7 destination_ip : 10.0.101.15
8 destination_port : 80
9 destination_host : 4
10 protocol : udp
11 bandwidth : 100
12 vnffg : [2 , 3]
6 - node : 3
7 vnfs : []
8 - node : 5
9 vnfs :
10 - { node_instance : 0 , vnf_type : 1}
11 - { node_instance : 1 , vnf_type : 1}
12 - node : 6
13 vnfs : []
14 - node : 4
15 vnfs : []
As regras então são geradas e instaladas nos switches virtuais. As regras instaladas
para este cenário são detalhadas no Apêndice B na Tabela 20.
Após o posicionamento ser completo e executado o cadastro das regras nos switches,
o script de teste é executado. O funcionamento do encadeamento, conforme descrito na
Seção 6.1, pode ser verificado no gráfico da Figura 46.
104 Capítulo 6. Caracterização de Funcionamento
7.1 Conclusões
Referências
CHECKO, A. et al. Cloud ran for mobile networks—a technology overview. IEEE
Communications surveys & tutorials, IEEE, v. 17, n. 1, p. 405–426, 2015. Citado na
página 23.
ETSI, N. Etsi gs nfv 002 v1. 1.1 network functions virtualization (nfv). Architectural
Framework. sl: ETSI, 2013. Citado 3 vezes nas páginas 24, 28 e 29.
GUO, C. et al. Bcube: a high performance, server-centric network architecture for modular
data centers. ACM SIGCOMM Computer Communication Review, ACM, v. 39, n. 4, p.
63–74, 2009. Citado na página 42.
GUO, C. et al. Dcell: a scalable and fault-tolerant network structure for data centers. In:
ACM. ACM SIGCOMM Computer Communication Review. [S.l.], 2008. v. 38, n. 4, p.
75–86. Citado na página 42.
WELTE, H. The netfilter framework in linux 2.4. In: Proceedings of Linux Kongress. [S.l.:
s.n.], 2000. Citado na página 37.
ZHANG, Q.; CHENG, L.; BOUTABA, R. Cloud computing: state-of-the-art and research
challenges. Journal of internet services and applications, Springer, v. 1, n. 1, p. 7–18, 2010.
Citado na página 39.
Apêndices
113
Neste apêndice são detalhadas as regras instaladas nos switches virtuais para a
realização do encaminhamento do tráfego de rede de modo a implementação de um serviço.
São analisados todos os casos descritos na Seção 5.9.4
Figura 47 – Caso 1 na qual as duas máquinas virtuais são funções de rede. a) no mesmo
hospedeiro b) hospedeiros diferentes.
Quando as duas máquinas virtuais estão no mesmo hospedeiro (Figura 47-a) cria-se
apenas uma regra para encaminhar o fluxo de uma VM para a outra. Utiliza-se a regra do
Código 44, onde verifica-se se o MAC de destino do pacote corresponde ao identificador
do salto anterior e se a porta de ingresso no switch virtual é a porta da máquina virtual
origem do salto. Em conformidade com o classificador o pacote é encaminhado a porta da
máquina virtual destino do salto sem alterações.
1 {
2 " dpid " : < dpid do switch do hospedeiro > ,
3 " priority " : < id flow + 101 > ,
4 " match " :{
114 APÊNDICE A. Regras para encadeamento em diferentes casos de posicionamento
Quando em máquinas diferentes, instala-se duas regras Código 45. A primeira regra
classifica o fluxo egresso da máquina virtual de origem. A classificação é feita verificando
se o MAC de destino corresponde ao identificador da rota anterior e se a porta de ingresso
no switch é a porta da VM de origem do salto. Em caso positivo, o MAC de destino é
alterado para o identificador do salto atual e o pacote é encaminhado para a saída normal
do switch.
A segunda regra (Código 45 - linha 17) verifica se o MAC de destino do pacote
corresponde ao identificador da rota atual. Em caso positivo, o pacote é encaminhado a
porta da VM de destino sem alterações.
Quando em hospedeiros diferentes (Figura 47-b), são criadas duas regras que são
instaladas nos dois switches virtuais dos dois hospedeiros envolvidos no salto. A primeira
regra é instalada no switch virtual no hospedeiro de origem do salto. A outra regra é
instalada no switch virtual do hospedeiro onde a máquina virtual de destino do salto se
encontra alocada.
1 {
2 {
3 " dpid " : < dpid do switch do hospedeiro da VM origem > ,
4 " priority " : < id flow + 101 > ,
5 " match " :{
6 " dl_dst " : < identificador do salto anterior > ,
7 " in_port " : < porta da vm de origem do salto >
8 },
9 " actions " :[
10 {
11 " type " : " OUTPUT " ,
12 " port " : < porta int - br - eth do switch OVS >
13 }
14 ]
15 },
16 {
17 " dpid " : < dpid do switch do hospedeiro da VM Destino > ,
A.2. Caso 2 - Origem do salto é a origem do tráfego 115
12 {
13 " type " : " SET_DL_DST " ,
14 " dl_dst " : < identificador do salto atual >
15 },
16 {
17 " type " : " OUTPUT " ,
18 " port " : < porta int - br - eth do switch OVS >
19 }
20 ]
21 },
22 {
23 " dpid " : < dpid do switch do hospedeiro da VM Destino > ,
24 " priority " : < id flow + 101 > ,
25 " match " :{
26 " dl_dst " : < identificador do salto atual > ,
27 },
28 " actions " :[
29 {
30 " type " : " OUTPUT " ,
31 " port " : < porta da vm de destino do salto >
32 }
33 ]
34 }
35 }
7 },
8 " actions " :[
9 {
10 " type " : " SET_DL_DST " ,
11 " dl_dst " : < MAC VM de destino >
12 },
13 {
14 " type " : " OUTPUT " ,
15 " port " : < porta da VM de destino >
16 }
17 ]
18 }
Quando em hospedeiros diferentes (Figura 49-b), são elaboradas duas regras (Có-
digo 49). A regra que classifica o tráfego da máquina de origem do salto verifica se o fluxo
tem origem na porta da máquina de origem do salto e se o MAC de destino corresponde
ao ID da salto anterior. Quando o pacote é capturado pela regra, o MAC de destino é
reescrito com o identificador do salto atual e segue o fluxo normal.
1 {
2 {
3 " dpid " : < dpid do switch do hospedeiro da VM origem > ,
4 " priority " : < id flow + 101 > ,
5 " match " :{
6 " dl_dst " : < identificador do salto anterior > ,
7 " in_port " : < porta da vm de origem do salto >
8 },
9 " actions " :[
A.3. Caso 3 - Destino do salto é o destino do tráfego 119
10 {
11 " type " : " OUTPUT " ,
12 " port " : < porta int - br - eth do switch OVS >
13 }
14 ]
15 },
16 {
17 " dpid " : < dpid do switch do hospedeiro da VM Destino > ,
18 " priority " : < id flow + 101 > ,
19 " match " :{
20 " dl_dst " : < identificador do salto atual > ,
21 },
22 " actions " :[
23 {
24 " type " : " SET_DL_DST " ,
25 " dl_dst " : < MAC VM de destino >
26 },
27 {
28 " type " : " OUTPUT " ,
29 " port " : < porta da VM de destino >
30 }
31 ]
32 }
33 }
B.2 Cenário 1
Após provisionadas, obtém-se os seguintes dados sobre as VNFIs, dados na Tabela
11. Estas informações serão usadas para a construção das regras para o Cenário 1.
B.3 Cenário 2
Após provisionadas, obtém-se os seguintes dados sobre as VNFIs, dados na Tabela
13. Estas informações serão usadas para a construção das regras para o Cenário 2.
B.4 Cenário 3
Após provisionadas, obtém-se os seguintes dados sobre as VNFIs, dados na Tabela
15. Estas informações serão usadas para a construção das regras para o Cenário 3.
B.5 Cenário 4
Após provisionadas, obtém-se os seguintes dados sobre as VNFIs, dados na Tabela
17. Estas informações serão usadas para a construção das regras para o Cenário 4.
B.6 Cenário 5
Após provisionadas, obtém-se os seguintes dados sobre as VNFIs, dados na Tabela
19. Estas informações serão usadas para a construção das regras para o Cenário 5.