O campo Checksum (Soma de Verificação) é um campo de 16 bits localizado ao final do cabeçalho UDP. 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.

1. 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.
    4. Se ocorrer um “carry” (estouro), 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.

2. 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.

O Pseudo-Cabeçalho consiste de:
1. Endereço IP de Origem (do pacote IP).
2. Endereço IP de Destino (do pacote IP).
3. Zeros (8 bits) para preenchimento.
4. Protocolo (8 bits): O valor é 17 (decimal), que é o número de protocolo atribuído ao UDP no cabeçalho IP.
5. Comprimento do UDP (16 bits): O valor do campo Length do cabeçalho UDP.

Por que o Pseudo-Cabeçalho é importante?
Ele garante que o datagrama UDP foi entregue ao host 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 a entrega a destinatários incorretos.

3. 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, a maioria das implementações modernas de sistemas operacionais habilita o checksum por padrão para evitar a 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.

4. 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. 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.

5. Proteção de Dados

O checksum cobre:
* O Cabeçalho UDP (Portas, Length).
* O Payload (Dados da aplicação).
* O Pseudo-Cabeçalho (Metadados do IP).

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.