Entender o formato GENEVE

O encapsulamento genérico de virtualização de rede (GENEVE) é um protocolo de encapsulamento de rede que encapsula o pacote original com metadados adicionais. Esses metadados extras ajudam a ativar a virtualização de rede flexível e extensível.

O diagrama a seguir mostra o formato do cabeçalho de um pacote GENEVE.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |Ver|  Opt len  |O|C|   Rsvd.   |         Protocol type         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Virtual network identifier (VNI)       |     Rsvd.     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos de cabeçalho GENEVE mostrados no diagrama anterior:

Campo Descrição Comprimento do campo
Ver A versão do protocolo GENEVE. A única versão compatível é zero (0). Para mais informações, consulte Campos de cabeçalho de túnel. 2 bits
Opt len O comprimento dos campos de opção, expresso em múltiplos de 4 bytes, sem incluir o cabeçalho fixo de túnel de 8 bytes. Para mais informações, consulte Campos de cabeçalho de túnel. 6 bits
O O bit do pacote de controle. Para mais informações, consulte Campos de cabeçalho de túnel. 1 bit
C O bit de opções críticas. Para mais informações, consulte Campos de cabeçalho de túnel. 1 bit
Rsvd Campo reservado, que precisa ser zero (0) na transmissão e ignorado no recebimento. Para mais informações, consulte Campos de cabeçalho de túnel. 6 bits
Tipo de protocolo O tipo de protocolo permite qualquer ethertype, mas a integração de segurança de rede permite apenas IPv4 (0x0800) ou IPv6 (0x86DD). 16 bits
Identificador de rede virtual (VNI) Um identificador exclusivo de um elemento de rede virtual. A integração da segurança de rede não preenche esse campo, o que significa que o VNI é definido como zero (0). Para mais informações, consulte Integração fora da banda GENEVE. 24 bits
Rsvd Campo reservado, que precisa ser zero (0) na transmissão e ignorado no recebimento. Para mais informações, consulte Campos de cabeçalho de túnel. 8 bits

Opções GENEVE específicas deGoogle Cloud

O cabeçalho GENEVE usa um formato Type-Length-Value (TLV) para as opções. Isso significa que cada opção é codificada com um identificador de tipo, um campo de comprimento que indica o tamanho do valor e o próprio valor. Esse formato permite flexibilidade e extensibilidade, já que novas opções podem ser adicionadas sem interromper as implementações atuais. As seções a seguir descrevem a ordem e o número de opções. O número e a ordem das opções variam conforme o produto evolui. Portanto, para garantir a compatibilidade futura da implementação do dispositivo, analise o cabeçalho GENEVE com base nos campos TLV.

As opções do GENEVE específicas para Google Cloud são as seguintes:

  • ID da rede (cookie de rede)
  • ID do endpoint (cookie do endpoint)
  • ID do perfil

ID da rede

A opção de ID de rede, também conhecida como "cookie de rede", identifica a rede virtual associada ao tráfego encapsulado em GENEVE em Google Cloud. Essa opção é identificada pela classe 0x0132 (Google) e pelo tipo 1 (ID de rede). Os dados da opção contêm 32 bits, dos quais os primeiros 28 representam um ID de rede opaco. A finalidade dos 4 bits restantes está descrita no diagrama e na tabela a seguir.

O diagrama a seguir mostra o formato da opção no pacote GENEVE.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |    Type=01    |R|R|R|  Len=1  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Network cookie                    |R|R|T|D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos de opção mostrados no diagrama anterior:

Campo Descrição Comprimento do campo
Classe de opção Identifica a organização ou entidade que definiu a opção. O valor 0x0132 designa o Google como a entidade definidora. 16 bits
Tipo Identifica o tipo da opção em uma classe. O valor 0x1 designa a opção "ID da rede". Para mais informações, consulte Opções de túnel. 8 bits
R As flags de controle de opção reservadas para uso futuro. Esses bits precisam ser zero (0) na transmissão e ignorados no recebimento. 3 bits
Len O comprimento do payload da opção em incrementos de 4 bytes. O payload do ID da rede é de 32 bits (4 bytes), então o comprimento dessa opção é definido como 1. 5 bits
Cookie de rede. O cookie de rede opaco, que identifica uma rede virtual. 28 bits
R Reservado para implementação futura. Precisa ser definido como zero (0) na transmissão e ignorado no recebimento. 2 bits
T Indica o descarregamento de TLS para o pacote encapsulado. Não utilizado. 1 bit
D Indica a direção do pacote original. Zero (0) significa entrada e um (1) significa um pacote de saída na máquina virtual (VM) espelhada original. 1 bit

Código do endpoint

A opção de ID do endpoint, também conhecida como "cookie de endpoint", identifica exclusivamente o ponto de captura, que é um controlador de interface de rede em uma VM Google Cloud. Essa opção é identificada pela classe 0x0132 (Google) e pelo tipo 2 (ID do endpoint). Os dados da opção são um valor opaco de 128 bits.

O diagrama a seguir mostra o formato da opção no pacote GENEVE.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |     Type=02   |R|R|R|  Len=4  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                        Endpoint cookie                        +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos de opção mostrados no diagrama anterior:

Campo Descrição Comprimento do campo
Classe de opção Identifica a organização ou entidade que definiu a opção. O valor 0x0132 designa o Google como a entidade definidora. 16 bits
Tipo Identifica o tipo da opção em uma classe. O valor 0x2 designa a opção "ID do endpoint". Para mais informações, consulte Opções de túnel. 8 bits
R As flags de controle de opção reservadas para uso futuro. Esses bits precisam ser zero (0) na transmissão e ignorados no recebimento. 3 bits
Len O tamanho do payload em incrementos de 4 bytes. O payload do ID do endpoint é de 128 bits (16 bytes), então o comprimento dessa opção é definido como 4. 5 bits
Cookie de endpoint. Um identificador opaco do ponto de captura (uma NIC de VM). 128 bits

ID do perfil

A opção de ID do perfil identifica o grupo de perfis de segurança de espelhamento aplicado ao tráfego. Essa opção é identificada pela classe 0x0132 (Google) e pelo tipo 3 (ID do perfil). Os dados da opção são um identificador de 64 bits que corresponde ao campo data_path_id no grupo de perfis de segurança. O dispositivo de destino pode aplicar políticas de segurança com base no identificador do grupo de perfis.

O diagrama a seguir mostra o formato da opção no pacote GENEVE.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |    Type=03    |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Profile ID                          +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos de opção mostrados no diagrama anterior:

Campo Descrição Comprimento do campo
Classe de opção Identifica a organização ou entidade que definiu a opção. O valor 0x0132 designa o Google como a entidade definidora. 16 bits
Tipo Identifica o tipo da opção em uma classe. O valor 0x3 designa a opção "ID do perfil". Para mais informações, consulte Opções de túnel. 8 bits
R As flags de controle de opção reservadas para uso futuro. Esses bits precisam ser zero na transmissão e ignorados no recebimento. 3 bits
Len O comprimento do payload da opção em incrementos de 4 bytes. O payload do ID do perfil é de 64 bits (8 bytes), então o comprimento dessa opção é definido como 2. 5 bits
ID do perfil O identificador do grupo de perfis de segurança de espelhamento. 64 bits

Formatos de cabeçalho GENEVE para integração de segurança de rede

Esta seção descreve os formatos de cabeçalho GENEVE usados pelos serviços de integração de segurança de rede.

Cabeçalho IPv4

O formato de pacote GENEVE encapsula um cabeçalho de túnel compacto em UDP sobre IPv4. Um pequeno cabeçalho de túnel fixo fornece informações de controle e recursos e interoperabilidade de nível básico.

O diagrama a seguir mostra os campos de cabeçalho IPv4 para o pacote GENEVE.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |Version|  IHL  |Type of service|          Total length         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |         Identification        |Flags|     Fragment offset     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Time to live | Proto=17 (UDP)|        Header checksum        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Source address                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                      Destination address                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos de cabeçalho IPv4 mostrados no diagrama anterior:

Campo Descrição
Proto=17 (sempre UDP para GENEVE) Indica que o payload encapsulado usa o protocolo UDP.
Endereço de origem O endereço IP do gateway da sub-rede local.
Endereço de destino O VIP do balanceador de carga de propriedade do cliente.

Cabeçalho UDP

O cabeçalho UDP RFC 0768 encapsula dados, mantendo a semântica sem conexão do Ethernet e do endereço IP. Ele também fornece entropia para roteadores que realizam vários caminhos de custo igual (ECMP).

O diagrama a seguir mostra o formato do cabeçalho de um pacote Geneve encapsulado em um UDP.

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Source port = <hash>     |   Dest port = 6081 (Geneve)   |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |           UDP length          |          UDP checksum         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

A tabela a seguir descreve os campos do cabeçalho UDP mostrados no diagrama anterior:

Campos Descrição
Porta de origem Um hash opaco em todo o intervalo de 16 bits. O valor é o mesmo para todos os pacotes pertencentes a um único fluxo encapsulado (em ambas as direções).
Porta de destino O número da porta de destino designada para o tráfego GENEVE, definido como 6081.
Comprimento do UDP O comprimento total do datagrama UDP, incluindo o cabeçalho UDP e o pacote GENEVE encapsulado.
Soma de verificação UDP O valor de checksum do datagrama UDP, usado para detecção de erros.

Integração fora da banda GENEVE

Esta seção descreve os formatos de cabeçalho GENEVE usados pelos serviços de integração de segurança de rede, especificamente a integração fora da banda. A integração fora da banda usa um túnel GENEVE para encapsular e entregar pacotes espelhados. Os pacotes são endereçados ao endereço IP virtual (VIP) do balanceador de carga interno do coletor e são anotados com metadados específicos de Google Cloud, como o cookie de rede.

As opções GENEVE específicas do Google Cloudusadas na integração fora da banda são cookie de rede, cookie de endpoint e ID do perfil. Para mais informações, consulte Opções GENEVE específicas doGoogle Cloud.

O diagrama a seguir mostra como as opções GENEVE específicas do Google Cloudsão usadas na integração fora da banda.

       0                    1                   2                  3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=0|  Opt len  |O|C|   Rsvd    |         Protocol type         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Virtual network identifier (VNI) = 0   |     Rsvd.     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |    Type=01    |R|R|R|  Len=1  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Network cookie                    |R|R|T|D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |    Type=02    |R|R|R|  Len=4  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                        Endpoint cookie                        +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option class=0x0132 (Google) |    Type=03    |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Profile ID                          +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

Integração na banda GENEVE

A integração em banda usa um túnel GENEVE para encapsular e entregar pacotes interceptados. O endereço IP virtual (VIP) do balanceador de carga interno do produtor recebe os pacotes anotados com metadados específicos do Google Cloud, como o cookie de rede.

A integração no mesmo canal usa as seguintes opções GENEVE específicas de Google Cloud: cookie de rede, cookie de endpoint e ID do perfil. Para mais informações, consulte Opções GENEVE específicas doGoogle Cloud.

A integração em banda oferece suporte à reinjeção de pacotes no endpoint original usando um túnel GENEVE bidirecional lógico, que consiste em dois túneis GENEVE unidirecionais. Depois que o dispositivo de rede do produtor intercepta e inspeciona um pacote, ele pode descartar ou reinjetar o pacote. Para reinjetar o pacote, o dispositivo faz o seguinte:

  • Reencapsula o pacote usando o cabeçalho GENEVE original (mesmas opções).
  • Troca os endereços de origem e destino no cabeçalho IP externo.
  • Garante que os checksums estejam corretos.

O diagrama a seguir mostra como as opções GENEVE específicas do Google Cloudsão usadas na integração em banda.

       0                    1                   2                  3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |V=0|  Opt len  |O|C|   Rsvd    |         Protocol type         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |        Virtual network identifier (VNI) = 0   |     Rsvd.     |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |    Type=01    |R|R|R|  Len=1  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                     Network Cookie                    |R|R|T|D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |    Type=02    |R|R|R|  Len=4  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                                                               +
      |                                                               |
      +                        Endpoint Cookie                        +
      |                                                               |
      +                                                               +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |    Type=03    |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Profile ID                          +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

Encapsulamento GENEVE e requisitos de MTU

A unidade máxima de transmissão (MTU) é o tamanho, em bytes, do maior pacote de IP possível que cabe em um frame Ethernet, incluindo cabeçalhos IP, cabeçalhos de protocolo da camada 4 e dados da camada 4. Saiba mais em Unidade de transmissão máxima.

Em Google Cloud redes, a MTU permitida é de 8.896 bytes. No entanto, para a integração de segurança de rede, 396 bytes precisam ser mantidos para o overhead de encapsulamento GENEVE. Essa necessidade de retenção tem implicações para as redes de consumidores e produtores:

  • MTU da rede do consumidor: a MTU da rede do consumidor não pode ser maior que 8.500 bytes. Esse limite garante que haja espaço suficiente para a sobrecarga do GENEVE sem exceder a MTU máxima.

  • MTU da rede produtora: a MTU da rede produtora precisa ser pelo menos 396 bytes maior do que a MTU da rede consumidora. Essa permissão acomoda o encapsulamento GENEVE adicional.

Se não houver limites de MTU suficientes para acomodar o encapsulamento GENEVE, o pacote poderá ser descartado. Isso pode acontecer no nível da rede virtual ou no sistema operacional da VM.

A seguir