Protocol Oblivious
Forwarding
Haoyu Song
Huawei Technologies
Sistemas em Redes 2017/01 Rafael AlmeidaSDN e OpenFlow
● SDN mantém a inteligência da rede no software ● Separa o plano de controle do plano de dados
SDN e OpenFlow
Control plane Data plane Control plane Data plane Data plane Data plane Data plane Data plane Data plane● SDN mantém a inteligência da rede no software ● Separa o plano de controle do plano de dados
SDN e OpenFlow
● SDN mantém a inteligência da rede no software ● Separa o plano de controle do plano de dados ● Permite que eles evoluam separadamente
SDN e OpenFlow
● SDN mantém a inteligência da rede no software ● Separa o plano de controle do plano de dados ● Permite que eles evoluam separadamente
OpenFlow
● Suporta muitos protocolos e ações de encaminhamento
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
comportamento sem depender do controlador
As primeiras versões do OpenFlow que foram lançadas em 2009 não tinham suporte para protocolo IPv6, só em 2011 que saiu a primeira
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
comportamento sem o envolvimento do controlador
Conjunto de campos que podem ser utilizados para
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
comportamento sem o envolvimento do controlador
Conjunto de instruções/ações de encaminhamento pré-definidas
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes
● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes ● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes ● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu comportamento sem depender do controlador
OpenFlow
● Segue uma evolução reativa
● Plano de dados tem que entender o formato dos pacotes ● O plano de dados não guarda estado
● O plano de dados não tem a capacidade de monitorar os fluxos e mudar seu comportamento sem depender do controlador
Essas características da arquitetura do OpenFlow podem levar a consequências indesejadas
OpenFlow
● O plano de dados e o plano de controle não estão suficientemente separados
● Não há jeito fácil de modificar os protocolos ou adicionar protocolos
definidos pelos usuários
OpenFlow
● O plano de dados e o plano de controle não estão suficientemente separados
● Não há jeito fácil de modificar os protocolos ou adicionar protocolos
definidos pelos usuários
● Adicionar novos protocolos requer uma revisão do controlador e do switch
Os comandos do controlador e as instruções de processamento de pacotes contém informações semânticas e requerem que o plano de dados tenha
OpenFlow
● O plano de dados e o plano de controle não estão suficientemente separados ● Não há jeito fácil de modificar os protocolos ou adicionar protocolos
definidos pelos usuários
OpenFlow
● O plano de dados e o plano de controle não estão suficientemente separados ● Não há jeito fácil de modificar os protocolos ou adicionar protocolos
definidos pelos usuários
OpenFlow
● O plano de dados e o plano de controle não estão suficientemente separados ● Não há jeito fácil de modificar os protocolos ou adicionar protocolos
definidos pelos usuários
● Adicionar novos protocolos requer uma revisão do controlador e do switch O OpenFlow v1.3 tem suporte para 40 campos
de cabeçalhos mas ele ainda não suporta muitos protocolos, principalmente os que não
Evolução do OpenFlow
Open Flow 1.0 - Single table
- Fixed 12 tuplematch field
Open Flow 1.2 - More flexibility - Flexible match - Flexible rewrite - IPv6 Open Flow 1.4 - Syncronized table - Bundles - Flow monitoring - Default port to 6653 Open Flow 2.0 - No more fixed fields? - Programmable switches?
Open Flow 1.1 - Multi-table - Group table
- Full VLAN and MPLS
Open Flow 1.5 - Egress table
- Packet type aware pipeline Open Flow 1.3
- Flexible capabilities - Meters
- PBB - Event filters
Versão Campos Date Number of fields
1.0 Ingress port Dec 2009 12
Ethernet: src, dst, type, VLAN
TCP/UDP: src port, dst port
IPv4: src, dst, proto, ToS
1.1 MPLS: label, traffic class Feb 2011 15
Metadata, SCTP, VLAN tagging
1.2 IPv6: src, dst, flow label, ICMPv6 Dec 2011 36
OpenFlow extensible match (OXM)
1.3 PBB, IPv6 extension headers Jun 2012 40
1.4 + 1 campo Oct 2013 41
Versão Campos Date Number of fields
1.0 Ingress port Dec 2009 12
Ethernet: src, dst, type, VLAN
TCP/UDP: src port, dst port
IPv4: src, dst, proto, ToS
1.1 MPLS: label, traffic class Feb 2011 15
Metadata, SCTP, VLAN tagging
1.2 IPv6: src, dst, flow label, ICMPv6 Dec 2011 36
OpenFlow extensible match (OXM)
1.3 PBB, IPv6 extension headers Jun 2012 40
1.4 + 1 campo Oct 2013 41
Protocolos suportados
Novas especificações são feitas com velocidade. Praticamente todo ano tem
Versão Campos Date Number of fields
1.0 Ingress port Dec 2009 12
Ethernet: src, dst, type, VLAN
TCP/UDP: src port, dst port
IPv4: src, dst, proto, ToS
1.1 MPLS: label, traffic class Feb 2011 15
Metadata, SCTP, VLAN tagging
1.2 IPv6: src, dst, flow label, ICMPv6 Dec 2011 36
OpenFlow extensible match (OXM)
1.3 PBB, IPv6 extension headers Jun 2012 40
1.4 + 1 campo Oct 2013 41
Protocolos suportados
Fabricantes demoram mais para atualizar os hardwares. Muitos switches rodam
Switch port
MAC src MAC dst Ether type IP src IP proto TCP sport TCP dport Action Switching * * 00:1f... * * * * * Port 6 Flow
switching Port 3 00:20... 00:1f... 0800 1.2.3.4 5.6.7.8 4 17264 Port 5
Firewall * * * * * * * 22 Drop
Routing * * * * * 5.6.7.8 * * Port 4
Problema do OpenFlow
● Novas especificações OpenFlow são lançadas com frequência
● Ciclo de desenvolvimento de hardware muito mais lento
● Maioria dos switches OpenFlow ainda rodam versões antigas do padrão
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza”
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza”
● POF: dispositivos de rede “caixa branca”Atualizações de sistemas e novos recursos são de responsabilidade do fabricante. Usuário só consegue usar o
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza”
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza”
● POF: dispositivos de rede “caixa branca”A capacidade que o usuário tem de
adicionar novas funcionalidade é limitada pela interface criada pelo fabricante do dispositivo e pelos recursos oferecidos
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza” ● POF: dispositivos de rede “caixa branca”
Ideia do POF
● Dispositivos de rede são “caixa preta”
● OpenFlow torna os dispositivos “caixa cinza” ● POF: dispositivos de rede “caixa branca”
O switch apenas processa e encaminha pacotes, o comportamento é totalmente definido pelo controlador. Para fazer isso o POF tenta fazer o
Modelo de programação
I can only use the device as-is I can do what the device has supported I can do whatever I want Control plane Data plane Control plane Data plane Control plane Data plane Management Control ProgramModelo de programação
I can only use the device as-is I can do what the device has supported I can do whatever I want Control plane Data plane Control plane Data plane Control plane Data plane Management Control ProgramBlack box Gray box White box
Caixa preta: arquitetura
fechada permite somente funcionalidades pré-definidas
Modelo de programação
I can only use the device as-is I can do what the device has supported I can do whatever I want Control plane Data plane Control plane Data plane Control plane Data plane Management Control ProgramBlack box Gray box White box
Caixa cinza: expõe
funcionalidades extras para o usuário através de building-blocks
Modelo de programação
I can only use the device as-is I can do what the device has supported I can do whatever I want Control plane Data plane Control plane Data plane Control plane Data plane Management Control ProgramBlack box Gray box White box
Caixa branca: arquitetura aberta e
genérica, permite que o usuário tenha total controle do que o
Ideia do POF
● Plano de dados mais simples permitirá que os dispositivos sejam “caixa branca”
○ O caminho dos dados (datapath) deveria ser como a CPU de um PC, no sentido de que não precisa entender o que está acontecendo, apenas executar instruções básicas
○ Poucas instruções (independentes de
protocolos) devem ser suficientes para fazer realizar tudo que o controlador definir
Ideia do POF
● POF torna o plano de dados totalmente independente de protocolos ● Não precisa entender o formato dos pacotes como no OpenFlow
○ "All an FE needs to do, under the instruction of its controller, is to extract and assemble the
search keys from the packet header, conduct the table lookups, and then execute the associated instructions (in the form of executable code written in FIS or compiled from FIS)"
● Dessa forma permite que o plano de dados suporte novos protocolos no futuro
Flow Instruction Set
● Flow Instruction Set (FIS)
● Definidas para serem independentes de plataformas
● Otimizadas para aplicações de redes
● Deixa o usuário livre para definir seus protocolos e formatos de pacotes
● FIS pode ser usada para fazer processamento rápido de pacotes e define
Flow Instruction Set
● Flow Instruction Set (FIS)
● Definidas para serem independentes de plataformas
● Otimizadas para aplicações de redes
● Deixa o usuário livre para definir seus protocolos e formatos de pacotes
● FIS pode ser usada para fazer processamento rápido de pacotes e define
Flow Instruction Set
● Flow Instruction Set (FIS)
● Definidas para serem independentes de plataformas ● Otimizadas para aplicações de redes
● Deixa o usuário livre para definir seus protocolos e formatos de pacotes
● FIS pode ser usada para fazer processamento rápido de pacotes e define
Flow Instruction Set
● Flow Instruction Set (FIS)
● Definidas para serem independentes de plataformas ● Otimizadas para aplicações de redes
● Deixa o usuário livre para definir seus protocolos e formatos de pacotes
● FIS pode ser usada para fazer processamento rápido de pacotes e define
Flow Instruction Set
● Flow Instruction Set (FIS)
● Definidas para serem independentes de plataformas ● Otimizadas para aplicações de redes
● Deixa o usuário livre para definir seus protocolos e formatos de pacotes ● FIS pode ser usada para fazer processamento rápido de pacotes e define
Flow Instruction Set
● Instruções de edição
● Instruções de encaminhamento
● Instruções de edição das tabelas de fluxos
● Campos dos cabeçalhos são identificados por {offset, length}
Category Instructions
Editing SET_FIELD, ADD_FIELD, DEL_FIELD,
CALCULATE_CHECKSUM, INC_FIELD, DEC_FIELD... Forwarding GOTO_TABLE, COUNTER,
DROP...
Entry SET_TABLE_ENTRY, ADD_TABLE_ENTRY, DEL_TABLE_ENTRY
Flow Instruction Set
● Definição de campos de cabeçalhos
field { type; offset; length; }
Flow Instruction Set
● Definição de campos de cabeçalhos
field { type; offset; length; }
Indica o tipo do campo. 0 para campo de pacote e 1
Flow Instruction Set
● Definição de campos de cabeçalhos
field { type; offset; length; }
Onde o campo está em relação ao cursor
Flow Instruction Set
● Definição de campos de cabeçalhos
field { type; offset; length; }
Flow Instruction Set
● Definição de campos de cabeçalhos
● Exemplo: cabeçalho do protocolo Ethernet
Destination Source EtherType
0 6 12 dst: {0, 0, 48}; src: {0, 48, 48}; type: {0, 96, 16}; field { type; offset; length; }
Flow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; }Flow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; }Tipo da instrução, nesse caso Goto-Table
Flow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; } Identificador da próxima tabelaFlow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; }Flow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; }Número de campos para fazer match
Flow Instruction Set
● Instruções de encaminhamento Goto-Table { type; next_table_id; packet_offset; match_field_num; fields_array[]; }Flow Instruction Set
● Instruções de edição Set-Field { type; field; value; }Flow Instruction Set
● Instruções de edição Set-Field { type; field; value; }Tipo da instrução, nesse caso Set-Field
Flow Instruction Set
● Instruções de edição Set-Field { type; field; value; } Identifica um campo da atual camada (tipo field)Flow Instruction Set
● Instruções de edição Set-Field { type; field; value; }Valor a ser colocado no campo
Processamento de pacotes
● POF utiliza múltiplas tabelas de fluxo para fazer o processamento dos pacotes. Cada tabela de fluxo realiza uma ou várias operações, exemplo:
○ Definir/modificar o cabeçalho do protocolo ○ Adicionar/remover um cabeçalho de protocolo
○ Copiar campos do cabeçalho para os metadados
Processamento de pacotes
● POF processa os pacotes camada por camada
● Cada camada tem uma ou mais tabelas de fluxo relacionadas
● O casamento em cada tabela de fluxo pode ser feito de diferentes formas
○ Exact match (EM)
○ Longest prefix match (LPM)
○ Masked match (MM)
○ ...
Processamento de pacotes
● POF processa os pacotes camada por camada
● Cada camada tem uma ou mais tabelas de fluxo relacionadas
● O casamento em cada tabela de fluxo pode ser feito de diferentes formas
○ Exact match (EM)
○ Longest prefix match (LPM)
○ Masked match (MM)
○ ...
Processamento de pacotes
● POF processa os pacotes camada por camada
● Cada camada tem uma ou mais tabelas de fluxo relacionadas
● O casamento em cada tabela de fluxo pode ser feito de diferentes formas
○ Exact match (EM)
○ Longest prefix match (LPM)
○ Masked match (MM)
○ ...
Processamento de pacotes
● POF processa os pacotes camada por camada
● Cada camada tem uma ou mais tabelas de fluxo relacionadas
● O casamento em cada tabela de fluxo pode ser feito de diferentes formas
○ Exact match (EM)
○ Longest prefix match (LPM)
○ Masked match (MM)
○ ...
Exemplo
● Suponha um pacote com quatro camadas de cabeçalhos
Exemplo
Header 0 Header 1 Header 2 Header 3 Payload
Fields Instructions Fields Instructions
...
Processing pointer
Exemplo
Header 0 Header 1 Header 2 Header 3 Payload
Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Processing pointer Flow table 1 Flow table 2
Exemplo
Header 0 Header 1 Header 2 Header 3 Payload
Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Processing pointer Flow table 1 Flow table 2 Flow table 3
Exemplo
Header 0 Header 1 Header 2 Header 3 Payload
Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Fields Instructions Fields Instructions ... Processing pointer Flow table 1 Flow table 2 Flow table 3 Flow table 4
Exemplo
dst_addr src_addr type
● Suponha um protocolo IPvX que tem três campos: endereço de destino, endereço de origem e tipo de cabeçalho na camada de transporte
Cabeçalho do protocolo IPvX
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
Exemplo
Pacote com EtherType = IPvX Faz match em alguma entrada na
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... Goto-Table { table 1, 14, 1, {0, 64, 64} } MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
Exemplo
Instrução armazenada na entrada da tabela de fluxos
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... Goto-Table { table 1, 14, 1, {0, 64, 64} } MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
Flow table 1 (src_addr)
0 Fields Instructions 1 Fields Instructions 2 Fields Instructions
...
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... Goto-Table { table 1, 14, 1, {0, 64, 64} } MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
MAC IPvX
0 14
Packet process pointer Flow table 1 (src_addr)
0 Fields Instructions 1 Fields Instructions 2 Fields Instructions
...
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... Goto-Table { table 1, 14, 1, {0, 64, 64} } MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
MAC IPvX
0 14
Packet process pointer Flow table 1 (src_addr)
0 Fields Instructions 1 Fields Instructions 2 Fields Instructions
...
Exemplo
Chave a ser utilizada para procurar nas entradas da
Flow table 0 (dst, type) 0 Fields Instructions 1 Fields Instructions 2 Fields Instructions ... Goto-Table { table 1, 14, 1, {0, 64, 64} } MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer
MAC IPvX
dst_addr src_addr type
0 14
Packet process pointer Flow table 1 (src_addr)
0 Fields Instructions 1 Fields Instructions 2 Fields Instructions
...
Diferenças para o processamento convencional
O switch POF não precisa saber o que cada campo significa ou como
encontrá-lo encontrado… apenas executar as instruções
Resumo
● No OpenFlow, a montagem da chave de busca é feita falando quais campos do cabeçalho devem ser buscados
● O plano de dados precisa entender o formato dos pacotes para poder extrair os bits dos cabeçalhos
● No POF é utilizado uma sequência genérica de montagem de chaves e consultas na tabela de encaminhamento
Resumo
● As instruções de encaminhamento também não dependem de protocolos
○ No OpenFlow: "push MPLS label" ou "decrement IP TTL" ○ POF: insert/delete/modify {offset, length}
● Benefícios do mecanismo do POF
○ OpenFlow 1.3 define três ações “push”: push VLAN header, push MPLS header, push PBB header, no entanto, algumas aplicações (exemplo, VPLS) requerem um “push ethernet header”, isso não é possível fazer com a especificação atual do OpenFlow
○ Com POF, é possível usar a instrução ADD_FIELD que contém os parâmetros de onde o campo deve ser adicionado no pacote e onde os dados do novo campo se encontram
Protótipo e avaliação
● Dois protótipos, em hardware e em software
● Os mesmos compartilham o mesmo controlador
○ Baseado no controlador SDN de código aberto Floodlight
● O protótipo em hardware foi feito na plataforma Huawei NE5000 ● O protótipo em software foi feito em C
● Em geral, o POF reduziu a vazão em até 30%
Casos de Uso
● OpenFlow funciona apenas com protocolos baseados em Ethernet ● POF suporta outros protocolos, como Fibre Channel, ATM e POS ● POF pode suportar Named Data Network (NDN)
● Mesmo para protocolos suportados pelo OpenFlow, algumas aplicações são impossíveis de fazer, por exemplo, Firewall que necessitam guardar estado ● POF permite fazer balanceamento de carga multicaminhos e Deep Packet
Trabalhos Relacionados
● COPY ● P4
Desafios
● Padronização: para que os fabricantes possam suportar o POF, é necessário fazer com que o POF seja um padrão necessário para toda implementação SDN.
Projeto da disciplina
● POF trabalha com valores imediatos {offset, length} ● Dependendo da aplicação isso pode não ser suficiente ● Processar pacotes com cabeçalhos de tamanhos variável ● Exemplo: IP options do IPv4, cabeçalhos de extensão do IPv6
Projeto da disciplina
Source address Destination address
Checksum Time to Live Protocol
Total length
V IHL ToS
Flags/offset Identifier
IP Options (variable size)
Projeto da disciplina
Source address Destination address
Checksum Time to Live Protocol
Total length
V IHL ToS
Flags/offset Identifier
IP Options (variable size)
Transport layer header
No IPv4, se o pacote tem IP options é possível saber o offset,
através do campo IHL, que dá o tamanho do cabeçalho IPv4 +
Projeto da disciplina
Source address Destination address
Checksum Time to Live Protocol
Total length
V IHL ToS
Flags/offset Identifier
IP Options (variable size)
Transport layer header
Porém, como o POF trabalha com valores imediatos, não é possível utilizar esse valor como offset para
processar o cabeçalho da camada de transporte
Projeto da disciplina
O cabeçalho IPv6 pode ter tamanho variado por causa dos cabeçalhos de extensão
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Projeto da disciplina
O cabeçalho IPv6 pode ter tamanho variado por causa dos cabeçalhos de extensão
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Para IPv6 parece ainda pior, qual o offset para chegar na camada de
transporte se tem cabeçalhos de extensão?
Projeto da disciplina
O cabeçalho IPv6 pode ter tamanho variado por causa dos cabeçalhos de extensão
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
O cabeçalho IPv6 não tem o campo IHL, para chegar na camada de transporte é
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...
Projeto da disciplina
Version Traffic
Class Flow Label
Payload length Next header Hop limit
Source address
Destination address
Extension header 1 Extension header 2
...