Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

04 - Checksum

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Campo Checksum (Soma de Verificação) do Cabeçalho UDP

1. Definição e Finalidade

O campo Checksum (Soma de Verificação) é um campo de 16 bits localizado ao final do cabeçalho UDP (bytes 7 e 8). Sua função é proporcionar verificação de integridade dos dados, permitindo que o receptor detecte se o datagrama sofreu alterações (erros de bits) durante o trânsito pela rede.

Embora o UDP seja um protocolo "melhor esforço" e não confiável, ele oferece este mecanismo básico de segurança para garantir que, se um dado for entregue à aplicação, ele não esteja corrompido. Se o checksum falhar, o pacote é silenciosamente descartado, sem qualquer notificação ao emissor.

Características Formais

  • Tamanho: 16 bits (2 bytes)
  • Posição: Bytes 7-8 do cabeçalho UDP
  • Endianness: Big-endian (network byte order)
  • Cobertura: Cabeçalho UDP + Payload + Pseudo-cabeçalho IP
  • RFC de referência: RFC 768 (1980), RFC 2460 (IPv6)

2. O Algoritmo: Soma em Complemento de Um

O checksum do UDP utiliza o mesmo algoritmo matemático de soma em complemento de um usado no cabeçalho IP, mas com uma abrangência maior.

Processo de Cálculo (Emissor)

  1. O datagrama UDP é considerado como uma sequência de inteiros de 16 bits.
  2. Se o número de bytes for ímpar, um byte de preenchimento (padding) com valor zero é adicionado apenas para fins de cálculo (não é transmitido).
  3. Todos os inteiros de 16 bits são somados, incluindo o pseudo-cabeçalho.
  4. Se ocorrer um "carry" (estouro do bit 16), ele é adicionado de volta ao resultado (carry-around).
  5. O complemento de um do resultado (inverter todos os bits: 0 vira 1, 1 vira 0) é colocado no campo Checksum.

Processo de Verificação (Receptor)

  1. O receptor soma todos os inteiros de 16 bits do datagrama recebido, incluindo o campo Checksum recebido.
  2. Se não houver erros, o resultado será todos os bits ligados (0xFFFF em hexadecimal).
  3. Se o resultado for diferente de 0xFFFF, o pacote está corrompido e é descartado silenciosamente.

Exemplo Numérico Simplificado

Se dois valores de 16 bits forem somados:
  0x1234 + 0x5678 = 0x68AC (sem carry)
  0xFFFF + 0x0001 = 0x10000 → carry-around → 0x0001
  Complemento de um de 0x68AC = 0x9753 (checksum transmitido)

3. O Pseudo-Cabeçalho (Pseudo-Header)

A característica mais distinta e importante do Checksum do UDP é a inclusão de um Pseudo-Cabeçalho no cálculo. O UDP é encapsulado no IP, mas para calcular o checksum, ele "pede emprestado" informações do cabeçalho IP. Este pseudo-cabeçalho não é transmitido fisicamente na rede; ele é construído apenas momentaneamente na memória para o cálculo.

Estrutura do Pseudo-Cabeçalho (IPv4)

Campo Tamanho Conteúdo
Endereço IP de Origem 32 bits Src IP do cabeçalho IP
Endereço IP de Destino 32 bits Dst IP do cabeçalho IP
Zeros 8 bits Preenchimento com zeros
Protocolo 8 bits Valor 17 (UDP)
Comprimento UDP 16 bits Valor do campo Length do UDP

Por que o Pseudo-Cabeçalho é Importante?

Ele garante que o datagrama UDP foi entregue ao host correto e ao protocolo correto. Se houver um erro de roteamento e o pacote IP for entregue ao computador errado (mesmo que a porta UDP coincida), os endereços IP no pseudo-cabeçalho não corresponderão aos endereços da interface de rede do receptor. O cálculo do checksum falhará e o pacote será descartado. Ele protege contra:

  1. Entrega a destinatários incorretos.
  2. Erros no campo Protocol do cabeçalho IP.
  3. Corruption do campo Length do UDP.

4. Opcionalidade no IPv4 vs. Obrigatoriedade no IPv6

O tratamento do Checksum varia entre as versões do protocolo IP:

IPv4 (Opcional)

No IPv4, o uso do checksum UDP é opcional. Se o campo for preenchido com todos os bits em zero (0x0000), isso significa que o checksum foi desabilitado pelo emissor. Nesse caso, o receptor não deve verificar o checksum.

  • Nota: Embora opcional pela RFC, a RFC 1122 (1989) recomenda que implementações modernas sempre habilitem o checksum. A maioria dos sistemas operacionais atuais habilita por padrão para evitar entrega de dados corrompidos às aplicações.

IPv6 (Obrigatório)

No IPv6, o checksum UDP é obrigatório. O cabeçalho IPv6 removeu o próprio checksum para acelerar o processamento nos roteadores. Com isso, o checksum do UDP se tornou a única linha de defesa contra erros de transmissão na Camada de Transporte. Em IPv6, o valor 0x0000 é inválido e o pacote deve ser descartado se recebido.

Pseudo-Cabeçalho no IPv6

No IPv6, o pseudo-cabeçalho é maior pois os endereços têm 128 bits:

Campo Tamanho
Endereço Origem IPv6 128 bits
Endereço Destino IPv6 128 bits
Comprimento UDP 32 bits
Zeros 24 bits
Próximo Cabeçalho 8 bits (17 = UDP)

5. Comportamento em Caso de Erro

Se o receptor calcular o checksum e descobrir uma discrepância:

  1. Descarte: O datagrama UDP é silenciosamente descartado. Os dados não são passados para a aplicação.
  2. Sem Retransmissão: O protocolo UDP não possui mecanismo para pedir uma retransmissão. O emissor não é notificado do erro.
  3. Sem Estatística: Geralmente, não há nem mesmo um contador ICMP informando o descarte (ao contrário de outros protocolos).
  4. Implicação: A aplicação nunca verá dados corrompidos, mas pode perceber uma falha na comunicação (timeout) se esperava uma resposta e ela nunca chegou.

6. Cobertura de Proteção

O checksum cobre três blocos distintos de informação:

Bloco Conteúdo Proteção
Cabeçalho UDP Portas, Length Evita entrega à porta errada
Payload Dados da aplicação Integridade dos dados
Pseudo-cabeçalho Metadados do IP Endereço e protocolo corretos

Isso garante a integridade end-to-end dos dados desde que saíram da aplicação origem até chegarem à aplicação destino, protegendo contra bits invertidos causados por ruído elétrico, falhas de hardware ou bugs de firmware em roteadores.

7. Performance e Offloading

O cálculo do checksum pode ser caro em CPU para links de alta velocidade (10 Gbps+). Para mitigar isso, placas de rede modernas implementam Checksum Offloading:

  • TX Checksum Offload: A placa de rede calcula o checksum no hardware ao transmitir.
  • RX Checksum Offload: A placa de rede valida o checksum no hardware ao receber.

O sistema operacional marca o pacote com CHECKSUM_PARTIAL e a NIC completa o cálculo. Isso reduz drasticamente o uso de CPU em servidores de alto throughput.

8. Limitações do Algoritmo

Embora eficaz para detectar erros aleatórios, o checksum em complemento de um tem limitações:

  • Não detecta reordenação de palavras de 16 bits (a soma permanece igual).
  • Não detecta troca de duas palavras iguais em posições diferentes.
  • Não é uma proteção criptográfica: não protege contra adulteração maliciosa (para isso, use IPsec ou DTLS).

9. Resumo Técnico

Atributo Valor
Tamanho do campo 16 bits
Algoritmo Complemento de um
Opcional em IPv4 Sim (valor 0 = desabilitado)
Obrigatório em IPv6 Sim
Cobertura Pseudo-cabeçalho + Cabeçalho UDP + Payload
Offloading Suportado por placas modernas
Tratamento de erro Descarte silencioso

10. Conclusão

O campo Checksum é a única garantia de integridade do UDP. Apesar de opcional em IPv4, sua importância cresceu com o IPv6, onde se tornou obrigatório. O uso do pseudo-cabeçalho é uma sacada brilhante do design original que estende a proteção para além do datagrama UDP, garantindo que o pacote não apenas não esteja corrompido, mas também tenha sido entregue ao destino correto. Para engenheiros de rede, entender este campo é fundamental para diagnosticar perdas misteriosas de pacotes e otimizar performance em links de alta velocidade.