Entender o formato GENEVE

O Generic Network Virtualization Encapsulation (GENEVE) é um protocolo de encapsulamento de rede que encapsula o pacote original com metadados extras. 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 do campo "Options", expresso em múltiplos de 4 bytes, sem incluir o cabeçalho de túnel fixo 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 ethertype: IPv4 (0x0800) ou IPv6 (0x86DD). 16 bits
Identificador de rede virtual (VNI) Um identificador exclusivo para um elemento de rede virtual. O VNI é definido como zero (0). Para mais informações, consulte Opções 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 para espelhamento de pacotes em redes VPC ULL

O cabeçalho GENEVE usa um formato tipo-comprimento-valor (TLV) para as opções. 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 oferece flexibilidade e extensibilidade, permitindo que novas opções sejam adicionadas sem interromper as implementações atuais. As seções a seguir descrevem as opções. Como o número e a ordem das opções podem mudar, analise o cabeçalho GENEVE com base nos campos TLV para garantir a compatibilidade futura da implementação do dispositivo.

As opções GENEVE específicas para o espelhamento de pacotes ULL são as seguintes:

  • ID da rede (cookie de rede)
  • Carimbo de data/hora
  • ID estável da rede
  • Endereço IP primário

ID da rede

A opção de ID da rede, também conhecida como "cookie de rede", identifica a rede virtual associada ao tráfego encapsulado por GENEVE no espelhamento de pacotes ULL. Essa opção é identificada pela classe de opção 0x0132 (Google) e pelo tipo 0x1 (ID da rede).

Para o espelhamento de pacotes ULL, o cookie de rede é definido como zero (0). Os dados da opção contêm 32 bits. Os primeiros 31 bits são reservados, e o bit final indica a direção do pacote original.

O espelhamento de pacotes ULL usa uma versão modificada da opção de ID da rede. Nessa versão, todos os bits, exceto os de direção e reservados, são definidos como 0. Para mais informações sobre o ponto de captura, consulte ID estável da rede.

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

       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  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                            Reserved                         |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 de opção em uma classe. O valor 0x1 designa a opção de ID da rede. Para mais informações, consulte Opções de túnel. 8 bits
R Os flags de controle de opção reservados 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
Reservado Precisa ser definido como zero (0) na transmissão e ignorado no recebimento. 31 bits
D Indica a direção do pacote original. Zero (0) indica entrada e um (1) indica um pacote de saída no recurso espelhado original. 1 bit

Carimbo de data/hora

A opção de carimbo de data/hora indica o tempo de captura do pacote original no ponto de captura (a instância do Compute Engine em que o pacote foi capturado ou espelhado). Essa opção é identificada pela classe de opção 0x0132 (Google) e pelo tipo 0x0f (carimbo de data/hora).

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=0x0f   |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Timestamp                           +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

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 de opção em uma classe. O valor 0x0f designa a opção de carimbo de data/hora. Para mais informações, consulte Opções de túnel. 8 bits
R Os flags de controle de opção reservados 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 carimbo de data/hora é de 64 bits (8 bytes), então o comprimento dessa opção é definido como 2. 5 bits
Carimbo de data/hora O tempo de captura do pacote original, representado como nanossegundos desde a época. A granularidade de nanossegundos não garante a precisão de nanossegundos. 64 bits

ID estável da rede

A opção de ID estável da rede identifica a rede da instância espelhada. Essa opção é identificada pela classe de opção 0x0132 (Google) e pelo tipo 0x10 (ID estável da rede).

O diagrama a seguir mostra o formato da opção no pacote GENEVE. O ID estável da rede compreende um número de projeto e um ID de rede.

       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=0x10   |R|R|R|  Len=4  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                       Project Number                          +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                         Network 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 de opção em uma classe. O valor 0x10 designa a opção de ID estável da rede. Para mais informações, consulte Opções de túnel. 8 bits
R Os flags de controle de opção reservados 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 64 bits (8 bytes), então o comprimento dessa opção é definido como 4. 5 bits
Número do projeto Número do projeto Google Cloud . 64 bits
ID da rede O ID da rede VPC ULL. 64 bits

Endereço IP primário

A opção de endereço IP primário identifica o endereço IP do ponto de captura (a instância do Compute Engine em que o pacote foi capturado ou espelhado). Essa opção é identificada pela classe de opção 0x0132 (Google) e pelo tipo 0x11 (endereço IP primário).

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

       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=0x11   |R|R|R|  Len=1  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Primary IP Address                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

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 de opção em uma classe. O valor 0x11 designa a opção de endereço IP primário. 8 bits
R Os flags de controle de opção reservados 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 endereço IP é de 32 bits (4 bytes), então o comprimento dessa opção é definido como 1. 5 bits
Endereço IP primário O endereço IP primário do ponto de captura (a NIC da instância do Compute Engine em que o pacote foi capturado ou espelhado). 32 bits

Formatos de cabeçalho GENEVE

Esta seção descreve os formatos de cabeçalho GENEVE usados pelo espelhamento de pacotes para redes VPC ULL.

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 de nível básico e interoperabilidade.

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 Google Cloudcampos de cabeçalho IPv4 específicos mostrados no diagrama anterior. Para informações sobre campos de cabeçalho IPv4 comuns, consulte RFC 8926.

Campo Descrição
Proto=17 (sempre UDP para GENEVE) Indica que o payload encapsulado usa o protocolo UDP.
Endereço da fonte 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 de Ethernet e endereços IP. Ele também fornece entropia para roteadores que executam 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 de cabeçalho UDP mostrados no diagrama anterior:

Campo 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 (ambas as direções).
Dst port O número da porta de destino designada para o tráfego GENEVE, definido como 6081.
Comprimento UDP O comprimento total do datagrama UDP, incluindo o cabeçalho UDP e o pacote GENEVE encapsulado.
checksum UDP O valor de checksum do datagrama UDP, usado para detecção de erros.

Opções GENEVE

As opções GENEVE Google Cloudespecíficas usadas no espelhamento de pacotes para redes VPC ULL são cookie de rede, carimbo de data/hora, ID estável da rede, endereço IP primário e carimbo de data/hora de processamento de pedidos justos. Para mais informações, consulte Opções GENEVE para espelhamento de pacotes em redes VPC ULL.

O diagrama a seguir mostra como as opções GENEVE específicas Google Cloudsão usadas no espelhamento de pacotes para redes VPC ULL.

       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                     |D|
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |   Type=0x0f   |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Timestamp                           +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |    Type=0x10   |R|R|R|  Len=4  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                         Project Number                        +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                           Network ID                          +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |   Type=0x11   |R|R|R|  Len=1  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                       Primary IP Address                      |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |  Option Class=0x0132 (Google) |   Type=0x13   |R|R|R|  Len=2  |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                                                               |
      +                Fair order processing timestamp                +
      |                                                               |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   

O Opt len no diagrama anterior representa o comprimento dos campos de opção em múltiplos de 4 bytes. Esse comprimento não inclui o cabeçalho de túnel fixo de 8 bytes. Para mais informações, consulte Campos de cabeçalho de túnel.

Encapsulamento GENEVE e requisitos de MTU

A unidade máxima de transmissão (MTU, na sigla em inglês) é o tamanho, em bytes, do maior pacote de IP possível que pode caber 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.

As redes VPC ULL têm uma MTU máxima de 1.500 bytes. No entanto, o espelhamento de pacotes ULL requer 308 bytes para o overhead de encapsulamento GENEVE. Para garantir que o tráfego espelhado chegue às instâncias do coletor sem fragmentação, a rede em que o coletor reside precisa ter uma MTU de pelo menos 1.808 bytes (1.500 bytes para tráfego padrão mais 308 bytes para o overhead de encapsulamento GENEVE).

Se os limites de MTU forem insuficientes para acomodar o encapsulamento GENEVE, os pacotes poderão ser descartados. Isso pode ocorrer no nível da rede virtual ou no sistema operacional.