OpenFlow

UFRJ - EEL879 - Redes de Computadores 2 - 2019.2

Alunos:
Felipe Assis
Lidiana Souza dos Anjos

Introdução


Motivações


Tradicionalmente, as redes são controladas por algoritmos especiais implementados em hardwares dedicados, proprietários, fechados e de alto custo. Mudanças no funcionamento avançado do equipamento, especializações ou inserções de novas funcionalidades são dependentes do fabricante e de seu ciclo de desenvolvimento e testes. Tais problemas não só trazem prejuízos a quem use os aparelhos de maneira prática e comercial, mas também no que se refere a pesquisa. Tanto o alto custo como a falta de flexibilidade dificultam ambientes experimentais, com diferentes topologias, funcionalidades e protocolos, atrasando assim a evolução da tecnologia.

A solução encontrada para combater os prejuízos vindos de hardware proprietários se deu em implementar as regras de manipulação dos dados por meio de software programável, ao invés de um que vem incorporado no hardware. Com isso, é possível resolver tanto o problema da falta de flexibilidade, agora tendo os equipamentos completamente programáveis, tanto quanto o problema do preço, pois poderia ser usado um equipamento universal e genérico, sem a dependência dos grandes fabricantes. Tal tecnologia é chamada de Redes Definidas por Software (SDN).

Redes Definidas por Software


Nos últimos 20 anos, a internet não evoluiu muito em sua arquitetura, apesar de seu grande crescimento. Com o seu crescimento comercial, seus componentes se tornaram caixas pretas, equipamentos os quais são fechados e não há muito controle interno, que não por parte dos fabricantes. Essa estagnação arquitetural é o que é conhecido como o engessamento da internet.

As Redes Definidas por Software (ou Software-Defined Networks - SDN) vem como uma contraposição a esse modelo. Se trata de uma arquitetura dinâmica, gerenciável, rentável e adaptável, que nos entrega a flexibilidade desejada, assim como o baixo custo. A principal característica de tal arquitetura se dá no desacoplamento dos chamados plano de dados e plano de controle, mais detalhados no tópico seguinte.

As SDN apresentam diversas características vantajosas. Por exemplo, temos padrões abertos que independem de fornecedores, o que flexibiliza o controle e a comunicação da rede. Temos inteligência e velocidade, pois o fluxo de dados pode ser ajustado dinamicamente pela rede, atendendo as demandas e mudanças, assim como uma boa distribuição de carga na rede. E é claro, como já evidenciado, é diretamente programável e tem um controle logicamente centralizado, permitindo aos administradores uma visão e manipulação geral da rede com certa facilidade.

Atualmente existem diversos padrões de protocolos existem para o SDN, porém um se destaca com sua popularidade, o OpenFlow. Como o nome já diz, é aberto e orientado a fluxos, e abstrai usa abstrações de portas e comutadores para controlar o fluxo. Nele também temos controladores universais SDN e comutadores universais SDN.


Plano de Controle e Plano de Dados


Como dito anteriormente, uma das principais características das Redes Definidas por Software é o desacoplamento do Plano de Controle e do Plano de dados. Em redes tradicionais, esses planos se encontram juntos, ou seja, não há uma clara diferenciação dos dois. Os próprios elementos da rede são os responsáveis por fazer o controle de fluxos assim como fazer o próprio encaminhamento do fluxo. Com o SDN, esses planos podem ser separados em dois elementos distintos.

O plano de dados consiste simplesmente nos elementos responsáveis por fazer o encaminhamento na rede. Ou seja, o papel deste plano é majoritariamente encaminhar dados, mas também apresenta as responsabilidades de monitoramento de informações e o ajuntamento de estatísticas.

O plano de controle, como o próprio nome já indica, é responsável por gerenciar o que é feito no plano de dados, visto que ele não possui nenhum tipo de inteligência por si só. Os controladores têm uma visão geral da rede e podem usar informações adquiridas pelo plano de dados para definir como serão as operações feitas na rede. Os controladores podem ser múltiplos, evitando assim problemas por falha no componente central do sistema e se comunicam com os elementos do plano de dados por meio de interfaces padrão.

Arquitetura


Elementos da topologia


A infraestrutura do OpenFlow é composta por um plano de dados com comutadores dentro das especificações do OpenFlow, por um plano de controle com um ou mais controladores e por um canal seguro que viabiliza a comunicação entre os controladores e os comutadores.

Na arquitetura do OpenFlow pode-se ter os comutadores OpenFlow projetados dentro das especificações do protocolo ou componentes físicos que simulem o protocolo. Em ambas as possibilidades, não são eles que tomam as decisões relacionadas aos dados. Eles apenas recebem o tráfego de dados e executam as ações referentes aos metadados dos pacotes que chegam.

Na infraestrutura da Internet há vários tipos de comutadores dos mais variados fabricantes. Um comutador OpenFlow é aquele que atende as especificações técnicas. Desta forma, encontram-se diferentes modelos dentro das especificações estabelecidas e não há dependência de um só fabricante. Então, um padrão é implementado na interface de comunicação entre o controlador e a infraestrutura, de forma que a garantir que essa interface administre diferentes modelos de comutadores.

some text

Figura 1 - Simplificação da topologia do OpenFlow. Fonte: Migração de redes tradicionais para SDN


As aplicações de rede podem controlar o comportamento da rede por meio da abstração da infraestrutura que o controlador apresenta. A principal vantagem do ponto de vista de quem desenvolve as aplicações é que não é necessário conhecer todos os componentes da rede, bastando apenas definir como a rede se comportará num conjunto de possibilidades.

Para além da separação do gerenciamento do Plano de Controle e do Plano de Dados, há componentes importantes para a composição do OpenFlow. São esses o controlador, as tabelas de fluxo e o canal seguro.

Controlador


O controlador é o componente responsável pelas regras e ações que gerenciam o encaminhamento de pacotes. Ele se comunica com o plano de dados e com as aplicações permitindo a comunicação entre esses, garantindo flexibilidade em diversificadas aplicações. O controlador abstrai o que seria a configuração, a priori, dos comutadores.

As seguintes mensagens podem ser trocadas entre o comutador e o controlador:

  • Controlador para comutador: Para saber as funções disponíveis, para configurar ou obter as configurações e para obter informações.

  • Comunicação assíncrona: é feita do comutador a qualquer momento para o controlador para notificar erros ou mudanças de estados e para sinalizar a chegada de pacotes.

  • Comunicação síncrona: tanto o controlador quanto o comutador podem solicitar sem aviso prévio e mensagens como “echo” e “hello” podem ser trocas, muitas vezes para verificar se o canal seguro está disponível.


  • some text

    Figura 2 - Especificação do comutador OpenFlow. Fonte: https://www.gta.ufrj.br/ensino/eel879/trabalhos_vf_2010_2/rodrigo/funcionamento.html


    Uma vez que o pacote chega em um comutador, o cabeçalho desse é comparado com os cabeçalhos das entradas das tabelas de fluxo. A partir disso, as principais ações podem ser tomadas:

  • Encaminhamento do pacote para uma determinada porta;
  • Descarte do pacote;
  • Redirecionamento do pacote para o controlador;
  • Modificação dos campos de cabeçalho do pacote.


  • Tabelas de Fluxo


    Um fluxo representa um tipo de pacote que pode chegar nas entradas dos comutadores. As regras das tabelas de fluxo são definidas de acordo com os de pacotes que serão recebidos. A configuração é baseada nos metadados e nos campos de cabeçalho que estarão juntos ao pacote.

    some text

    Figura 3 - Generalização das tabelas de fluxo. Fonte: Software Defined Networks


    É na entrada da tabela que está definido o pacote que será tratado e nele há campos que são usados na descrição de um fluxo. Esses campos guardam informações como a porta de entrada do fluxo e IP de origem. Dados associados a quantidade de dados, pacotes transmitidos e o tempo de transmissão são determinados pelos contadores como forma de obter dados estatísticos. Ainda, a depender do fluxo, diferentes ações podem ser tomadas e quem as define é o controlador. Essas ações são definidas nos cabeçalhos das Tabelas de Fluxo. A figura 3 representa genericamente a composição das entradas de uma tabela.

    some text

    Figura 4 - ECabeçalho das tabelas de fluxo. Fonte: https://blog.pantuza.com/artigos/o-protocolo-openflow


    A figura 4 representa o cabeçalho associado a um pacote. O cabeçalho é varrido e enviado para o controlador, esse faz o processamento e retorna com as regras das tabelas. O processamento consiste numa comparação do cabeçalho do pacote com o cabeçalho da tabela, se forem iguais, o pacote pertence ao fluxo comparado e as regras são atribuídas a ele.

    As especificações permitem dois modos para definir as regras das tabelas de fluxo:

  • Reativo: os fluxos são configurados quando um determinado pacote chega e possui uma marcação em seu cabeçalho para determinar esses.
  • Proativo: os fluxos são previamente configurados nos comutadores;


  • Canal Seguro


    É por meio do Canal Seguro que o controlador se comunica com os comutadores e a conexão é do tipo TCP (Transmission Control Protocol). É possível criptografar as mensagens entre os comutadores e o controlador por meio do TLS (Transport Layer Security) ou SSL (Secure Socket Layer).

    É por meio do Canal Seguro que o Controlador distribui as regras de encaminhamento. A segurança na comunicação entre o controlador e o comutador pode ser primordial a depender da aplicação.

    Controlador OpenFlow: Out-of-Band e in-Band


    Há duas maneiras do Controlador OpenFlow se comunicar com os comutadores. No primeiro, Out-of-Band, o controlador tem um caminho para se comunicar com os comutadores OpenFlow que não é o caminho usado pelo OpenFlow para a comunicação com os comutadores. No segundo, in-Band, o caminho usado na comunicação com os comutadores é igualmente usado pelo controlador para se comunicar com esses.

    some text

    Figura 2 - Comunicação Out-of-Band e in-Band. Fonte: https://www.researchgate.net/figure/In-band-vs-Out-of-band-The-dashed-lines-represent-OpenFlow-controlled-links_fig1_262274156


    Para viabilizar controle OpenFlow Out-of-Band é necessário estabelecer VLANs ou interfaces físicas que não estão submetidas ao protocolo OpenFlow.

    Protocolo


    Primeiramente, para entender o protocolo OpenFlow, é necessário entender o que é definido como um fluxo, pois toda a decisão de encaminhamento do OpenFlow se dá por parte das tabelas com decisões definidas pelos fluxos. Um fluxo é constituído pelos cabeçalhos do pacote a ser processado pelo dispositivo encaminhador, assim o fluxo pode ser caracterizado pelos campos das camadas de enlace, de rede ou de transporte. Podemos dar como exemplos simples de fluxo como todos os pacotes em uma faixa de endereços IP ou uma conexão TCP em uma porta específica.

    No momento que um pacote chega a um elemento da rede com OpenFlow, seus cabeçalhos são analisados e comparados as entradas da tabela de fluxos. Se houver uma correspondência, os contadores são atualizados e as ações correspondentes são realizadas. Se houver correspondência à mais de uma entrada da tabela, é escolhida a entrada com maior prioridade, por exemplo a que apresenta a entrada mais específica. Caso não exista correspondência com uma entrada da tabela, o pacote é enviado ao controlador que instala uma nova regra nos elementos de encaminhamento com base nesse pacote, que normalmente indica o começo de um novo fluxo. Entre exemplos de ações a serem tomadas, temos a modificação de cabeçalho, descartamento de pacotes, encaminhamento dos pacotes ou envio dos pacotes para o controlador (normalmente para pacotes de controle).

    A seguir, uma breve descrição das 4 primeiras versões:

  • OpenFlow 1.0.0: A versão mais comumente implementada. Há uma ordem na correspondência de campos, começando pelos cabeçalhos de enlace e indo até os de transporte. Várias ações podem ser tomadas para um fluxo e estatísticas do fluxo são tomadas;


  • OpenFlow 1.1.0: Similar à versão anterior mas com mudanças significativas. Não há mais só uma tabela de fluxos, mas várias. Uma entradas numa tabela de fluxo pode ter, além de ações, uma indicação para outra tabela de fluxos. Assim, um pacote pode sofrer ações de diferentes tabelas de fluxo encadeadas. Além disso, uma tabela de fluxos pode apontar para algo novo chamado de tabela de grupos. A tabela de grupos apresenta operações comuns a diversos fluxos;


  • OpenFlow 1.2.0: As principais mudanças dessa versão são a compatibilidade com o IPv6 e a possibilidade de conectar um comutador a diversos controladores;


  • OpenFlow 1.3.0: Novas ferramentas de monitoramento e gerenciamento foram adicionadas. Por exemplo, foram adicionadas as “meter tables” para controlar a taxa dos fluxos. Além disso agora são possíveis conexões auxiliares entre os controladores e os comutadores.


  • Aplicações


    As Redes Definidas por Software por meio de OpenFlow tem se mostrado ser um veículo para a inovação no contexto de redes por trazerem maior flexibilidade e extensibilidade do que arquitetura de redes já existentes. Neste tópico, abordaremos algumas das principais aplicações referentes a esse tipo de inovação.

    Virtualização de redes


    Uma área de grande pesquisa em OpenFlow é a virtualização. Por exemplo, a virtualização de redes. Redes de comutação de pacotes e de circuitos são tipicamente gerenciadas por infraestruturas diferentes, causando um alto custo. Uma arquitetura baseada em OpenFlow pode ser usada para gerenciar redes de pacotes e em circuito com a mesma infraestrutura. Isso é possível pois os dois tipos de redes podem ser gerenciados como dois tipos de fluxos diferentes na tabela de fluxos. O OpenFlow também pode ser usado em redes virtuais de datacentros. Em VLANs tradicionais, existem cabeçalhos com tags de tamanho limitados para identificar a rede, causando limitações. Com a abstração em fluxos do OpenFlow, é possível identificar a rede virtual sem o uso de tags.

    Balanceamento de Carga


    É de se esperar que o OpenFlow possa ser usado para segurança. Sua natureza focada em análise de fluxos permite com que haja um maior cuidado com o que circula pela rede. Por exemplo, se um comutador recebe um pacote cujo endereço é notoriamente nocivo, sua entrada na tabela de fluxos pode indicar que ele seja descartado. Outra problema que pode ser evitado são ataques DoS. Se a frequência de um fluxo excede determinado valor, os pacotes podem ser descartados. Além da análise do conteúdo dos fluxos, o OpenFlow também pode ser útil para flexibilizar a locação dos middleboxes, transmitindo o tráfego diretamente para as middleboxes, dando liberdade para que elas não necessitem estar na borda da rede.

    Disponibilidade e escalabilidade


    Disponibilidade


    Arquiteturas OpenFlow podem atuar de diversas maneiras para garantir disponibilidade. Por exemplo pode ocorrer o balanceamento de carga. Como é uma rede centralizada que colhe estatísticas dos seus membros, é possível que o controlador monitore a rede em tempo real e decida como acomodar o tráfego. Outra maneira de prover disponibilidade é garantir tolerância a falha. Como o controlador tem uma visão geral da rede, ele pode detectar alguma falha de conexão e, como a rede é altamente programável, pode alterar as tabelas de fluxo para contornar o caminho no qual o problema se encontra.

    Escalabilidade


    Na dinâmica do protocolo OpenFlow, a alta capacidade de gerenciamento da rede por parte da aplicação/programador permite que soluções otimizadas sejam implementadas. Em conjunto com uma infraestrutura que pode ter seus recursos extensivamente utilizados para o encaminhamento de pacotes sem gastar com o processamento, a rede se torna altamente escalável.

    Atualmente, há grande empenho na distribuição do plano de controle em servidores com vistas para escalar cada vez mais as possibilidades do OpenFlow.

    Segurança e vulnerabilidades


    A centralização do gerenciamento no Controlador e separação em Plano de Controle e Plano de Dados trazem novos desafios quanto a segurança na utilização do OpenFlow. Além de ataques diretos ao Controlador, podem ocorrer ataques aos comutadores OpenFlow e aos canais de comunicação.

  • No comutador

  • De forma geral, o atacante pode escanear a rede para conseguir informações sobre ela e elaborar como pretende atacar. Conhecendo a topologia da rede, as configurações da rede e obtendo informações da comunicação na rede é possível lançar ataques de grande impacto. Um deles é o ataque Denial-of-Service (DoS) que consiste em tornar indisponível os recursos da rede para quem tenta acessa-la. Pode ser realizado mandando muitas requisições de acesso, desta forma a tabela de fluxos não conseguirá armazenar todos os dados de fluxo que chega. Há também um tipo de ataque DoS que atinge o Plano de Dados fazendo falsas requisições de fluxos, com isso são calculadas regras desnecessariamente e os recursos são consumidos. Sem esses recursos, requisições reais não são atendidas.

  • No controlador

  • No ataque nomeado Spoofing, o atacante toma controle do controlador e pode atuar no encaminhamento dos pacotes criando entradas nas tabelas de fluxo e comprometendo o funcionamento da rede.

    Por meio do ataque Hijachink, o atacante consegue obter diversas informações como senhas, dados das comunicações e pode modificar ou enviar para outros destinos os dados violados.

  • Na comunicação entre Plano de Dados e Plano de Controle

  • Os ataques na comunicação entre Planos de Dados e Plano de Controle visam atacar o canal seguro e impedir ou acessar a troca ou envio de dados de comunicação, respectivamente.

    Nos ataques conhecidos como Man-in-the-middle, o atacante pode se camuflar como um dos elementos na comunicação e enviar informações falsas ou coletar informações que estão sendo trocadas. Esses tipos de ataques são difíceis de detectar e comprometem a segurança na troca de informações sensíveis

    Conclusão

    O Protocolo OpenFlow representa uma mudança de paradigma e um grande avanço para a Internet. Cada vez mais tem-se implementado redes baseadas no OpenFlow e a ONF (Open Networking Foundation) é a grande organização por trás da manutenção e desenvolvimento do protocolo, ela têm realizado pesquisas em torno do assunto e contribuido para a difusão do protocolo.

    Perguntas

    1 - O que é um fluxo?


    é a representação de um tipo de pacote que pode chegar em um comutador.

    2 - Quais as principais ações executadas pelos comutadores?


    Encaminhamento, descarte, redirecionamento e modificação do cabeçalho de um pacote.

    3 - Como o OpenFlow pode ser usado para segurança?


    Descartar pacotes com determinadas características, por exemplo.

    4 - Cite duas diferenças entre os protocolos openflow 1.0.0 e 1.1.0.


  • No openflow 1.1.0, há varias tabelas de fluxo

  • No openflow 1.1.0, há tabela de grupos que armazenam operações comuns a diversos fluxos


  • 5 - Em qual versão o OpenFlow ficou compatível com o IPv6?


    Openflow 1.2.0

    Bibliografia


    Open Networking Foundation. OpenFlow Switch Specification. Disponível em: < https://3vf60mmveq1g8vzn48q2o71a-wpengine.netdna-ssl.com/wp-content/uploads/2014/10/openflow-switch-v1.5.1.pdf>. Acesso em: 26/08/2019.

    CHIRGWIN, Richard. OpenFlow protocol has a switch authentication vulnerability. Disponível em:
    SCOTT-HAYWARD, Sandra. Trailing the Snail: SDN Controller Security Evolution. Disponível em: . Acesso em: 26/08/2019.

    Bellagamba, Elisa, James Kempf, and Pontus Skoldstrom. 2011. “Link Failure Detection and Traffic Redirection in an Openflow Network.”

    Hu, F., Hao, Q., & Bao, K. . A Survey on Software-Defined Network and OpenFlow: From Concept to Implementation. IEEE Communications Surveys and Tutorials, 16(4), 2181–2206.

    WU, Huijun. HUANG, Dijiang. Mobile Cloud Computing. Disponível em: . Acesso em: 26/08/2019.

    CULVER, Timothy. BLACK, Chuck. GORANSSON, Paul. Software Defined Networks: A Comprehensive Approach. Disponível em: . Acesso em: 26/08/2019.

    Bianco, A., Birke, R. R. M., Giraudo, L., & Palacin, M. . OpenFlow Switching: Data Plane Performance. In 2010 IEEE International Conference on Communications (pp. 1–5).

    Benton, K., Camp, L. J., & Small, C. . OpenFlow vulnerability assessment. In Proceedings of the second ACM SIGCOMM workshop on Hot topics in software defined networking (pp. 151–152).

    Fernandez, M. P. . Comparing OpenFlow Controller Paradigms Scalability: Reactive and Proactive. In 2013 IEEE 27th International Conference on Advanced Information Networking and Applications (AINA) (pp. 1009–1016).

    Klöti, R., Kotronis, V., & Smith, P. (2013). OpenFlow: A security analysis. In 2013 21st IEEE International Conference on Network Protocols (ICNP) (pp. 1–6).

    Wendong, W., Xiangyang, G., Xirong, Q., Long, F., Hongyun, L., & Tong, Z. OpenFlow network system and method for enhancing programmable capability.

    Muntaner, G. R. de T. . Evaluation of OpenFlow Controllers.

    Suzuki, K., Sonoda, K., Tomizawa, N., Yakuwa, Y., Uchida, T., Higuchi, Y., … Shimonishi, H. . A Survey on OpenFlow Technologies. IEICE Transactions on Communications, 97(2), 375–386.

    Kandoi, R., & Antikainen, M. . Denial-of-service attacks in OpenFlow SDN networks. In 2015 IFIP/IEEE International Symposium on Integrated Network Management (IM) (pp. 1322–1326).

    Ichino, K. . OpenFlow COMMUNICATION SYSTEM AND OpenFlow COMMUNICATION METHOD.

    Rothenberg , Christian Esteve . Nascimento, Marcelo Ribeiro . Salvador, Marcos Rogério. Magalhães , Maurício Ferreira. OpenFlow e redes definidas por software: um novo paradigma de controle e inovação em redes de pacotes

    Braun, Wolfgang. Menth, Michael. Software-Defined Networking Using OpenFlow: Protocols,Applications and Architectural Design Choices

    Centeno, Paulo Vieira. Uma análise de segurança de Redes Definidas por Software sobre protocolo OpenFlow

    Kobayashi, Masayoshi. Seetharaman, Srini. Parulkar, Guru. Appenzeller, Guido. Little, Joseph. Reijendam, Johanvan. Weissmann, Paul. McKeown, Nick. Maturing of OpenFlow and Software-defined Networking through deployments

    Neto, Francisco José Badaró Valente. OpenFlow-based Routing

    Lia, Wenjuan. Meng, Weizhi. Kwok, Lam For. A survey on OpenFlow-based Software Defined Networks: Security challenges and countermeasures

    Tiwari, Varun. Parekh, Rushit. Patel, Vishal.A Survey on Vulnerabilities of Openflow Network and its Impact on SDN/Openflow Controller

    Lara, Adrian. Kolasani, Anisha. Ramamurthy, Byrav. Network Innovation using OpenFlow: A Survey

    Barbosa, Renan Rodrigo. Migração de redes tradicionais para SDN