VXLAN

Sobre

Com o VXLAN, é possível criar uma rede lógica entre máquinas virtuais (VM - Virtual Machines) em diferentes redes. Falando mais tecnicamente, com o VXLAN, é possível conectar duas ou mais redes de camada 3 fazendo com que elas operem como se estivessem conectadas em uma rede da camada 2, ou seja, cada uma faz parte da sua própria rede, mas “dentro” do mesmo domínio.

Através de um identificador de 24 bits, é possível criar 16,7 milhões de redes utilizando VXLAN, um número muito maior que o limite de 4096 das VLANs devido ao uso de um identificador de apenas 12 bits.

A VXLAN é uma rede de camada 2 sobreposta em uma rede de camada 3. Cada rede sobreposta é chamada de segmento VXLAN e é identificada por um ID único de 24 bits chamado VNI - VXLAN Network Identifier (Identificador de Rede VXLAN) ou VXLAN ID. A identificação de uma máquina virtual é uma combinação do endereço MAC e o VNI. Máquinas virtuais em VXLAN diferentes não podem comunicar umas com as outras. O pacote original enviado pela máquina virtual na camada 2 é encapsulado em um cabeçalho VXLAN que inclui o VNI associado ao segmento VXLAN que aquela máquina virtual pertence.


Imagem retirada de http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps9902/white_paper_c11-685115.html

Figura 1: Representação VXLAN.


Encapsulamento do quadro VXLAN

O encapsulamento VXLAN é baseado em IP e provê uma rede camada 2 virtual. O pacote camada 2 original enviado pelas máquinas virtuais é encapsulado em um cabeçalho que inclui o VNI associado ao segmento VXLAN que a máquina virtual pertence. O VXLAN encapsula o MAC em um pacote UDP, que permite a cada segmento de LAN ser estendido além da camada 3.

O encapsulamento do quadro é feito pela extremidade do túnel VXLAN, chamado VTEP (VXLAN Tunnel Endpoint).


Imagem retirada de http://codingrelic.geekhold.com/2011/09/care-and-feeding-of-vxlan.html

Figura 2: Demonstração dos VETPs.


Um VTEP tem duas interfaces lógicas: Uplink e Downlink. O Uplink é responsável por receber os quadros VXLAN e atua como uma extremidade do túnel com um endereço IP, usado para roteamento dos quadros VXLAN encapsulados.

Os quadros VXLAN são enviados para o endereço IP atribuído ao VTEP de destino, o IP é colocado no OUTER IP DA (Figura 4). O IP do VTEP que enviou o quadro está no OUTER IP SA (Figura 4). Os pacotes recebidos pelo Uplink são mapeados do VXLAN ID (Figura 4) até uma VLAN e a carga do quadro Ethernet é enviado como um quadro Ethernet 802.1Q. Durante este processo, o INNER MAC SA (Figura 4) e o VXLAN ID são armazenados em uma tabela local. Pacotes recebidos no Downlink são mapeadas para uma VXLAN ID usando a VLAN do quadro. Uma pesquisa é então efetuada na tabela do VTEP camada 2, utilizando o VXLAN ID e o MAC de destino. Esta pesquisa fornece o endereço de IP do VTEP de destino. O quadro é então encapsulado e enviado pela interface de Uplink.


Imagem retirada de http://crankypotato.com/?p=598

Figura 3: VXLAN. Estão representadas 2 VXLAN com diferentes VNI, uma em rosa e outra em verde.


Formato do quadro VXLAN

O uso de datagramas IP pode ocasionar em eventuais perdas, e devido à falta de recuperação de perdas - não há controle de estado e número de sequência por parte do TCP - o VXLAN necessita de soluções alternativas. Isto pode ser contornado quando o protocolo usado acima do VXLAN é um protocolo TCP padrão. O protocolo TCP usado acima do VXLAN enxerga a rede como uma rede física padrão, fazendo a recuperação de perdas.

Formato do cabeçalho do quadro VXLAN

O Quadro VXLAN possui o seguinte formato:


Imagem retirada de http://www.cisco.com/en/US/prod/collateral/switches/ps9441/ps9902/white_paper_c11-685115.html

Figura 4: Quadro VXLAN.


Conforme ilustrado nas figuras de 5 a 11, o formato do quadro VXLAN é especificado. As figuras respeitam a ordem do encapsulamento, sendo a figura 5 o cabeçalho mais externo.

Cabeçalho Ethernet


Figura 5: Cabeçalho Ethernet Externo


Outer Destination MAC Address (Endereço MAC de Destino) - Endereço MAC do VTEP de destino, se é local. Ou, o dispositivo do próximo salto, geralmente um roteador, quando o VTEP de destino está em uma rede camada 3 diferente.
VLAN - Opcional na implementação da VXLAN e é designado por um EtherType de 0x8100, associado a uma etiqueta VLAN ID.
Ethertype - É definido por 0x0800 pois o pacote de carga é um pacote IPv4. O projeto VXLAN inicial não inclui uma implementação IPv6, mas está previsto para o próximo projeto.

Cabeçalho IP


Figura 6: Cabeçalho IP Externo


Protocol (Protocolo) - Definido como 0x11, para indicar que o quadro contém um pacote UDP.
Outer Source Address (IP de origem) - Endereço IP do VTEP de origem.
Outer Destination Adress (IP de destino) - Endereço IP do VTEP de destino. Se este não for conhecido, um processo de detecção tem de ser feito pelo VTEP de origem. Isto é feito da seguinte maneira:

Cabeçalho UDP


Figura 7: Cabeçalho UDP Externo


Source Port (Porta de Origem) - Definido pelo VTEP transmissor.
VXLAN Port (Porta VXLAN) - IANA - Internet Assigned Numbers Authority (Autoridade para Atribuição de Números da Internet) atribuído à porta VXLAN. Ainda não definido.
UDP Checksum (Soma de Verificação UDP) - Deve ser definido como 0x0000. Se o checksum não é definido como 0x0000 pela VTEP transmissor, o VTEP receptor deve verificar o checksum e, se não estiver correto, o quadro deve ser descartado.

Cabeçalho VXLAN


Figura 8: Cabeçalho VXLAN


VNI - Campo de 24 bits que serve como identificador da Rede VXLAN.
Reserved (Reservado) - Conjunto de campos de 24 bits e 8 bits que são reservados e definidos como zero.

Cabeçalho Ethernet


Figura 9: Cabeçalho Ethernet Interno


Conteúdo do quadro


Figura 10: Conteúdo do quadro


Sequência verificadora


Figura 11: Sequência verificadora do quadro. Corresponde ao cabeçalho Ethernet externo.