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.