Funcionamento

          A maioria dos comutadores Ethernet e roteadores modernos possuem tabelas de fluxos que são utilizadas para implementar diferentes funcionalidades, como QoS(Quality of Service - Qualidade de Serviço), Firewalls e coleta de estatísticas. Assim, para implementar o seu mecanismo, a proposta do OpenFlow tem como ideia básica utilizar funções de manipulação dessas tabelas de fluxos, que são oferecidas nos comutadores [1]. Como essas funções podem diferir de acordo com o fabricante, o OpenFlow identifica algumas funções comuns à maioria dos comutadores e roteadores comerciais com o objetivo de ser suportado por um maior número de equipamentos. A partir dessas funções, o OpenFlow fornece um protocolo aberto para programar as tabelas de fluxos desses equipamentos. O plano de dados de um Comutador OpenFlow consiste em uma Tabela de Fluxos com uma ação correspondente a cada um desses fluxos. Portanto, isso permite que os fluxos sejam tratados de maneira diferente. Assim, pode ser definido um fluxo de tráfego experimental e outro de tráfego de produção, possibilitando isolamento entre eles. Esse tráfego de produção é tratado da mesma forma que seria na ausência do OpenFlow. Com isso, o OpenFlow pode ser visto com uma generalização do conceito de VLANs, que também permitem o isolamento de tráfego mas de forma menos flexível [1]. No OpenFlow, como será visto adiante, o pesquisador possui liberdade na definição de um fluxo. Além disso, o pesquisador pode configurar as tabelas de fluxo especificando a rota que seu tráfego irá percorrer e como os pacotes dos seus fluxos serão tratados, permitindo a experimentação de novas propostas.
          Um Comutador OpenFlow é composto por, no mínimo, três partes. A primeira consiste na Tabela de Fluxos, que possui uma ação para cada fluxo definido, como explicitado anteriormente. A segunda consiste no Canal Seguro que conecta o Comutador ao Controlador da rede. Esse Controlador é utilizado para a configuração da Tabela de Fluxos. A terceira parte consiste no Protocolo OpenFlow, que possibilita a comunicação do Comutador com o Controlador. Com esse protocolo, os pesquisadores podem configurar a Tabela de Fluxos sem a necessidade de programar o comutador [1]. Existem dois tipos de comutadores OpenFlow. O primeiro consiste em um comutador OpenFlow dedicado, que não suporta encaminhamento comum de Nível 2 e Nível 3. O segundo tipo consiste em um comutador ou roteador comercial com OpenFlow habilitado que, além de suportar as funcionalidades do OpenFlow, realiza as funções comuns de um comutador ou roteador. Esses dois tipos são detalhados abaixo.

Topo

          Comutador OpenFlow dedicado: Esse tipo de comutador, exemplificado na Figura 1, é um elemento que apenas encaminha o tráfego entre as portas do comutador de acordo com a Tabela de Fluxos configurada remotamente. O fluxo pode ser definido de diferentes formas. Por exemplo, um fluxo pode ser definido como todos os pacotes provenientes de certa porta TCP ou os pacotes com um determinado endereço MAC de destino. Além disso, alguns comutadores OpenFlow podem tratar pacotes que não utilizam o IPv4, verificando campos arbitrários de seu cabeçalho. Isso mostra a flexibilidade do OpenFlow para suportar diferentes tipos de experimentos.

Figura 1 - Comutador OpenFlow. Adaptada de [1].

          Para cada entrada da Tabela de Fluxos é definida uma ação para ser tomada com os pacotes oriundos de um determinado fluxo. As três ações básicas que todos Comutadores OpenFlow devem suportar, são as seguintes[1]:
               -Encaminhar os pacotes do fluxo para uma (ou várias) porta(s) específica(s). Isso permite que os pacotes sejam roteados pela rede.
               -Encapsular os pacotes e encaminhá-los para o Controlador utilizando o Canal Seguro de comunicação. Essa ação pode ser executada no momento do envio do primeiro pacote de um fluxo, que ainda não tenha sido definido nas Tabelas de Fluxo dos comutadores, com o objetivo de o Controlador configurar os comutadores com esse novo fluxo. Além disso, a ação pode ser realizada em um experimento no qual é necessário processamento adicional nos pacotes de um fluxo.
              -Descartar o pacote. Essa ação pode ser utilizada em aplicações de segurança para impedir, por exemplo, ataques de negação de serviço.

Topo

          Uma entrada na Tabela de Fluxos possui três campos. O primeiro identifica o cabeçalho que define o fluxo. Por exemplo, no cabeçalho da primeira geração de comutadores OpenFlow (comutadores “tipo 0”), um fluxo pode ser definido por 10 parâmetros. Esses parâmetros podem ser o MAC e IP de origem ou destino, as portas TCP usadas, entre outros como mostra a Figura 2. Em outras gerações de comutadores OpenFlow esses parâmetros podem ser definidos arbitrariamente, permitindo o experimento de protocolos que não utilizam o IP. O segundo campo identifica a ação a ser tomada e o terceiro armazena as estatísticas do fluxo. Essas estatísticas podem ser o número de pacotes ou bytes referentes ao fluxo que passaram pelo comutador e o intervalo de tempo desde a última vez que um pacote do fluxo foi identificado pelo comutador. Esse último é importante, por exemplo, para remoção de um fluxo da tabela caso esteja inativo.

Figura 2 - Campos do cabeçalho que definem um fluxo em comutadores "tipo 0". Adaptada de [1].

Topo

          Comutador com OpenFlow habilitado:Esse tipo de comutador consiste nos equipamentos que já realizam encaminhamento normal de Nível 2 e Nível 3, mas adicionaram o OpenFlow com uma funcionalidade. Assim, o tráfego de produção pode ser encaminhado utilizando o encaminhamento normal e permanece isolado do tráfego experimental, que utiliza o mecanismo do OpenFlow. Para isso, esses comutadores podem adicionar outra ação além das três ações básicas citadas anteriormente:
               -Encaminhar os pacotes do fluxo pelo pipeline normal do comutador. Nessa ação um fluxo identificado como não sendo referente ao OpenFlow será processado utilizando o encaminhamento normal.
          Como alternativa ao uso da ação anterior, um comutador pode isolar o tráfego de produção do tráfego OpenFlow através do uso de VLANs. Alguns comutadores podem suportar tanto essa alternativa como a outra.